bobo-ai-cli 3.0.3 → 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.
Files changed (238) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +259 -259
  3. package/bundled-skills/CORE_SKILLS.txt +18 -18
  4. package/bundled-skills/backend-expert/SKILL.md +97 -97
  5. package/bundled-skills/code-review/SKILL.md +280 -280
  6. package/bundled-skills/code-review-expert/SKILL.md +85 -85
  7. package/bundled-skills/context-budget-analyzer/SKILL.md +76 -76
  8. package/bundled-skills/context-compressor/SKILL.md +75 -75
  9. package/bundled-skills/context-optimization-suite/SKILL.md +162 -162
  10. package/bundled-skills/frontend-expert/SKILL.md +93 -93
  11. package/bundled-skills/github/SKILL.md +12 -12
  12. package/bundled-skills/high-agency/SKILL.md +473 -473
  13. package/bundled-skills/high-agency/references/builder-patterns.md +126 -126
  14. package/bundled-skills/high-agency/references/recovery-playbook.md +298 -298
  15. package/bundled-skills/memory-manager/SKILL.md +214 -214
  16. package/bundled-skills/memory-manager/references/advanced-config.md +65 -65
  17. package/bundled-skills/orchestrator/SKILL.md +681 -681
  18. package/bundled-skills/planning-with-files/SKILL.md +193 -193
  19. package/bundled-skills/skill-creator/SKILL.md +220 -220
  20. package/bundled-skills/testing-expert/SKILL.md +99 -99
  21. package/bundled-skills/verify/SKILL.md +15 -15
  22. package/dist/agent.d.ts +5 -0
  23. package/dist/agent.js +11 -1
  24. package/dist/agent.js.map +1 -1
  25. package/dist/agents/catalog.d.ts +47 -0
  26. package/dist/agents/catalog.js +63 -5
  27. package/dist/agents/catalog.js.map +1 -1
  28. package/dist/agents/router.d.ts +12 -1
  29. package/dist/agents/router.js +43 -3
  30. package/dist/agents/router.js.map +1 -1
  31. package/dist/agents/spawn.js +36 -18
  32. package/dist/agents/spawn.js.map +1 -1
  33. package/dist/autonomous.js +5 -5
  34. package/dist/cli.js +23 -21
  35. package/dist/cli.js.map +1 -1
  36. package/dist/compactor.js +39 -39
  37. package/dist/dream.js +29 -29
  38. package/dist/image-input.d.ts +44 -0
  39. package/dist/image-input.js +161 -0
  40. package/dist/image-input.js.map +1 -0
  41. package/dist/memory.js +13 -13
  42. package/dist/project.js +15 -15
  43. package/dist/repl.js +88 -0
  44. package/dist/repl.js.map +1 -1
  45. package/dist/skills.js +54 -54
  46. package/dist/sub-agents.js +65 -65
  47. package/dist/tools/browser.js +21 -21
  48. package/dist/tools/claude-code.js +10 -10
  49. package/dist/web.js +7 -7
  50. package/dist/wiki-commands.d.ts +2 -0
  51. package/dist/wiki-commands.js +249 -0
  52. package/dist/wiki-commands.js.map +1 -0
  53. package/dist/wiki.d.ts +90 -0
  54. package/dist/wiki.js +614 -0
  55. package/dist/wiki.js.map +1 -0
  56. package/knowledge/advanced-patterns.md +70 -70
  57. package/knowledge/agent-directives.md +74 -74
  58. package/knowledge/api-integration-patterns.md +102 -0
  59. package/knowledge/code-review-protocol.md +69 -0
  60. package/knowledge/dream.md +36 -36
  61. package/knowledge/engineering.md +52 -46
  62. package/knowledge/error-catalog.md +38 -33
  63. package/knowledge/event-driven-architecture.md +43 -0
  64. package/knowledge/external-alignment.md +47 -0
  65. package/knowledge/high-agency.md +73 -0
  66. package/knowledge/image-generation.md +48 -0
  67. package/knowledge/index.json +194 -169
  68. package/knowledge/llm-wiki-pattern.md +71 -0
  69. package/knowledge/long-task-management.md +79 -0
  70. package/knowledge/memory/cache-optimization-and-skill-integration.md +102 -102
  71. package/knowledge/memory/engineering-patterns.md +134 -134
  72. package/knowledge/memory/feedback_root_structure.md +15 -15
  73. package/knowledge/memory/project-contexts.md +69 -69
  74. package/knowledge/memory/tools-and-services.md +85 -85
  75. package/knowledge/memory-management.md +72 -0
  76. package/knowledge/rules/advisor-strategy.md +204 -0
  77. package/knowledge/rules/agents.md +62 -62
  78. package/knowledge/rules/blocking-rules.md +323 -323
  79. package/knowledge/rules/cache-management.md +379 -379
  80. package/knowledge/rules/capability-evolution.md +132 -132
  81. package/knowledge/rules/coding.md +126 -126
  82. package/knowledge/rules/engineering-workflows.md +225 -225
  83. package/knowledge/rules/evomap-content-guidelines.md +354 -354
  84. package/knowledge/rules/evomap-guide.md +224 -224
  85. package/knowledge/rules/external-alignment.md +22 -0
  86. package/knowledge/rules/git.md +31 -31
  87. package/knowledge/rules/hooks.md +106 -106
  88. package/knowledge/rules/performance.md +101 -101
  89. package/knowledge/rules/remotion-auto-production.md +1120 -1120
  90. package/knowledge/rules/security.md +46 -46
  91. package/knowledge/rules/testing.md +32 -32
  92. package/knowledge/rules/work-mode.md +208 -208
  93. package/knowledge/rules.md +62 -62
  94. package/knowledge/self-evolution.md +78 -0
  95. package/knowledge/self-rationalization-guard.md +52 -0
  96. package/knowledge/skills/Skill_Seekers.md +1722 -1722
  97. package/knowledge/skills/ab-test-setup.md +557 -557
  98. package/knowledge/skills/agent-sdk-dev.md +238 -238
  99. package/knowledge/skills/agent-tools.md +136 -136
  100. package/knowledge/skills/analytics-tracking.md +597 -597
  101. package/knowledge/skills/artifacts-builder.md +89 -89
  102. package/knowledge/skills/asana.md +12 -12
  103. package/knowledge/skills/backend-expert.md +97 -97
  104. package/knowledge/skills/brand-voice.md +481 -481
  105. package/knowledge/skills/browser-use.md +419 -419
  106. package/knowledge/skills/cache-optimization-skill.md +179 -179
  107. package/knowledge/skills/canvas-design.md +147 -147
  108. package/knowledge/skills/citation-validator.md +203 -203
  109. package/knowledge/skills/clangd-lsp.md +52 -52
  110. package/knowledge/skills/code-review-expert.md +85 -85
  111. package/knowledge/skills/code-review.md +280 -280
  112. package/knowledge/skills/code-simplifier.md +12 -12
  113. package/knowledge/skills/commit-commands.md +258 -258
  114. package/knowledge/skills/competitor-alternatives.md +795 -795
  115. package/knowledge/skills/content-atomizer.md +910 -910
  116. package/knowledge/skills/content-research-writer.md +605 -605
  117. package/knowledge/skills/context-optimization-suite.md +162 -162
  118. package/knowledge/skills/context7.md +12 -12
  119. package/knowledge/skills/copy-editing.md +494 -494
  120. package/knowledge/skills/copywriting.md +510 -510
  121. package/knowledge/skills/csharp-lsp.md +40 -40
  122. package/knowledge/skills/decision-making-framework.md +154 -154
  123. package/knowledge/skills/developer-growth-analysis.md +335 -335
  124. package/knowledge/skills/direct-response-copy.md +2336 -2336
  125. package/knowledge/skills/docker-expert.md +229 -229
  126. package/knowledge/skills/document-skills.md +12 -12
  127. package/knowledge/skills/documentation-expert.md +126 -126
  128. package/knowledge/skills/email-sequence.md +1061 -1061
  129. package/knowledge/skills/email-sequences.md +910 -910
  130. package/knowledge/skills/example-plugin.md +72 -72
  131. package/knowledge/skills/explanatory-output-style.md +82 -82
  132. package/knowledge/skills/feature-dev.md +458 -458
  133. package/knowledge/skills/file-organizer.md +466 -466
  134. package/knowledge/skills/firebase.disabled.md +12 -12
  135. package/knowledge/skills/form-cro.md +488 -488
  136. package/knowledge/skills/free-tool-strategy.md +636 -636
  137. package/knowledge/skills/frontend-design-offical.md +55 -55
  138. package/knowledge/skills/frontend-design.md +41 -41
  139. package/knowledge/skills/frontend-expert.md +93 -93
  140. package/knowledge/skills/github.md +12 -12
  141. package/knowledge/skills/gitlab.md +12 -12
  142. package/knowledge/skills/gopls-lsp.md +32 -32
  143. package/knowledge/skills/got-controller.md +218 -218
  144. package/knowledge/skills/greptile.md +72 -72
  145. package/knowledge/skills/hookify.md +376 -376
  146. package/knowledge/skills/image-editor.md +189 -189
  147. package/knowledge/skills/image-enhancer.md +109 -109
  148. package/knowledge/skills/jdtls-lsp.md +49 -49
  149. package/knowledge/skills/json-canvas.md +654 -654
  150. package/knowledge/skills/keyword-research.md +559 -559
  151. package/knowledge/skills/kotlin-lsp.md +28 -28
  152. package/knowledge/skills/laravel-boost.md +12 -12
  153. package/knowledge/skills/launch-strategy.md +394 -394
  154. package/knowledge/skills/lead-magnet.md +393 -393
  155. package/knowledge/skills/learning-output-style.md +106 -106
  156. package/knowledge/skills/linear.md +12 -12
  157. package/knowledge/skills/lua-lsp.md +47 -47
  158. package/knowledge/skills/marketing-ideas.md +720 -720
  159. package/knowledge/skills/marketing-psychology.md +534 -534
  160. package/knowledge/skills/mcp-builder.md +369 -369
  161. package/knowledge/skills/meeting-insights-analyzer.md +347 -347
  162. package/knowledge/skills/memory-evolution-system.md +172 -172
  163. package/knowledge/skills/multi-lens-thinking.md +407 -407
  164. package/knowledge/skills/nano-banana-pro.md +116 -116
  165. package/knowledge/skills/newsletter.md +736 -736
  166. package/knowledge/skills/notebooklm.md +296 -296
  167. package/knowledge/skills/obsidian-bases.md +634 -634
  168. package/knowledge/skills/obsidian-markdown.md +651 -651
  169. package/knowledge/skills/onboarding-cro.md +494 -494
  170. package/knowledge/skills/orchestrator.md +681 -681
  171. package/knowledge/skills/page-cro.md +379 -379
  172. package/knowledge/skills/paid-ads.md +624 -624
  173. package/knowledge/skills/paywall-upgrade-cro.md +651 -651
  174. package/knowledge/skills/php-lsp.md +36 -36
  175. package/knowledge/skills/planning-with-files.md +193 -193
  176. package/knowledge/skills/playwright.md +12 -12
  177. package/knowledge/skills/plugin-dev.md +434 -434
  178. package/knowledge/skills/popup-cro.md +520 -520
  179. package/knowledge/skills/positioning-angles.md +330 -330
  180. package/knowledge/skills/pr-review-toolkit.md +359 -359
  181. package/knowledge/skills/pricing-strategy.md +777 -777
  182. package/knowledge/skills/programmatic-seo.md +714 -714
  183. package/knowledge/skills/pyright-lsp.md +43 -43
  184. package/knowledge/skills/quality-assurance-framework.md +168 -168
  185. package/knowledge/skills/question-refiner.md +160 -160
  186. package/knowledge/skills/ralph-loop.md +205 -205
  187. package/knowledge/skills/refactoring-expert.md +103 -103
  188. package/knowledge/skills/referral-program.md +668 -668
  189. package/knowledge/skills/research-executor.md +164 -164
  190. package/knowledge/skills/review-with-security.md +12 -12
  191. package/knowledge/skills/rust-analyzer-lsp.md +50 -50
  192. package/knowledge/skills/schema-markup.md +647 -647
  193. package/knowledge/skills/security-audit-expert.md +124 -124
  194. package/knowledge/skills/security-expert.md +140 -140
  195. package/knowledge/skills/security-guidance.md +12 -12
  196. package/knowledge/skills/seedance-prompt.md +139 -139
  197. package/knowledge/skills/self-evolution.md +1160 -1160
  198. package/knowledge/skills/seo-audit.md +432 -432
  199. package/knowledge/skills/seo-content.md +787 -787
  200. package/knowledge/skills/serena.md +12 -12
  201. package/knowledge/skills/signup-flow-cro.md +409 -409
  202. package/knowledge/skills/skill-creator.md +220 -220
  203. package/knowledge/skills/skill-manager.md +226 -226
  204. package/knowledge/skills/skill-share.md +98 -98
  205. package/knowledge/skills/slack.md +12 -12
  206. package/knowledge/skills/social-content.md +878 -878
  207. package/knowledge/skills/spec-flow-skill.md +124 -124
  208. package/knowledge/skills/stripe.md +12 -12
  209. package/knowledge/skills/supabase.md +12 -12
  210. package/knowledge/skills/swift-lsp.md +40 -40
  211. package/knowledge/skills/synthesizer.md +236 -236
  212. package/knowledge/skills/template-skill.md +16 -16
  213. package/knowledge/skills/testing-expert.md +99 -99
  214. package/knowledge/skills/theme-factory.md +72 -72
  215. package/knowledge/skills/tiktok-research.md +208 -208
  216. package/knowledge/skills/typescript-lsp.md +36 -36
  217. package/knowledge/skills/ui-ux-pro-max.md +247 -247
  218. package/knowledge/skills/verify.md +15 -15
  219. package/knowledge/skills/visual-prompt-engineer.md +102 -102
  220. package/knowledge/skills/webapp-testing.md +111 -111
  221. package/knowledge/skills/wide-research.md +191 -191
  222. package/knowledge/system.md +93 -93
  223. package/knowledge/task-router.md +46 -37
  224. package/knowledge/verification.md +38 -38
  225. package/knowledge/worker-prompt-craft.md +66 -0
  226. package/knowledge/workflows/3d-viz.md +47 -47
  227. package/knowledge/workflows/data-pipeline.md +47 -47
  228. package/knowledge/workflows/db-migration.md +51 -51
  229. package/knowledge/workflows/feature-dev.md +41 -41
  230. package/knowledge/workflows/tdd-flow.md +52 -52
  231. package/knowledge/workflows/ui-verify.md +51 -51
  232. package/package.json +74 -74
  233. package/dist/claude-bridge.d.ts +0 -18
  234. package/dist/claude-bridge.js +0 -91
  235. package/dist/claude-bridge.js.map +0 -1
  236. package/dist/tools/claude-bridge-tool.d.ts +0 -4
  237. package/dist/tools/claude-bridge-tool.js +0 -44
  238. 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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerWikiCommand(program: Command): void;
@@ -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[];