bobo-ai-cli 3.0.4 ā 3.0.5
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/LICENSE +21 -21
- package/README.md +259 -259
- package/bundled-skills/CORE_SKILLS.txt +18 -18
- package/bundled-skills/backend-expert/SKILL.md +97 -97
- package/bundled-skills/code-review/SKILL.md +280 -280
- package/bundled-skills/code-review-expert/SKILL.md +85 -85
- package/bundled-skills/context-budget-analyzer/SKILL.md +76 -76
- package/bundled-skills/context-compressor/SKILL.md +75 -75
- package/bundled-skills/context-optimization-suite/SKILL.md +162 -162
- package/bundled-skills/frontend-expert/SKILL.md +93 -93
- package/bundled-skills/github/SKILL.md +12 -12
- package/bundled-skills/high-agency/SKILL.md +473 -473
- package/bundled-skills/high-agency/references/builder-patterns.md +126 -126
- package/bundled-skills/high-agency/references/recovery-playbook.md +298 -298
- package/bundled-skills/memory-manager/SKILL.md +214 -214
- package/bundled-skills/memory-manager/references/advanced-config.md +65 -65
- package/bundled-skills/orchestrator/SKILL.md +681 -681
- package/bundled-skills/planning-with-files/SKILL.md +193 -193
- package/bundled-skills/skill-creator/SKILL.md +220 -220
- package/bundled-skills/testing-expert/SKILL.md +99 -99
- package/bundled-skills/verify/SKILL.md +15 -15
- package/dist/agent.d.ts +5 -0
- package/dist/agent.js +11 -1
- package/dist/agent.js.map +1 -1
- package/dist/agents/catalog.d.ts +47 -0
- package/dist/agents/catalog.js +63 -5
- package/dist/agents/catalog.js.map +1 -1
- package/dist/agents/router.d.ts +12 -1
- package/dist/agents/router.js +43 -3
- package/dist/agents/router.js.map +1 -1
- package/dist/agents/spawn.js +36 -18
- package/dist/agents/spawn.js.map +1 -1
- package/dist/autonomous.js +5 -5
- package/dist/cli.js +23 -21
- package/dist/cli.js.map +1 -1
- package/dist/compactor.js +39 -39
- package/dist/dream.js +29 -29
- package/dist/image-input.d.ts +44 -0
- package/dist/image-input.js +161 -0
- package/dist/image-input.js.map +1 -0
- package/dist/memory.js +13 -13
- package/dist/project.js +15 -15
- package/dist/repl.js +88 -0
- package/dist/repl.js.map +1 -1
- package/dist/skills.js +54 -54
- package/dist/sub-agents.js +65 -65
- package/dist/tools/browser.js +21 -21
- package/dist/tools/claude-code.js +10 -10
- package/dist/web.js +7 -7
- package/dist/wiki-commands.d.ts +2 -0
- package/dist/wiki-commands.js +249 -0
- package/dist/wiki-commands.js.map +1 -0
- package/dist/wiki.d.ts +90 -0
- package/dist/wiki.js +614 -0
- package/dist/wiki.js.map +1 -0
- package/knowledge/advanced-patterns.md +70 -70
- package/knowledge/agent-directives.md +74 -74
- package/knowledge/api-integration-patterns.md +102 -0
- package/knowledge/code-review-protocol.md +69 -0
- package/knowledge/dream.md +36 -36
- package/knowledge/engineering.md +52 -46
- package/knowledge/error-catalog.md +38 -33
- package/knowledge/event-driven-architecture.md +43 -0
- package/knowledge/external-alignment.md +47 -0
- package/knowledge/high-agency.md +73 -0
- package/knowledge/image-generation.md +48 -0
- package/knowledge/index.json +194 -169
- package/knowledge/llm-wiki-pattern.md +71 -0
- package/knowledge/long-task-management.md +79 -0
- package/knowledge/memory/cache-optimization-and-skill-integration.md +102 -102
- package/knowledge/memory/engineering-patterns.md +134 -134
- package/knowledge/memory/feedback_root_structure.md +15 -15
- package/knowledge/memory/project-contexts.md +69 -69
- package/knowledge/memory/tools-and-services.md +85 -85
- package/knowledge/memory-management.md +72 -0
- package/knowledge/rules/advisor-strategy.md +204 -0
- package/knowledge/rules/agents.md +62 -62
- package/knowledge/rules/blocking-rules.md +323 -323
- package/knowledge/rules/cache-management.md +379 -379
- package/knowledge/rules/capability-evolution.md +132 -132
- package/knowledge/rules/coding.md +126 -126
- package/knowledge/rules/engineering-workflows.md +225 -225
- package/knowledge/rules/evomap-content-guidelines.md +354 -354
- package/knowledge/rules/evomap-guide.md +224 -224
- package/knowledge/rules/external-alignment.md +22 -0
- package/knowledge/rules/git.md +31 -31
- package/knowledge/rules/hooks.md +106 -106
- package/knowledge/rules/performance.md +101 -101
- package/knowledge/rules/remotion-auto-production.md +1120 -1120
- package/knowledge/rules/security.md +46 -46
- package/knowledge/rules/testing.md +32 -32
- package/knowledge/rules/work-mode.md +208 -208
- package/knowledge/rules.md +62 -62
- package/knowledge/self-evolution.md +78 -0
- package/knowledge/self-rationalization-guard.md +52 -0
- package/knowledge/skills/Skill_Seekers.md +1722 -1722
- package/knowledge/skills/ab-test-setup.md +557 -557
- package/knowledge/skills/agent-sdk-dev.md +238 -238
- package/knowledge/skills/agent-tools.md +136 -136
- package/knowledge/skills/analytics-tracking.md +597 -597
- package/knowledge/skills/artifacts-builder.md +89 -89
- package/knowledge/skills/asana.md +12 -12
- package/knowledge/skills/backend-expert.md +97 -97
- package/knowledge/skills/brand-voice.md +481 -481
- package/knowledge/skills/browser-use.md +419 -419
- package/knowledge/skills/cache-optimization-skill.md +179 -179
- package/knowledge/skills/canvas-design.md +147 -147
- package/knowledge/skills/citation-validator.md +203 -203
- package/knowledge/skills/clangd-lsp.md +52 -52
- package/knowledge/skills/code-review-expert.md +85 -85
- package/knowledge/skills/code-review.md +280 -280
- package/knowledge/skills/code-simplifier.md +12 -12
- package/knowledge/skills/commit-commands.md +258 -258
- package/knowledge/skills/competitor-alternatives.md +795 -795
- package/knowledge/skills/content-atomizer.md +910 -910
- package/knowledge/skills/content-research-writer.md +605 -605
- package/knowledge/skills/context-optimization-suite.md +162 -162
- package/knowledge/skills/context7.md +12 -12
- package/knowledge/skills/copy-editing.md +494 -494
- package/knowledge/skills/copywriting.md +510 -510
- package/knowledge/skills/csharp-lsp.md +40 -40
- package/knowledge/skills/decision-making-framework.md +154 -154
- package/knowledge/skills/developer-growth-analysis.md +335 -335
- package/knowledge/skills/direct-response-copy.md +2336 -2336
- package/knowledge/skills/docker-expert.md +229 -229
- package/knowledge/skills/document-skills.md +12 -12
- package/knowledge/skills/documentation-expert.md +126 -126
- package/knowledge/skills/email-sequence.md +1061 -1061
- package/knowledge/skills/email-sequences.md +910 -910
- package/knowledge/skills/example-plugin.md +72 -72
- package/knowledge/skills/explanatory-output-style.md +82 -82
- package/knowledge/skills/feature-dev.md +458 -458
- package/knowledge/skills/file-organizer.md +466 -466
- package/knowledge/skills/firebase.disabled.md +12 -12
- package/knowledge/skills/form-cro.md +488 -488
- package/knowledge/skills/free-tool-strategy.md +636 -636
- package/knowledge/skills/frontend-design-offical.md +55 -55
- package/knowledge/skills/frontend-design.md +41 -41
- package/knowledge/skills/frontend-expert.md +93 -93
- package/knowledge/skills/github.md +12 -12
- package/knowledge/skills/gitlab.md +12 -12
- package/knowledge/skills/gopls-lsp.md +32 -32
- package/knowledge/skills/got-controller.md +218 -218
- package/knowledge/skills/greptile.md +72 -72
- package/knowledge/skills/hookify.md +376 -376
- package/knowledge/skills/image-editor.md +189 -189
- package/knowledge/skills/image-enhancer.md +109 -109
- package/knowledge/skills/jdtls-lsp.md +49 -49
- package/knowledge/skills/json-canvas.md +654 -654
- package/knowledge/skills/keyword-research.md +559 -559
- package/knowledge/skills/kotlin-lsp.md +28 -28
- package/knowledge/skills/laravel-boost.md +12 -12
- package/knowledge/skills/launch-strategy.md +394 -394
- package/knowledge/skills/lead-magnet.md +393 -393
- package/knowledge/skills/learning-output-style.md +106 -106
- package/knowledge/skills/linear.md +12 -12
- package/knowledge/skills/lua-lsp.md +47 -47
- package/knowledge/skills/marketing-ideas.md +720 -720
- package/knowledge/skills/marketing-psychology.md +534 -534
- package/knowledge/skills/mcp-builder.md +369 -369
- package/knowledge/skills/meeting-insights-analyzer.md +347 -347
- package/knowledge/skills/memory-evolution-system.md +172 -172
- package/knowledge/skills/multi-lens-thinking.md +407 -407
- package/knowledge/skills/nano-banana-pro.md +116 -116
- package/knowledge/skills/newsletter.md +736 -736
- package/knowledge/skills/notebooklm.md +296 -296
- package/knowledge/skills/obsidian-bases.md +634 -634
- package/knowledge/skills/obsidian-markdown.md +651 -651
- package/knowledge/skills/onboarding-cro.md +494 -494
- package/knowledge/skills/orchestrator.md +681 -681
- package/knowledge/skills/page-cro.md +379 -379
- package/knowledge/skills/paid-ads.md +624 -624
- package/knowledge/skills/paywall-upgrade-cro.md +651 -651
- package/knowledge/skills/php-lsp.md +36 -36
- package/knowledge/skills/planning-with-files.md +193 -193
- package/knowledge/skills/playwright.md +12 -12
- package/knowledge/skills/plugin-dev.md +434 -434
- package/knowledge/skills/popup-cro.md +520 -520
- package/knowledge/skills/positioning-angles.md +330 -330
- package/knowledge/skills/pr-review-toolkit.md +359 -359
- package/knowledge/skills/pricing-strategy.md +777 -777
- package/knowledge/skills/programmatic-seo.md +714 -714
- package/knowledge/skills/pyright-lsp.md +43 -43
- package/knowledge/skills/quality-assurance-framework.md +168 -168
- package/knowledge/skills/question-refiner.md +160 -160
- package/knowledge/skills/ralph-loop.md +205 -205
- package/knowledge/skills/refactoring-expert.md +103 -103
- package/knowledge/skills/referral-program.md +668 -668
- package/knowledge/skills/research-executor.md +164 -164
- package/knowledge/skills/review-with-security.md +12 -12
- package/knowledge/skills/rust-analyzer-lsp.md +50 -50
- package/knowledge/skills/schema-markup.md +647 -647
- package/knowledge/skills/security-audit-expert.md +124 -124
- package/knowledge/skills/security-expert.md +140 -140
- package/knowledge/skills/security-guidance.md +12 -12
- package/knowledge/skills/seedance-prompt.md +139 -139
- package/knowledge/skills/self-evolution.md +1160 -1160
- package/knowledge/skills/seo-audit.md +432 -432
- package/knowledge/skills/seo-content.md +787 -787
- package/knowledge/skills/serena.md +12 -12
- package/knowledge/skills/signup-flow-cro.md +409 -409
- package/knowledge/skills/skill-creator.md +220 -220
- package/knowledge/skills/skill-manager.md +226 -226
- package/knowledge/skills/skill-share.md +98 -98
- package/knowledge/skills/slack.md +12 -12
- package/knowledge/skills/social-content.md +878 -878
- package/knowledge/skills/spec-flow-skill.md +124 -124
- package/knowledge/skills/stripe.md +12 -12
- package/knowledge/skills/supabase.md +12 -12
- package/knowledge/skills/swift-lsp.md +40 -40
- package/knowledge/skills/synthesizer.md +236 -236
- package/knowledge/skills/template-skill.md +16 -16
- package/knowledge/skills/testing-expert.md +99 -99
- package/knowledge/skills/theme-factory.md +72 -72
- package/knowledge/skills/tiktok-research.md +208 -208
- package/knowledge/skills/typescript-lsp.md +36 -36
- package/knowledge/skills/ui-ux-pro-max.md +247 -247
- package/knowledge/skills/verify.md +15 -15
- package/knowledge/skills/visual-prompt-engineer.md +102 -102
- package/knowledge/skills/webapp-testing.md +111 -111
- package/knowledge/skills/wide-research.md +191 -191
- package/knowledge/system.md +93 -93
- package/knowledge/task-router.md +46 -37
- package/knowledge/verification.md +38 -38
- package/knowledge/worker-prompt-craft.md +66 -0
- package/knowledge/workflows/3d-viz.md +47 -47
- package/knowledge/workflows/data-pipeline.md +47 -47
- package/knowledge/workflows/db-migration.md +51 -51
- package/knowledge/workflows/feature-dev.md +41 -41
- package/knowledge/workflows/tdd-flow.md +52 -52
- package/knowledge/workflows/ui-verify.md +51 -51
- package/package.json +74 -74
- package/dist/claude-bridge.d.ts +0 -18
- package/dist/claude-bridge.js +0 -91
- package/dist/claude-bridge.js.map +0 -1
- package/dist/tools/claude-bridge-tool.d.ts +0 -4
- package/dist/tools/claude-bridge-tool.js +0 -44
- package/dist/tools/claude-bridge-tool.js.map +0 -1
package/dist/web.js
CHANGED
|
@@ -49,10 +49,10 @@ function webSearch(args) {
|
|
|
49
49
|
// Use curl + DuckDuckGo lite HTML (no API key needed)
|
|
50
50
|
try {
|
|
51
51
|
const encoded = encodeURIComponent(query);
|
|
52
|
-
const result = execSync(`curl -sL "https://lite.duckduckgo.com/lite/?q=${encoded}" \
|
|
53
|
-
-H "User-Agent: Mozilla/5.0" \
|
|
54
|
-
--max-time 10 2>/dev/null | \
|
|
55
|
-
sed -n 's/.*<a rel="nofollow" href="\\([^"]*\\)" class=.result-link.>\\(.*\\)<\\/a>.*/\\2 | \\1/p' | \
|
|
52
|
+
const result = execSync(`curl -sL "https://lite.duckduckgo.com/lite/?q=${encoded}" \
|
|
53
|
+
-H "User-Agent: Mozilla/5.0" \
|
|
54
|
+
--max-time 10 2>/dev/null | \
|
|
55
|
+
sed -n 's/.*<a rel="nofollow" href="\\([^"]*\\)" class=.result-link.>\\(.*\\)<\\/a>.*/\\2 | \\1/p' | \
|
|
56
56
|
head -${count}`, { encoding: 'utf-8', timeout: 15000 }).trim();
|
|
57
57
|
if (!result) {
|
|
58
58
|
// Fallback: try ddgr if available
|
|
@@ -80,9 +80,9 @@ function webFetch(args) {
|
|
|
80
80
|
}
|
|
81
81
|
try {
|
|
82
82
|
// Fetch and extract text, strip HTML tags
|
|
83
|
-
const raw = execSync(`curl -sL "${url}" \
|
|
84
|
-
-H "User-Agent: Mozilla/5.0 (compatible; BoboCLI/1.0)" \
|
|
85
|
-
--max-time 15 \
|
|
83
|
+
const raw = execSync(`curl -sL "${url}" \
|
|
84
|
+
-H "User-Agent: Mozilla/5.0 (compatible; BoboCLI/1.0)" \
|
|
85
|
+
--max-time 15 \
|
|
86
86
|
--max-filesize 1048576 2>/dev/null`, { encoding: 'utf-8', timeout: 20000, maxBuffer: 2 * 1024 * 1024 });
|
|
87
87
|
// Strip HTML to plain text
|
|
88
88
|
let text = raw
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { initWiki, ingestSource, queryWiki, lintWiki, rebuildIndex, searchWiki, getWikiStats, getRecentLogs, } from './wiki.js';
|
|
5
|
+
import { printSuccess, printError, printLine, printWarning } from './ui.js';
|
|
6
|
+
export function registerWikiCommand(program) {
|
|
7
|
+
const wiki = program
|
|
8
|
+
.command('wiki')
|
|
9
|
+
.description('LLM-maintained knowledge wiki (Karpathy pattern)');
|
|
10
|
+
wiki
|
|
11
|
+
.command('init')
|
|
12
|
+
.description('Initialize .bobo/wiki/ directory structure')
|
|
13
|
+
.action(() => {
|
|
14
|
+
try {
|
|
15
|
+
const wikiDir = initWiki(process.cwd());
|
|
16
|
+
printSuccess('Wiki initialized!');
|
|
17
|
+
printLine(chalk.dim(` Location: ${wikiDir}`));
|
|
18
|
+
printLine(chalk.dim(' Files: index.md, log.md, schema.md'));
|
|
19
|
+
printLine(chalk.dim(' Directories: sources/, pages/'));
|
|
20
|
+
printLine(chalk.dim('\n Next: bobo wiki ingest <file-or-url>'));
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
printError(e.message);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
wiki
|
|
28
|
+
.command('ingest <source>')
|
|
29
|
+
.description('Ingest a file or URL into the wiki')
|
|
30
|
+
.option('-v, --verbose', 'Verbose output')
|
|
31
|
+
.action(async (source, opts) => {
|
|
32
|
+
try {
|
|
33
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
34
|
+
if (!existsSync(wikiDir)) {
|
|
35
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
printLine(chalk.cyan.bold('\nš Ingesting source...\n'));
|
|
39
|
+
if (opts.verbose) {
|
|
40
|
+
printLine(chalk.dim(`Source: ${source}`));
|
|
41
|
+
}
|
|
42
|
+
const result = await ingestSource(source, { wikiDir, verbose: opts.verbose });
|
|
43
|
+
printSuccess('Ingestion complete!');
|
|
44
|
+
printLine(chalk.dim(` Source page: ${result.sourcePage}`));
|
|
45
|
+
if (result.pagesCreated.length > 0) {
|
|
46
|
+
printLine(chalk.green(` Created: ${result.pagesCreated.length} pages`));
|
|
47
|
+
if (opts.verbose) {
|
|
48
|
+
result.pagesCreated.forEach(p => printLine(chalk.dim(` ⢠${p}`)));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (result.pagesUpdated.length > 0) {
|
|
52
|
+
printLine(chalk.yellow(` Updated: ${result.pagesUpdated.length} pages`));
|
|
53
|
+
if (opts.verbose) {
|
|
54
|
+
result.pagesUpdated.forEach(p => printLine(chalk.dim(` ⢠${p}`)));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
printError(e.message);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
wiki
|
|
64
|
+
.command('query <question>')
|
|
65
|
+
.description('Query the wiki with LLM synthesis')
|
|
66
|
+
.option('-v, --verbose', 'Verbose output')
|
|
67
|
+
.action(async (question, opts) => {
|
|
68
|
+
try {
|
|
69
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
70
|
+
if (!existsSync(wikiDir)) {
|
|
71
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
printLine(chalk.cyan.bold('\nš Querying wiki...\n'));
|
|
75
|
+
const result = await queryWiki(question, { wikiDir, verbose: opts.verbose });
|
|
76
|
+
printLine(chalk.bold('Answer:'));
|
|
77
|
+
printLine(result.answer);
|
|
78
|
+
if (result.sources.length > 0) {
|
|
79
|
+
printLine(chalk.dim('\nSources:'));
|
|
80
|
+
result.sources.forEach(s => printLine(chalk.dim(` ⢠[[${s}]]`)));
|
|
81
|
+
}
|
|
82
|
+
if (result.suggestedPageTitle) {
|
|
83
|
+
printLine(chalk.yellow(`\nš” Tip: Save this as: ${result.suggestedPageTitle}`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
printError(e.message);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
wiki
|
|
92
|
+
.command('lint')
|
|
93
|
+
.description('Health-check the wiki')
|
|
94
|
+
.action(async () => {
|
|
95
|
+
try {
|
|
96
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
97
|
+
if (!existsSync(wikiDir)) {
|
|
98
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
printLine(chalk.cyan.bold('\nš§ Linting wiki...\n'));
|
|
102
|
+
const result = await lintWiki(wikiDir);
|
|
103
|
+
if (result.issues.length === 0) {
|
|
104
|
+
printSuccess('Wiki health check passed! No issues found.');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
printWarning(`Found ${result.issues.length} issues:`);
|
|
108
|
+
printLine();
|
|
109
|
+
const issuesByType = new Map();
|
|
110
|
+
for (const issue of result.issues) {
|
|
111
|
+
if (!issuesByType.has(issue.type)) {
|
|
112
|
+
issuesByType.set(issue.type, []);
|
|
113
|
+
}
|
|
114
|
+
issuesByType.get(issue.type).push(`${issue.page}: ${issue.description}`);
|
|
115
|
+
}
|
|
116
|
+
for (const [type, issues] of issuesByType.entries()) {
|
|
117
|
+
printLine(chalk.bold(` ${type.toUpperCase()}:`));
|
|
118
|
+
issues.forEach(i => printLine(chalk.dim(` ⢠${i}`)));
|
|
119
|
+
printLine();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (result.orphanPages.length > 0) {
|
|
123
|
+
printLine(chalk.yellow(`Orphan pages: ${result.orphanPages.length}`));
|
|
124
|
+
}
|
|
125
|
+
if (result.missingLinks.length > 0) {
|
|
126
|
+
printLine(chalk.yellow(`Broken links: ${result.missingLinks.length}`));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
printError(e.message);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
wiki
|
|
135
|
+
.command('index')
|
|
136
|
+
.description('Rebuild index.md from all pages')
|
|
137
|
+
.action(async () => {
|
|
138
|
+
try {
|
|
139
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
140
|
+
if (!existsSync(wikiDir)) {
|
|
141
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
await rebuildIndex(wikiDir);
|
|
145
|
+
printSuccess('Index rebuilt!');
|
|
146
|
+
printLine(chalk.dim(` Location: ${join(wikiDir, 'index.md')}`));
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
printError(e.message);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
wiki
|
|
154
|
+
.command('stats')
|
|
155
|
+
.description('Show wiki statistics')
|
|
156
|
+
.action(() => {
|
|
157
|
+
try {
|
|
158
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
159
|
+
if (!existsSync(wikiDir)) {
|
|
160
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const stats = getWikiStats(wikiDir);
|
|
164
|
+
printLine(chalk.cyan.bold('\nš Wiki Statistics\n'));
|
|
165
|
+
printLine(` Total pages: ${chalk.bold(String(stats.totalPages))}`);
|
|
166
|
+
printLine(` Total sources: ${chalk.bold(String(stats.totalSources))}`);
|
|
167
|
+
printLine(` Last updated: ${chalk.dim(stats.lastUpdated)}`);
|
|
168
|
+
printLine();
|
|
169
|
+
if (Object.keys(stats.byType).length > 0) {
|
|
170
|
+
printLine(chalk.bold(' Pages by type:'));
|
|
171
|
+
for (const [type, count] of Object.entries(stats.byType)) {
|
|
172
|
+
const icon = getTypeIcon(type);
|
|
173
|
+
printLine(` ${icon} ${type.padEnd(12)} ${chalk.cyan(String(count))}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
printLine();
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
printError(e.message);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
wiki
|
|
184
|
+
.command('search <keyword>')
|
|
185
|
+
.description('Search wiki pages by keyword')
|
|
186
|
+
.action((keyword) => {
|
|
187
|
+
try {
|
|
188
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
189
|
+
if (!existsSync(wikiDir)) {
|
|
190
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
const results = searchWiki(keyword, wikiDir);
|
|
194
|
+
if (results.length === 0) {
|
|
195
|
+
printLine(chalk.dim(`No results found for: "${keyword}"`));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
printLine(chalk.cyan.bold(`\nš Search results for "${keyword}":\n`));
|
|
199
|
+
for (const result of results) {
|
|
200
|
+
printLine(chalk.bold(` ${result.page}`));
|
|
201
|
+
result.matches.forEach(match => {
|
|
202
|
+
const highlighted = match.replace(new RegExp(keyword, 'gi'), (m) => chalk.yellow(m));
|
|
203
|
+
printLine(chalk.dim(` ${highlighted}`));
|
|
204
|
+
});
|
|
205
|
+
printLine();
|
|
206
|
+
}
|
|
207
|
+
printLine(chalk.dim(`Found ${results.length} pages`));
|
|
208
|
+
}
|
|
209
|
+
catch (e) {
|
|
210
|
+
printError(e.message);
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
wiki
|
|
215
|
+
.command('log [n]')
|
|
216
|
+
.description('Show recent N log entries (default: 10)')
|
|
217
|
+
.action((n) => {
|
|
218
|
+
try {
|
|
219
|
+
const wikiDir = join(process.cwd(), '.bobo', 'wiki');
|
|
220
|
+
if (!existsSync(wikiDir)) {
|
|
221
|
+
printError('Wiki not initialized. Run: bobo wiki init');
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
const count = n ? parseInt(n, 10) : 10;
|
|
225
|
+
const logs = getRecentLogs(wikiDir, count);
|
|
226
|
+
if (logs.length === 0) {
|
|
227
|
+
printLine(chalk.dim('No log entries yet.'));
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
printLine(chalk.cyan.bold('\nš Wiki Log\n'));
|
|
231
|
+
logs.forEach(entry => printLine(entry + '\n'));
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
printError(e.message);
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function getTypeIcon(type) {
|
|
240
|
+
switch (type) {
|
|
241
|
+
case 'entity': return 'š¤';
|
|
242
|
+
case 'concept': return 'š”';
|
|
243
|
+
case 'source': return 'š';
|
|
244
|
+
case 'comparison': return 'āļø';
|
|
245
|
+
case 'analysis': return 'š¬';
|
|
246
|
+
default: return 'š';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=wiki-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-commands.js","sourceRoot":"","sources":["../src/wiki-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/wiki.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM-Wiki Mode ā Karpathy pattern implementation
|
|
3
|
+
*
|
|
4
|
+
* A self-maintaining knowledge wiki powered by LLM that:
|
|
5
|
+
* - Ingests documents (files/URLs) and distills them into structured wiki pages
|
|
6
|
+
* - Creates entity/concept/source pages with cross-references
|
|
7
|
+
* - Answers questions by synthesizing information from wiki pages
|
|
8
|
+
* - Maintains health through linting and contradiction detection
|
|
9
|
+
*/
|
|
10
|
+
export interface WikiConfig {
|
|
11
|
+
wikiDir: string;
|
|
12
|
+
}
|
|
13
|
+
export interface WikiPage {
|
|
14
|
+
type: 'entity' | 'concept' | 'source' | 'comparison' | 'analysis';
|
|
15
|
+
tags: string[];
|
|
16
|
+
sources: string[];
|
|
17
|
+
created: string;
|
|
18
|
+
updated: string;
|
|
19
|
+
title: string;
|
|
20
|
+
content: string;
|
|
21
|
+
seeAlso: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface WikiStats {
|
|
24
|
+
totalPages: number;
|
|
25
|
+
byType: Record<string, number>;
|
|
26
|
+
totalSources: number;
|
|
27
|
+
lastUpdated: string;
|
|
28
|
+
}
|
|
29
|
+
export interface IngestResult {
|
|
30
|
+
sourcePage: string;
|
|
31
|
+
pagesCreated: string[];
|
|
32
|
+
pagesUpdated: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface QueryResult {
|
|
35
|
+
answer: string;
|
|
36
|
+
sources: string[];
|
|
37
|
+
suggestedPageTitle?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface LintResult {
|
|
40
|
+
issues: LintIssue[];
|
|
41
|
+
orphanPages: string[];
|
|
42
|
+
missingLinks: string[];
|
|
43
|
+
contradictions: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface LintIssue {
|
|
46
|
+
page: string;
|
|
47
|
+
type: 'orphan' | 'missing-link' | 'outdated' | 'contradiction';
|
|
48
|
+
description: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Initialize .bobo/wiki/ directory structure.
|
|
52
|
+
*/
|
|
53
|
+
export declare function initWiki(projectRoot: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Ingest a source (file or URL) into the wiki.
|
|
56
|
+
*/
|
|
57
|
+
export declare function ingestSource(source: string, options: {
|
|
58
|
+
wikiDir: string;
|
|
59
|
+
verbose?: boolean;
|
|
60
|
+
}): Promise<IngestResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Query the wiki with LLM synthesis.
|
|
63
|
+
*/
|
|
64
|
+
export declare function queryWiki(question: string, options: {
|
|
65
|
+
wikiDir: string;
|
|
66
|
+
verbose?: boolean;
|
|
67
|
+
}): Promise<QueryResult>;
|
|
68
|
+
/**
|
|
69
|
+
* Run health checks on the wiki.
|
|
70
|
+
*/
|
|
71
|
+
export declare function lintWiki(wikiDir: string): Promise<LintResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Rebuild index.md from all pages.
|
|
74
|
+
*/
|
|
75
|
+
export declare function rebuildIndex(wikiDir: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Search wiki pages by keyword.
|
|
78
|
+
*/
|
|
79
|
+
export declare function searchWiki(keyword: string, wikiDir: string): Array<{
|
|
80
|
+
page: string;
|
|
81
|
+
matches: string[];
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Get wiki statistics.
|
|
85
|
+
*/
|
|
86
|
+
export declare function getWikiStats(wikiDir: string): WikiStats;
|
|
87
|
+
/**
|
|
88
|
+
* Get recent log entries.
|
|
89
|
+
*/
|
|
90
|
+
export declare function getRecentLogs(wikiDir: string, count?: number): string[];
|