bobo-ai-cli 2.1.0 → 3.0.1
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/README.md +52 -9
- package/bundled-skills/CORE_SKILLS.txt +18 -0
- package/dist/agent.js +91 -51
- package/dist/agent.js.map +1 -1
- package/dist/agents/catalog.d.ts +40 -0
- package/dist/agents/catalog.js +172 -0
- package/dist/agents/catalog.js.map +1 -0
- package/dist/agents/index.d.ts +6 -0
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/router.d.ts +43 -0
- package/dist/agents/router.js +87 -0
- package/dist/agents/router.js.map +1 -0
- package/dist/agents/spawn.d.ts +46 -0
- package/dist/agents/spawn.js +91 -0
- package/dist/agents/spawn.js.map +1 -0
- package/dist/autonomous.js +41 -1
- package/dist/autonomous.js.map +1 -1
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +669 -0
- package/dist/cli.js.map +1 -0
- package/dist/compactor.d.ts +49 -4
- package/dist/compactor.js +164 -17
- package/dist/compactor.js.map +1 -1
- package/dist/completer.js +2 -0
- package/dist/completer.js.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/cost-tracker.js +36 -2
- package/dist/cost-tracker.js.map +1 -1
- package/dist/dream.d.ts +42 -0
- package/dist/dream.js +324 -0
- package/dist/dream.js.map +1 -0
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +7 -2
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +10 -1136
- package/dist/index.js.map +1 -1
- package/dist/insight.js +4 -11
- package/dist/insight.js.map +1 -1
- package/dist/knowledge.d.ts +13 -0
- package/dist/knowledge.js +16 -4
- package/dist/knowledge.js.map +1 -1
- package/dist/mcp-client.js +59 -41
- package/dist/mcp-client.js.map +1 -1
- package/dist/memory.d.ts +4 -0
- package/dist/memory.js +30 -18
- package/dist/memory.js.map +1 -1
- package/dist/project.js +2 -1
- package/dist/project.js.map +1 -1
- package/dist/providers.js +1 -1
- package/dist/providers.js.map +1 -1
- package/dist/repl.d.ts +16 -0
- package/dist/repl.js +704 -0
- package/dist/repl.js.map +1 -0
- package/dist/sessions.js +59 -3
- package/dist/sessions.js.map +1 -1
- package/dist/skill-router.js +2 -2
- package/dist/skill-router.js.map +1 -1
- package/dist/skills/composer.d.ts +18 -0
- package/dist/skills/composer.js +59 -0
- package/dist/skills/composer.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +12 -0
- package/dist/skills/loader.js +150 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/types.d.ts +28 -0
- package/dist/skills/types.js +9 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills.d.ts +1 -0
- package/dist/skills.js +10 -8
- package/dist/skills.js.map +1 -1
- package/dist/state/artifacts.d.ts +71 -0
- package/dist/state/artifacts.js +133 -0
- package/dist/state/artifacts.js.map +1 -0
- package/dist/state/index.d.ts +9 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/manager.d.ts +89 -0
- package/dist/state/manager.js +132 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/project-memory.d.ts +24 -0
- package/dist/state/project-memory.js +83 -0
- package/dist/state/project-memory.js.map +1 -0
- package/dist/state/recovery.d.ts +24 -0
- package/dist/state/recovery.js +95 -0
- package/dist/state/recovery.js.map +1 -0
- package/dist/statusbar.d.ts +1 -0
- package/dist/statusbar.js +12 -1
- package/dist/statusbar.js.map +1 -1
- package/dist/structured/loader.js +4 -2
- package/dist/structured/loader.js.map +1 -1
- package/dist/sub-agent-runner.d.ts +1 -0
- package/dist/sub-agent-runner.js +32 -5
- package/dist/sub-agent-runner.js.map +1 -1
- package/dist/sub-agents.d.ts +19 -1
- package/dist/sub-agents.js +142 -5
- package/dist/sub-agents.js.map +1 -1
- package/dist/tool-governance.d.ts +77 -0
- package/dist/tool-governance.js +366 -0
- package/dist/tool-governance.js.map +1 -0
- package/dist/tools/advanced.js +3 -2
- package/dist/tools/advanced.js.map +1 -1
- package/dist/tools/browser.js +2 -2
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/claude-code.js +2 -2
- package/dist/tools/claude-code.js.map +1 -1
- package/dist/tools/index.js +36 -12
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/process-manager.js +2 -2
- package/dist/tools/process-manager.js.map +1 -1
- package/dist/ui/hud.d.ts +25 -0
- package/dist/ui/hud.js +67 -0
- package/dist/ui/hud.js.map +1 -0
- package/dist/verification-agent.d.ts +46 -0
- package/dist/verification-agent.js +533 -0
- package/dist/verification-agent.js.map +1 -0
- package/dist/watcher.js +2 -2
- package/dist/watcher.js.map +1 -1
- package/dist/web.js +1 -1
- package/dist/web.js.map +1 -1
- package/dist/workflows/ask.d.ts +13 -0
- package/dist/workflows/ask.js +66 -0
- package/dist/workflows/ask.js.map +1 -0
- package/dist/workflows/index.d.ts +5 -0
- package/dist/workflows/index.js +6 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/interview.d.ts +11 -0
- package/dist/workflows/interview.js +36 -0
- package/dist/workflows/interview.js.map +1 -0
- package/dist/workflows/plan.d.ts +13 -0
- package/dist/workflows/plan.js +34 -0
- package/dist/workflows/plan.js.map +1 -0
- package/dist/workflows/team.d.ts +17 -0
- package/dist/workflows/team.js +86 -0
- package/dist/workflows/team.js.map +1 -0
- package/dist/workflows/verify.d.ts +11 -0
- package/dist/workflows/verify.js +21 -0
- package/dist/workflows/verify.js.map +1 -0
- package/package.json +18 -5
- package/bundled-skills/Skill_Seekers/SKILL.md +0 -1722
- package/bundled-skills/ab-test-setup/SKILL.md +0 -557
- package/bundled-skills/adversarial-verification/SKILL.md +0 -95
- package/bundled-skills/agent-sdk-dev/SKILL.md +0 -238
- package/bundled-skills/agent-tools/SKILL.md +0 -136
- package/bundled-skills/analytics-tracking/SKILL.md +0 -597
- package/bundled-skills/artifacts-builder/SKILL.md +0 -89
- package/bundled-skills/asana/SKILL.md +0 -13
- package/bundled-skills/brand-voice/SKILL.md +0 -481
- package/bundled-skills/browser-use/SKILL.md +0 -419
- package/bundled-skills/cache-optimization-skill/SKILL.md +0 -179
- package/bundled-skills/canvas-design/SKILL.md +0 -147
- package/bundled-skills/citation-validator/SKILL.md +0 -203
- package/bundled-skills/clangd-lsp/SKILL.md +0 -52
- package/bundled-skills/code-simplifier/SKILL.md +0 -13
- package/bundled-skills/commit-commands/SKILL.md +0 -258
- package/bundled-skills/competitor-alternatives/SKILL.md +0 -795
- package/bundled-skills/content-atomizer/SKILL.md +0 -910
- package/bundled-skills/content-research-writer/SKILL.md +0 -605
- package/bundled-skills/context7/SKILL.md +0 -13
- package/bundled-skills/copy-editing/SKILL.md +0 -494
- package/bundled-skills/copywriting/SKILL.md +0 -510
- package/bundled-skills/csharp-lsp/SKILL.md +0 -40
- package/bundled-skills/decision-making-framework/SKILL.md +0 -154
- package/bundled-skills/deep-research/SKILL.md +0 -236
- package/bundled-skills/developer-growth-analysis/SKILL.md +0 -335
- package/bundled-skills/direct-response-copy/SKILL.md +0 -2336
- package/bundled-skills/docker-expert/SKILL.md +0 -229
- package/bundled-skills/document-skills/SKILL.md +0 -13
- package/bundled-skills/documentation-expert/SKILL.md +0 -126
- package/bundled-skills/email-sequence/SKILL.md +0 -1061
- package/bundled-skills/email-sequences/SKILL.md +0 -910
- package/bundled-skills/example-plugin/SKILL.md +0 -72
- package/bundled-skills/explanatory-output-style/SKILL.md +0 -82
- package/bundled-skills/feature-dev/SKILL.md +0 -458
- package/bundled-skills/file-organizer/SKILL.md +0 -466
- package/bundled-skills/firebase.disabled/SKILL.md +0 -13
- package/bundled-skills/form-cro/SKILL.md +0 -488
- package/bundled-skills/free-tool-strategy/SKILL.md +0 -636
- package/bundled-skills/frontend-design/SKILL.md +0 -41
- package/bundled-skills/frontend-design-offical/SKILL.md +0 -55
- package/bundled-skills/gitlab/SKILL.md +0 -13
- package/bundled-skills/gopls-lsp/SKILL.md +0 -32
- package/bundled-skills/got-controller/SKILL.md +0 -218
- package/bundled-skills/greptile/SKILL.md +0 -72
- package/bundled-skills/hookify/SKILL.md +0 -376
- package/bundled-skills/image-editor/SKILL.md +0 -189
- package/bundled-skills/image-enhancer/SKILL.md +0 -109
- package/bundled-skills/jdtls-lsp/SKILL.md +0 -49
- package/bundled-skills/json-canvas/SKILL.md +0 -654
- package/bundled-skills/keyword-research/SKILL.md +0 -559
- package/bundled-skills/kotlin-lsp/SKILL.md +0 -28
- package/bundled-skills/laravel-boost/SKILL.md +0 -13
- package/bundled-skills/launch-strategy/SKILL.md +0 -394
- package/bundled-skills/lead-magnet/SKILL.md +0 -393
- package/bundled-skills/learning-output-style/SKILL.md +0 -106
- package/bundled-skills/linear/SKILL.md +0 -13
- package/bundled-skills/lua-lsp/SKILL.md +0 -47
- package/bundled-skills/marketing-ideas/SKILL.md +0 -720
- package/bundled-skills/marketing-psychology/SKILL.md +0 -534
- package/bundled-skills/mcp-builder/SKILL.md +0 -369
- package/bundled-skills/meeting-insights-analyzer/SKILL.md +0 -347
- package/bundled-skills/memory-evolution-system/SKILL.md +0 -172
- package/bundled-skills/multi-lens-thinking/SKILL.md +0 -407
- package/bundled-skills/nano-banana-pro/SKILL.md +0 -116
- package/bundled-skills/newsletter/SKILL.md +0 -736
- package/bundled-skills/notebooklm/SKILL.md +0 -296
- package/bundled-skills/obsidian-bases/SKILL.md +0 -634
- package/bundled-skills/obsidian-markdown/SKILL.md +0 -651
- package/bundled-skills/onboarding-cro/SKILL.md +0 -494
- package/bundled-skills/page-cro/SKILL.md +0 -379
- package/bundled-skills/paid-ads/SKILL.md +0 -624
- package/bundled-skills/paywall-upgrade-cro/SKILL.md +0 -651
- package/bundled-skills/php-lsp/SKILL.md +0 -36
- package/bundled-skills/playwright/SKILL.md +0 -13
- package/bundled-skills/plugin-dev/SKILL.md +0 -434
- package/bundled-skills/popup-cro/SKILL.md +0 -520
- package/bundled-skills/positioning-angles/SKILL.md +0 -330
- package/bundled-skills/pr-review-toolkit/SKILL.md +0 -359
- package/bundled-skills/pricing-strategy/SKILL.md +0 -777
- package/bundled-skills/proactive-self-improving/SKILL.md +0 -435
- package/bundled-skills/programmatic-seo/SKILL.md +0 -714
- package/bundled-skills/pyright-lsp/SKILL.md +0 -43
- package/bundled-skills/quality-assurance-framework/SKILL.md +0 -168
- package/bundled-skills/question-refiner/SKILL.md +0 -160
- package/bundled-skills/ralph-loop/SKILL.md +0 -205
- package/bundled-skills/refactoring-expert/SKILL.md +0 -103
- package/bundled-skills/referral-program/SKILL.md +0 -668
- package/bundled-skills/research-executor/SKILL.md +0 -164
- package/bundled-skills/review-with-security/SKILL.md +0 -12
- package/bundled-skills/rust-analyzer-lsp/SKILL.md +0 -50
- package/bundled-skills/schema-markup/SKILL.md +0 -647
- package/bundled-skills/security-audit-expert/SKILL.md +0 -124
- package/bundled-skills/security-expert/SKILL.md +0 -140
- package/bundled-skills/security-guidance/SKILL.md +0 -13
- package/bundled-skills/seedance-prompt/SKILL.md +0 -139
- package/bundled-skills/self-evolution/SKILL.md +0 -1160
- package/bundled-skills/seo-audit/SKILL.md +0 -432
- package/bundled-skills/seo-content/SKILL.md +0 -787
- package/bundled-skills/serena/SKILL.md +0 -13
- package/bundled-skills/signup-flow-cro/SKILL.md +0 -409
- package/bundled-skills/skill-manager/SKILL.md +0 -226
- package/bundled-skills/skill-share/SKILL.md +0 -98
- package/bundled-skills/slack/SKILL.md +0 -13
- package/bundled-skills/social-content/SKILL.md +0 -878
- package/bundled-skills/spec-flow-skill/SKILL.md +0 -124
- package/bundled-skills/stripe/SKILL.md +0 -13
- package/bundled-skills/supabase/SKILL.md +0 -13
- package/bundled-skills/swift-lsp/SKILL.md +0 -40
- package/bundled-skills/synthesizer/SKILL.md +0 -236
- package/bundled-skills/template-skill/SKILL.md +0 -16
- package/bundled-skills/theme-factory/SKILL.md +0 -72
- package/bundled-skills/tiktok-research/SKILL.md +0 -208
- package/bundled-skills/typescript-lsp/SKILL.md +0 -36
- package/bundled-skills/ui-ux-pro-max/SKILL.md +0 -247
- package/bundled-skills/visual-prompt-engineer/SKILL.md +0 -102
- package/bundled-skills/webapp-testing/SKILL.md +0 -111
- package/bundled-skills/wide-research/SKILL.md +0 -191
package/dist/dream.js
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KAIROS Dream Mode — Memory consolidation and insight extraction
|
|
3
|
+
*
|
|
4
|
+
* Inspired by biological memory consolidation during sleep, this module
|
|
5
|
+
* processes accumulated experiences and distills them into structured knowledge.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - /dream command to manually trigger consolidation
|
|
9
|
+
* - Auto-trigger on session-end if sufficient new experiences
|
|
10
|
+
* - LLM-powered distillation of logs → structured preferences & learnings
|
|
11
|
+
* - Deduplication and organization of memory entries
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, writeFileSync, readdirSync, existsSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import OpenAI from 'openai';
|
|
16
|
+
import { loadConfig } from './config.js';
|
|
17
|
+
import { getMemoryDir } from './memory.js';
|
|
18
|
+
/**
|
|
19
|
+
* Determine if dream mode should be triggered automatically.
|
|
20
|
+
* Criteria:
|
|
21
|
+
* - More than 50 new memory entries since last consolidation
|
|
22
|
+
* - Last consolidation was more than 24 hours ago
|
|
23
|
+
*/
|
|
24
|
+
export function shouldAutoDream() {
|
|
25
|
+
const memoryDir = getMemoryDir();
|
|
26
|
+
if (!existsSync(memoryDir))
|
|
27
|
+
return false;
|
|
28
|
+
const lastDreamPath = join(memoryDir, '.last-dream');
|
|
29
|
+
let lastDreamTime = 0;
|
|
30
|
+
if (existsSync(lastDreamPath)) {
|
|
31
|
+
try {
|
|
32
|
+
lastDreamTime = parseInt(readFileSync(lastDreamPath, 'utf-8'), 10);
|
|
33
|
+
}
|
|
34
|
+
catch (_) {
|
|
35
|
+
/* intentionally ignored: optional dream source unreadable */
|
|
36
|
+
// Invalid timestamp, treat as never dreamed
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const hoursSinceLastDream = (now - lastDreamTime) / (1000 * 60 * 60);
|
|
41
|
+
// Check if more than 24 hours since last dream
|
|
42
|
+
if (hoursSinceLastDream < 24)
|
|
43
|
+
return false;
|
|
44
|
+
// Count memory entries
|
|
45
|
+
const files = readdirSync(memoryDir).filter(f => f.endsWith('.md') || f.endsWith('.txt'));
|
|
46
|
+
let entryCount = 0;
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
try {
|
|
49
|
+
const content = readFileSync(join(memoryDir, file), 'utf-8');
|
|
50
|
+
// Count entries (rough heuristic: lines starting with - or ##)
|
|
51
|
+
entryCount += (content.match(/^[-#]/gm) || []).length;
|
|
52
|
+
}
|
|
53
|
+
catch (_) {
|
|
54
|
+
/* intentionally ignored: optional dream source unreadable */
|
|
55
|
+
// Skip unreadable files
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return entryCount > 50;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Run dream mode consolidation.
|
|
62
|
+
*/
|
|
63
|
+
export async function runDream(options = {}) {
|
|
64
|
+
const config = loadConfig();
|
|
65
|
+
const memoryDir = getMemoryDir();
|
|
66
|
+
if (!existsSync(memoryDir)) {
|
|
67
|
+
return {
|
|
68
|
+
insights: [],
|
|
69
|
+
preferencesUpdated: 0,
|
|
70
|
+
duplicatesRemoved: 0,
|
|
71
|
+
summary: 'No memory directory found. Nothing to consolidate.',
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// Step 1: Load all memory files
|
|
75
|
+
const memoryContent = loadAllMemories(memoryDir);
|
|
76
|
+
if (memoryContent.length === 0) {
|
|
77
|
+
return {
|
|
78
|
+
insights: [],
|
|
79
|
+
preferencesUpdated: 0,
|
|
80
|
+
duplicatesRemoved: 0,
|
|
81
|
+
summary: 'No memory content found.',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Step 2: Use LLM to distill insights
|
|
85
|
+
const insights = await distillInsights(memoryContent, config);
|
|
86
|
+
// Step 3: Deduplicate and organize
|
|
87
|
+
const { preferencesUpdated, duplicatesRemoved } = options.dryRun
|
|
88
|
+
? { preferencesUpdated: 0, duplicatesRemoved: 0 }
|
|
89
|
+
: consolidateMemories(insights, memoryDir);
|
|
90
|
+
// Step 4: Record dream timestamp
|
|
91
|
+
if (!options.dryRun) {
|
|
92
|
+
writeFileSync(join(memoryDir, '.last-dream'), Date.now().toString());
|
|
93
|
+
}
|
|
94
|
+
const summary = generateDreamSummary(insights, preferencesUpdated, duplicatesRemoved);
|
|
95
|
+
return {
|
|
96
|
+
insights,
|
|
97
|
+
preferencesUpdated,
|
|
98
|
+
duplicatesRemoved,
|
|
99
|
+
summary,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Load all memory files into a single text blob.
|
|
104
|
+
*/
|
|
105
|
+
function loadAllMemories(memoryDir) {
|
|
106
|
+
const files = readdirSync(memoryDir).filter(f => (f.endsWith('.md') || f.endsWith('.txt')) && !f.startsWith('.'));
|
|
107
|
+
const sections = [];
|
|
108
|
+
for (const file of files) {
|
|
109
|
+
try {
|
|
110
|
+
const content = readFileSync(join(memoryDir, file), 'utf-8');
|
|
111
|
+
if (content.trim()) {
|
|
112
|
+
sections.push(`## Source: ${file}\n\n${content}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (_) {
|
|
116
|
+
/* intentionally ignored: optional dream source unreadable */
|
|
117
|
+
// Skip unreadable files
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return sections.join('\n\n---\n\n');
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Use LLM to distill insights from memory content.
|
|
124
|
+
*/
|
|
125
|
+
async function distillInsights(memoryContent, config) {
|
|
126
|
+
if (!config.apiKey) {
|
|
127
|
+
throw new Error('API key not configured');
|
|
128
|
+
}
|
|
129
|
+
const client = new OpenAI({
|
|
130
|
+
apiKey: config.apiKey,
|
|
131
|
+
baseURL: config.baseUrl,
|
|
132
|
+
});
|
|
133
|
+
const prompt = `You are analyzing accumulated memory logs to extract structured insights.
|
|
134
|
+
|
|
135
|
+
Memory Content:
|
|
136
|
+
${memoryContent.slice(0, 20000)} ${memoryContent.length > 20000 ? '\n\n[... truncated ...]' : ''}
|
|
137
|
+
|
|
138
|
+
Task: Extract and categorize insights from these memories.
|
|
139
|
+
|
|
140
|
+
Categories:
|
|
141
|
+
1. user-preference: User's explicit preferences, habits, or corrections
|
|
142
|
+
2. technical-pattern: Code patterns, architectural decisions, or technical learnings
|
|
143
|
+
3. project-context: Project-specific knowledge, file structure, or domain concepts
|
|
144
|
+
4. workflow-optimization: Process improvements, shortcuts, or efficiency tips
|
|
145
|
+
|
|
146
|
+
For each insight:
|
|
147
|
+
- Provide clear, actionable content
|
|
148
|
+
- Assign confidence level (high/medium/low)
|
|
149
|
+
- Note which source it came from
|
|
150
|
+
|
|
151
|
+
Output format (JSON array):
|
|
152
|
+
[
|
|
153
|
+
{
|
|
154
|
+
"category": "user-preference",
|
|
155
|
+
"content": "User prefers TypeScript strict mode and explicit type annotations",
|
|
156
|
+
"confidence": "high",
|
|
157
|
+
"source": "user.md"
|
|
158
|
+
},
|
|
159
|
+
...
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
Output ONLY the JSON array, no explanation:`;
|
|
163
|
+
try {
|
|
164
|
+
const completion = await client.chat.completions.create({
|
|
165
|
+
model: config.model,
|
|
166
|
+
messages: [{ role: 'user', content: prompt }],
|
|
167
|
+
temperature: 0.3, // Lower temperature for consistent extraction
|
|
168
|
+
max_tokens: 2000,
|
|
169
|
+
});
|
|
170
|
+
const response = completion.choices[0]?.message?.content || '[]';
|
|
171
|
+
// Extract JSON from response (might be wrapped in code blocks)
|
|
172
|
+
const jsonMatch = response.match(/\[[\s\S]*\]/);
|
|
173
|
+
const jsonText = jsonMatch ? jsonMatch[0] : '[]';
|
|
174
|
+
const insights = JSON.parse(jsonText);
|
|
175
|
+
return insights;
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
console.error('Failed to distill insights:', e.message);
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Consolidate insights into memory files, removing duplicates.
|
|
184
|
+
*/
|
|
185
|
+
function consolidateMemories(insights, memoryDir) {
|
|
186
|
+
let preferencesUpdated = 0;
|
|
187
|
+
let duplicatesRemoved = 0;
|
|
188
|
+
// Group insights by category
|
|
189
|
+
const grouped = new Map();
|
|
190
|
+
for (const insight of insights) {
|
|
191
|
+
const category = insight.category;
|
|
192
|
+
if (!grouped.has(category)) {
|
|
193
|
+
grouped.set(category, []);
|
|
194
|
+
}
|
|
195
|
+
grouped.get(category).push(insight);
|
|
196
|
+
}
|
|
197
|
+
// Write consolidated insights to category files
|
|
198
|
+
for (const [category, categoryInsights] of grouped.entries()) {
|
|
199
|
+
const fileName = categoryToCategoryFile(category);
|
|
200
|
+
const filePath = join(memoryDir, fileName);
|
|
201
|
+
// Load existing content
|
|
202
|
+
let existingContent = '';
|
|
203
|
+
if (existsSync(filePath)) {
|
|
204
|
+
existingContent = readFileSync(filePath, 'utf-8');
|
|
205
|
+
}
|
|
206
|
+
// Deduplicate: only add insights that aren't already present
|
|
207
|
+
const newInsights = [];
|
|
208
|
+
for (const insight of categoryInsights) {
|
|
209
|
+
if (!existingContent.includes(insight.content)) {
|
|
210
|
+
newInsights.push(`- ${insight.content} (confidence: ${insight.confidence})`);
|
|
211
|
+
preferencesUpdated++;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
duplicatesRemoved++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Append new insights
|
|
218
|
+
if (newInsights.length > 0) {
|
|
219
|
+
const timestamp = new Date().toISOString().split('T')[0];
|
|
220
|
+
const newSection = `\n\n## Consolidated: ${timestamp}\n\n${newInsights.join('\n')}`;
|
|
221
|
+
writeFileSync(filePath, existingContent + newSection);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return { preferencesUpdated, duplicatesRemoved };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Map insight category to memory file name.
|
|
228
|
+
*/
|
|
229
|
+
function categoryToCategoryFile(category) {
|
|
230
|
+
switch (category) {
|
|
231
|
+
case 'user-preference':
|
|
232
|
+
return 'user.md';
|
|
233
|
+
case 'technical-pattern':
|
|
234
|
+
return 'experience.md';
|
|
235
|
+
case 'project-context':
|
|
236
|
+
return 'project.md';
|
|
237
|
+
case 'workflow-optimization':
|
|
238
|
+
return 'reference.md';
|
|
239
|
+
default:
|
|
240
|
+
return 'feedback.md';
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate human-readable dream summary.
|
|
245
|
+
*/
|
|
246
|
+
function generateDreamSummary(insights, preferencesUpdated, duplicatesRemoved) {
|
|
247
|
+
const lines = [];
|
|
248
|
+
lines.push('🌙 Dream Mode Consolidation Complete');
|
|
249
|
+
lines.push('');
|
|
250
|
+
lines.push(`✨ Extracted ${insights.length} insights from memory logs`);
|
|
251
|
+
lines.push(`📝 Updated ${preferencesUpdated} preferences`);
|
|
252
|
+
lines.push(`🗑️ Removed ${duplicatesRemoved} duplicate entries`);
|
|
253
|
+
lines.push('');
|
|
254
|
+
// Group by category
|
|
255
|
+
const grouped = new Map();
|
|
256
|
+
for (const insight of insights) {
|
|
257
|
+
if (!grouped.has(insight.category)) {
|
|
258
|
+
grouped.set(insight.category, []);
|
|
259
|
+
}
|
|
260
|
+
grouped.get(insight.category).push(insight);
|
|
261
|
+
}
|
|
262
|
+
lines.push('Insights by category:');
|
|
263
|
+
for (const [category, categoryInsights] of grouped.entries()) {
|
|
264
|
+
const highConf = categoryInsights.filter(i => i.confidence === 'high').length;
|
|
265
|
+
lines.push(` • ${category}: ${categoryInsights.length} insights (${highConf} high confidence)`);
|
|
266
|
+
}
|
|
267
|
+
lines.push('');
|
|
268
|
+
lines.push('Memory has been consolidated and organized. 💤');
|
|
269
|
+
return lines.join('\n');
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Format dream result for user display.
|
|
273
|
+
*/
|
|
274
|
+
export function formatDreamResult(result) {
|
|
275
|
+
const lines = [];
|
|
276
|
+
lines.push('');
|
|
277
|
+
lines.push('╔═══════════════════════════════════════════════════════════════');
|
|
278
|
+
lines.push('║ 🌙 KAIROS DREAM MODE — Memory Consolidation');
|
|
279
|
+
lines.push('╠═══════════════════════════════════════════════════════════════');
|
|
280
|
+
lines.push(`║ ${result.summary.split('\n')[0]}`);
|
|
281
|
+
lines.push('╠═══════════════════════════════════════════════════════════════');
|
|
282
|
+
if (result.insights.length > 0) {
|
|
283
|
+
lines.push('║ TOP INSIGHTS:');
|
|
284
|
+
lines.push('║');
|
|
285
|
+
// Show top 5 high-confidence insights
|
|
286
|
+
const topInsights = result.insights
|
|
287
|
+
.filter(i => i.confidence === 'high')
|
|
288
|
+
.slice(0, 5);
|
|
289
|
+
for (const insight of topInsights) {
|
|
290
|
+
const icon = getCategoryIcon(insight.category);
|
|
291
|
+
lines.push(`║ ${icon} ${insight.content.slice(0, 55)}`);
|
|
292
|
+
if (insight.content.length > 55) {
|
|
293
|
+
lines.push(`║ ${insight.content.slice(55, 110)}`);
|
|
294
|
+
}
|
|
295
|
+
lines.push('║');
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
lines.push('╠═══════════════════════════════════════════════════════════════');
|
|
299
|
+
lines.push(`║ Statistics:`);
|
|
300
|
+
lines.push(`║ • ${result.insights.length} insights extracted`);
|
|
301
|
+
lines.push(`║ • ${result.preferencesUpdated} new entries added`);
|
|
302
|
+
lines.push(`║ • ${result.duplicatesRemoved} duplicates removed`);
|
|
303
|
+
lines.push('╚═══════════════════════════════════════════════════════════════');
|
|
304
|
+
lines.push('');
|
|
305
|
+
return lines.join('\n');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Get icon for insight category.
|
|
309
|
+
*/
|
|
310
|
+
function getCategoryIcon(category) {
|
|
311
|
+
switch (category) {
|
|
312
|
+
case 'user-preference':
|
|
313
|
+
return '👤';
|
|
314
|
+
case 'technical-pattern':
|
|
315
|
+
return '🔧';
|
|
316
|
+
case 'project-context':
|
|
317
|
+
return '📁';
|
|
318
|
+
case 'workflow-optimization':
|
|
319
|
+
return '⚡';
|
|
320
|
+
default:
|
|
321
|
+
return '💡';
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=dream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.js","sourceRoot":"","sources":["../src/dream.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* post-commit — after git commit
|
|
12
12
|
* session-end — when REPL exits
|
|
13
13
|
*/
|
|
14
|
-
export type HookEvent = 'pre-edit' | 'post-edit' | 'pre-shell' | 'post-shell' | 'pre-commit' | 'post-commit' | 'session-end';
|
|
14
|
+
export type HookEvent = 'pre-edit' | 'post-edit' | 'pre-shell' | 'post-shell' | 'pre-commit' | 'post-commit' | 'pre-tool-use' | 'post-tool-use' | 'session-end';
|
|
15
15
|
interface HookConfig {
|
|
16
16
|
[event: string]: string[];
|
|
17
17
|
}
|
package/dist/hooks.js
CHANGED
|
@@ -40,7 +40,7 @@ export function loadHooks() {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
catch { /* skip malformed */ }
|
|
43
|
+
catch (_) { /* intentionally ignored: skip malformed hook config */ }
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
cachedHooks = merged;
|
|
@@ -66,7 +66,8 @@ export function runHooks(event, context) {
|
|
|
66
66
|
cwd: process.cwd(),
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
|
-
catch {
|
|
69
|
+
catch (_) {
|
|
70
|
+
/* intentionally ignored: hook script execution failure */
|
|
70
71
|
allOk = false;
|
|
71
72
|
}
|
|
72
73
|
}
|
|
@@ -89,6 +90,8 @@ export function initHooksTemplate() {
|
|
|
89
90
|
'post-shell': [],
|
|
90
91
|
'pre-commit': [],
|
|
91
92
|
'post-commit': [],
|
|
93
|
+
'pre-tool-use': [],
|
|
94
|
+
'post-tool-use': [],
|
|
92
95
|
'session-end': [],
|
|
93
96
|
'_examples': {
|
|
94
97
|
'pre-edit': ['echo "Editing: $BOBO_FILE"'],
|
|
@@ -96,6 +99,8 @@ export function initHooksTemplate() {
|
|
|
96
99
|
'pre-shell': ['echo "Running: $BOBO_COMMAND"'],
|
|
97
100
|
'pre-commit': ['npm run lint'],
|
|
98
101
|
'post-commit': ['echo "Committed: $BOBO_COMMIT_MSG"'],
|
|
102
|
+
'pre-tool-use': ['echo "Tool: $BOBO_TOOL_NAME (risk: $BOBO_TOOL_RISK)"'],
|
|
103
|
+
'post-tool-use': ['echo "Tool completed: $BOBO_TOOL_NAME"'],
|
|
99
104
|
},
|
|
100
105
|
}, null, 2);
|
|
101
106
|
}
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,IAAI,WAAW,GAAsB,IAAI,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,OAAO,GAAG;QACd,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBACtD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAI,IAAiB,CAAC,CAAC;oBACpE,CAAC;yBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAC,uDAAuD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,WAAW,GAAG,MAAM,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAgB,EAChB,OAAgC;IAEhC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAEnE,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE;gBACZ,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM;gBACb,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,0DAA0D;YAC1D,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,4BAA4B,CAAC;YAC1C,WAAW,EAAE,CAAC,6BAA6B,CAAC;YAC5C,WAAW,EAAE,CAAC,+BAA+B,CAAC;YAC9C,YAAY,EAAE,CAAC,cAAc,CAAC;YAC9B,aAAa,EAAE,CAAC,oCAAoC,CAAC;YACrD,cAAc,EAAE,CAAC,sDAAsD,CAAC;YACxE,eAAe,EAAE,CAAC,wCAAwC,CAAC;SAC5D;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,CAAC"}
|