@tyvm/knowhow 0.0.89 → 0.0.91
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/.depcheckrc +31 -0
- package/CONFIG.md +52 -0
- package/README.md +344 -29
- package/WORKER.md +169 -334
- package/autodoc/chat-guide.md +540 -0
- package/autodoc/cli-reference.md +765 -0
- package/autodoc/config-reference.md +541 -0
- package/autodoc/embeddings-guide.md +566 -0
- package/autodoc/generate-guide.md +477 -0
- package/autodoc/language-plugin-guide.md +443 -0
- package/autodoc/modules-guide.md +352 -0
- package/autodoc/plugins-guide.md +720 -0
- package/autodoc/quickstart-guide.md +129 -0
- package/autodoc/skills-guide.md +468 -0
- package/autodoc/worker-guide.md +526 -0
- package/bin/knowhow.js +1 -1
- package/package.json +4 -32
- package/src/agents/tools/executeScript/index.ts +5 -0
- package/src/agents/tools/googleSearch.ts +2 -2
- package/src/agents/tools/index.ts +0 -3
- package/src/agents/tools/list.ts +0 -147
- package/src/agents/tools/loadWebpage.ts +3 -113
- package/src/ai.ts +33 -2
- package/src/auth/browserLogin.ts +10 -13
- package/src/cli.ts +63 -3
- package/src/clients/gemini.ts +96 -25
- package/src/clients/http.ts +7 -11
- package/src/clients/pricing/google.ts +122 -26
- package/src/config.ts +28 -4
- package/src/conversion.ts +24 -54
- package/src/index.ts +30 -3
- package/src/login.ts +5 -6
- package/src/plugins/language.ts +0 -4
- package/src/plugins/plugins.ts +0 -14
- package/src/plugins/url.ts +31 -12
- package/src/processors/TokenCompressor.ts +2 -2
- package/src/processors/ToolResponseCache.ts +3 -3
- package/src/processors/tools/grepToolResponse.ts +9 -4
- package/src/processors/tools/jqToolResponse.ts +11 -6
- package/src/processors/tools/listStoredToolResponses.ts +1 -1
- package/src/processors/tools/tailToolResponse.ts +9 -4
- package/src/services/GitHub.ts +2 -2
- package/src/services/KnowhowClient.ts +34 -34
- package/src/{plugins/downloader/downloader.ts → services/MediaProcessorService.ts} +109 -267
- package/src/services/S3.ts +16 -16
- package/src/services/index.ts +4 -4
- package/src/services/modules/index.ts +10 -2
- package/src/services/modules/types.ts +5 -2
- package/src/services/script-execution/ScriptExecutor.ts +29 -10
- package/src/services/script-execution/ScriptPolicy.ts +6 -2
- package/src/types.ts +1 -0
- package/src/utils/http.ts +127 -0
- package/src/workers/auth/PasskeySetup.ts +7 -11
- package/tests/clients/AIClient.test.ts +24 -21
- package/tests/manual/file-edits/figma.test.ts +3 -70
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +2 -0
- package/tests/plugins/language/languagePlugin.test.ts +2 -0
- package/tests/processors/ToolResponseCache.test.ts +2 -2
- package/tests/test.spec.ts +0 -14
- package/tests/unit/modules/moduleLoading.test.ts +7 -4
- package/tests/unit/plugins/pluginLoading.test.ts +6 -6
- package/ts_build/package.json +4 -32
- package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astAppendNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.js +2 -88
- package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js +2 -72
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.js +2 -72
- package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +3 -2
- package/ts_build/src/agents/tools/executeScript/index.js +4 -1
- package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
- package/ts_build/src/agents/tools/googleSearch.js +2 -2
- package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
- package/ts_build/src/agents/tools/index.d.ts +0 -3
- package/ts_build/src/agents/tools/index.js +0 -3
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +0 -138
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/loadWebpage.js +1 -89
- package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
- package/ts_build/src/agents/tools/textSearch.d.ts +1 -1
- package/ts_build/src/ai.js +18 -1
- package/ts_build/src/ai.js.map +1 -1
- package/ts_build/src/auth/browserLogin.js +7 -7
- package/ts_build/src/auth/browserLogin.js.map +1 -1
- package/ts_build/src/cli.d.ts +1 -1
- package/ts_build/src/cli.js +47 -1
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +1 -73
- package/ts_build/src/clients/gemini.js +57 -19
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.js +5 -9
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/pricing/google.d.ts +17 -73
- package/ts_build/src/clients/pricing/google.js +47 -10
- package/ts_build/src/clients/pricing/google.js.map +1 -1
- package/ts_build/src/config.js +17 -2
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/conversion.d.ts +1 -4
- package/ts_build/src/conversion.js +12 -27
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/index.d.ts +4 -0
- package/ts_build/src/index.js +19 -3
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/login.js +5 -4
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.js +3 -3
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/language.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +0 -14
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/editor.d.ts +3 -32
- package/ts_build/src/plugins/tree-sitter/editor.js +6 -208
- package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/parser.d.ts +19 -54
- package/ts_build/src/plugins/tree-sitter/parser.js +19 -293
- package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +2 -15
- package/ts_build/src/plugins/tree-sitter/simple-paths.js +2 -324
- package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -1
- package/ts_build/src/plugins/url.js +27 -8
- package/ts_build/src/plugins/url.js.map +1 -1
- package/ts_build/src/processors/TokenCompressor.js +2 -2
- package/ts_build/src/processors/TokenCompressor.js.map +1 -1
- package/ts_build/src/processors/ToolResponseCache.js +3 -3
- package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
- package/ts_build/src/processors/tools/grepToolResponse.d.ts +3 -1
- package/ts_build/src/processors/tools/grepToolResponse.js +8 -2
- package/ts_build/src/processors/tools/grepToolResponse.js.map +1 -1
- package/ts_build/src/processors/tools/jqToolResponse.d.ts +3 -1
- package/ts_build/src/processors/tools/jqToolResponse.js +10 -4
- package/ts_build/src/processors/tools/jqToolResponse.js.map +1 -1
- package/ts_build/src/processors/tools/listStoredToolResponses.js +1 -1
- package/ts_build/src/processors/tools/listStoredToolResponses.js.map +1 -1
- package/ts_build/src/processors/tools/tailToolResponse.d.ts +3 -1
- package/ts_build/src/processors/tools/tailToolResponse.js +8 -2
- package/ts_build/src/processors/tools/tailToolResponse.js.map +1 -1
- package/ts_build/src/services/GitHub.js +2 -2
- package/ts_build/src/services/GitHub.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.d.ts +29 -29
- package/ts_build/src/services/KnowhowClient.js +33 -33
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/MediaProcessorService.d.ts +22 -0
- package/ts_build/src/services/MediaProcessorService.js +215 -0
- package/ts_build/src/services/MediaProcessorService.js.map +1 -0
- package/ts_build/src/services/S3.js +12 -18
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/index.d.ts +3 -2
- package/ts_build/src/services/index.js +3 -3
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/modules/index.js +10 -2
- package/ts_build/src/services/modules/index.js.map +1 -1
- package/ts_build/src/services/modules/types.d.ts +5 -2
- package/ts_build/src/services/script-execution/ScriptExecutor.js +22 -7
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.js +4 -2
- package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
- package/ts_build/src/types.d.ts +1 -0
- package/ts_build/src/types.js +1 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/http.d.ts +27 -0
- package/ts_build/src/utils/http.js +98 -0
- package/ts_build/src/utils/http.js.map +1 -0
- package/ts_build/src/workers/auth/PasskeySetup.js +6 -7
- package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
- package/ts_build/tests/clients/AIClient.test.js +11 -14
- package/ts_build/tests/clients/AIClient.test.js.map +1 -1
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/figma.test.js +1 -46
- package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
- package/ts_build/tests/processors/ToolResponseCache.test.js +2 -2
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
- package/ts_build/tests/test.spec.js +0 -14
- package/ts_build/tests/test.spec.js.map +1 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +0 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.js +2 -183
- package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +6 -4
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +4 -4
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
- package/autodoc/chat.mdx +0 -20
- package/autodoc/cli.mdx +0 -11
- package/autodoc/plugins/asana.mdx +0 -47
- package/autodoc/plugins/downloader/downloader.mdx +0 -38
- package/autodoc/plugins/downloader/plugin.mdx +0 -37
- package/autodoc/plugins/downloader/types.mdx +0 -42
- package/autodoc/plugins/embedding.mdx +0 -41
- package/autodoc/plugins/figma.mdx +0 -45
- package/autodoc/plugins/github.mdx +0 -40
- package/autodoc/plugins/jira.mdx +0 -46
- package/autodoc/plugins/language.mdx +0 -37
- package/autodoc/plugins/linear.mdx +0 -35
- package/autodoc/plugins/notion.mdx +0 -38
- package/autodoc/plugins/plugins.mdx +0 -59
- package/autodoc/plugins/types.mdx +0 -51
- package/autodoc/plugins/vim.mdx +0 -39
- package/autodoc/tools/addInternalTools.mdx +0 -1
- package/autodoc/tools/agentCall.mdx +0 -1
- package/autodoc/tools/asana/definitions.mdx +0 -10
- package/autodoc/tools/asana/index.mdx +0 -12
- package/autodoc/tools/askHuman.mdx +0 -1
- package/autodoc/tools/callPlugin.mdx +0 -1
- package/autodoc/tools/embeddingSearch.mdx +0 -1
- package/autodoc/tools/execCommand.mdx +0 -1
- package/autodoc/tools/fileSearch.mdx +0 -1
- package/autodoc/tools/finalAnswer.mdx +0 -1
- package/autodoc/tools/github/definitions.mdx +0 -6
- package/autodoc/tools/github/index.mdx +0 -8
- package/autodoc/tools/index.mdx +0 -14
- package/autodoc/tools/lintFile.mdx +0 -7
- package/autodoc/tools/list.mdx +0 -16
- package/autodoc/tools/modifyFile.mdx +0 -7
- package/autodoc/tools/patch.mdx +0 -9
- package/autodoc/tools/readBlocks.mdx +0 -1
- package/autodoc/tools/readFile.mdx +0 -1
- package/autodoc/tools/scanFile.mdx +0 -1
- package/autodoc/tools/textSearch.mdx +0 -6
- package/autodoc/tools/types/fileblock.mdx +0 -1
- package/autodoc/tools/visionTool.mdx +0 -1
- package/autodoc/tools/writeFile.mdx +0 -1
- package/benchmarks/.dockerignore +0 -7
- package/benchmarks/README.md +0 -166
- package/benchmarks/docker/Dockerfile +0 -68
- package/benchmarks/example-config.yml +0 -27
- package/benchmarks/jest.config.js +0 -13
- package/benchmarks/package-lock.json +0 -4297
- package/benchmarks/package.json +0 -39
- package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +0 -2909
- package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -1671
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +0 -2814
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -2014
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3121
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +0 -98
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +0 -3256
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +0 -4298
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3031
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -2990
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3007
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +0 -3036
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +0 -3280
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -1920
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +0 -3281
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +0 -2896
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3011
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +0 -3003
- package/benchmarks/scripts/build-and-run.sh +0 -47
- package/benchmarks/scripts/clone-exercism.sh +0 -92
- package/benchmarks/scripts/validate.sh +0 -48
- package/benchmarks/src/__tests__/runner.test.ts +0 -27
- package/benchmarks/src/cli.ts +0 -90
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +0 -64
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +0 -183
- package/benchmarks/src/evaluators/index.ts +0 -3
- package/benchmarks/src/evaluators/types.ts +0 -22
- package/benchmarks/src/index.ts +0 -3
- package/benchmarks/src/providers.ts +0 -13
- package/benchmarks/src/runner.ts +0 -824
- package/benchmarks/src/types.ts +0 -63
- package/benchmarks/tsconfig.json +0 -19
- package/leaderboard/README.md +0 -148
- package/leaderboard/app/api/benchmark-data/route.ts +0 -131
- package/leaderboard/app/api/benchmark-detail/route.ts +0 -172
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +0 -501
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +0 -375
- package/leaderboard/app/globals.css +0 -27
- package/leaderboard/app/layout.tsx +0 -21
- package/leaderboard/app/page.tsx +0 -170
- package/leaderboard/components/LeaderboardTable.tsx +0 -168
- package/leaderboard/components/PerformanceChart.tsx +0 -109
- package/leaderboard/next-env.d.ts +0 -5
- package/leaderboard/next.config.js +0 -4
- package/leaderboard/package-lock.json +0 -6363
- package/leaderboard/package.json +0 -28
- package/leaderboard/postcss.config.js +0 -6
- package/leaderboard/tailwind.config.js +0 -17
- package/leaderboard/tsconfig.json +0 -28
- package/leaderboard/types/benchmark.ts +0 -67
- package/leaderboard/utils/dataProcessor.ts +0 -33
- package/src/agents/tools/asana/definitions.ts +0 -199
- package/src/agents/tools/asana/index.ts +0 -108
- package/src/agents/tools/ast/astAppendNode.ts +0 -90
- package/src/agents/tools/ast/astDeleteNode.ts +0 -88
- package/src/agents/tools/ast/astEditNode.ts +0 -95
- package/src/agents/tools/ast/astGetPathForLine.ts +0 -73
- package/src/agents/tools/ast/astListPaths.ts +0 -66
- package/src/agents/tools/ast/index.ts +0 -7
- package/src/agents/tools/github/definitions.ts +0 -89
- package/src/agents/tools/github/index.ts +0 -67
- package/src/chat-old.ts +0 -446
- package/src/plugins/asana.ts +0 -146
- package/src/plugins/downloader/plugin.ts +0 -103
- package/src/plugins/downloader/types.ts +0 -92
- package/src/plugins/figma.ts +0 -158
- package/src/plugins/github.ts +0 -219
- package/src/plugins/jira.ts +0 -115
- package/src/plugins/linear.ts +0 -230
- package/src/plugins/notion.ts +0 -179
- package/src/plugins/tree-sitter/editor.ts +0 -369
- package/src/plugins/tree-sitter/lang-packs/index.ts +0 -23
- package/src/plugins/tree-sitter/lang-packs/java.ts +0 -59
- package/src/plugins/tree-sitter/lang-packs/javascript.ts +0 -57
- package/src/plugins/tree-sitter/lang-packs/python.ts +0 -45
- package/src/plugins/tree-sitter/lang-packs/types.ts +0 -79
- package/src/plugins/tree-sitter/lang-packs/typescript.ts +0 -49
- package/src/plugins/tree-sitter/parser.ts +0 -470
- package/src/plugins/tree-sitter/simple-paths.ts +0 -467
- package/test-comprehensive.ts +0 -31
- package/tests/tree-sitter/editor.test.ts +0 -113
- package/tests/tree-sitter/invalid.test.ts +0 -299
- package/tests/tree-sitter/paths/common-edits.test.ts +0 -564
- package/tests/tree-sitter/paths/debug-exact-position.test.ts +0 -44
- package/tests/tree-sitter/paths/debug-line-indexing.test.ts +0 -49
- package/tests/tree-sitter/paths/debug-paths.test.ts +0 -90
- package/tests/tree-sitter/paths/paths.test.ts +0 -170
- package/tests/tree-sitter/paths/simple-paths.test.ts +0 -367
- package/tests/tree-sitter/sample-after.ts +0 -48
- package/tests/tree-sitter/sample-before.ts +0 -25
- package/tests/tree-sitter/test-files/completely-broken.ts +0 -7
- package/tests/tree-sitter/test-files/duplicate-braces.ts +0 -39
- package/tests/tree-sitter/test-files/invalid-nesting.ts +0 -39
- package/tests/tree-sitter/test-files/malformed-signature.ts +0 -39
- package/tests/tree-sitter/test-files/mismatched-parens.ts +0 -39
- package/tests/tree-sitter/test-files/missing-semicolon.ts +0 -39
- package/tests/tree-sitter/test-files/partially-broken.ts +0 -20
- package/tests/tree-sitter/test-files/specific-errors.ts +0 -14
- package/tests/tree-sitter/test-files/unclosed-string.ts +0 -39
- package/tests/tree-sitter/tree-sitter.test.ts +0 -251
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
# Embeddings Guide (Knowhow CLI)
|
|
2
|
+
|
|
3
|
+
Embeddings are the backbone of Knowhow’s semantic search. Instead of searching for exact words, Knowhow converts *text chunks* into **vectors** (arrays of numbers) that represent meaning. Later, when you ask a question, Knowhow embeds the question and finds the most similar vectors across your docs/code/other sources.
|
|
4
|
+
|
|
5
|
+
This guide explains how to generate, configure, store, and use embeddings in Knowhow.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1) What embeddings are
|
|
10
|
+
|
|
11
|
+
An **embedding** is a numeric vector representing a piece of text.
|
|
12
|
+
|
|
13
|
+
When Knowhow runs embedding generation:
|
|
14
|
+
|
|
15
|
+
- It **chunks** your content into pieces (default ~2000 characters per chunk).
|
|
16
|
+
- For each chunk, it may optionally **summarize/transform** the text with a prompt.
|
|
17
|
+
- It then calls the configured embedding model to create a vector.
|
|
18
|
+
- It saves an entry shaped like:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"id": "chunk-id",
|
|
23
|
+
"text": "chunk content (possibly summarized)",
|
|
24
|
+
"vector": [0.0123, -0.0045, ...],
|
|
25
|
+
"metadata": {
|
|
26
|
+
"...": "source-specific metadata"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Chunk IDs (how Knowhow identifies chunks)
|
|
32
|
+
- If `chunkSize` is set, Knowhow typically uses:
|
|
33
|
+
- `id-index` (e.g. `path/to/file.ts-3`)
|
|
34
|
+
- If `chunkSize` is not set, it may keep the original `id`.
|
|
35
|
+
|
|
36
|
+
Knowhow also prunes old chunk embeddings that no longer match the current input (to keep embeddings in sync).
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 2) `knowhow embed` (generate embeddings)
|
|
41
|
+
|
|
42
|
+
Run the embedding generation step:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
knowhow embed
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Knowhow will:
|
|
49
|
+
|
|
50
|
+
1. Load `.knowhow/knowhow.json`
|
|
51
|
+
2. For each entry in `embedSources`, embed content into the configured `.json` output file(s)
|
|
52
|
+
3. Save updated embeddings locally under paths like:
|
|
53
|
+
- `.knowhow/embeddings/docs.json`
|
|
54
|
+
- `.knowhow/embeddings/code.json`
|
|
55
|
+
|
|
56
|
+
> In code, the embedding step iterates `config.embedSources` and calls `embedSource(...)` for each configured source.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3) `embedSources` config (what to embed)
|
|
61
|
+
|
|
62
|
+
In `.knowhow/knowhow.json`, embeddings are configured under:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"embedSources": [ ... ]
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Each entry supports these fields (from the config types and embedding logic):
|
|
71
|
+
|
|
72
|
+
### `input` (required)
|
|
73
|
+
**Glob pattern** or a direct input string (depending on `kind`).
|
|
74
|
+
|
|
75
|
+
- If `kind` is `"file"` (default), Knowhow globs the filesystem:
|
|
76
|
+
- `input: ".knowhow/docs/**/*.mdx"`
|
|
77
|
+
- For non-`file` kinds, Knowhow may treat `input` as a single input value.
|
|
78
|
+
|
|
79
|
+
### `output` (required)
|
|
80
|
+
Path where the generated embeddings JSON file is saved.
|
|
81
|
+
|
|
82
|
+
Example:
|
|
83
|
+
- `.knowhow/embeddings/docs.json`
|
|
84
|
+
|
|
85
|
+
Knowhow writes the file as a JSON array:
|
|
86
|
+
- Sorted by `id`
|
|
87
|
+
- Each element includes `id`, `text`, `vector`, `metadata`
|
|
88
|
+
|
|
89
|
+
### `chunkSize` (optional)
|
|
90
|
+
How many **characters per chunk**.
|
|
91
|
+
|
|
92
|
+
- Default in the template config is `2000`
|
|
93
|
+
- If provided, chunk IDs include `-index`
|
|
94
|
+
|
|
95
|
+
### `minLength` (optional)
|
|
96
|
+
Skip chunks shorter than this number of characters.
|
|
97
|
+
|
|
98
|
+
Implementation detail:
|
|
99
|
+
```ts
|
|
100
|
+
const tooShort = minLength && textOfChunk.length < minLength;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### `prompt` (optional)
|
|
104
|
+
If set, Knowhow transforms each chunk *before* embedding by summarizing it with a prompt.
|
|
105
|
+
|
|
106
|
+
- The prompt is loaded via `summarizeTexts([textOfChunk], prompt)`
|
|
107
|
+
- Metadata stores extra text when a prompt is used:
|
|
108
|
+
- `metadata.text` is set to the original chunking output (see code path)
|
|
109
|
+
|
|
110
|
+
This is especially useful to:
|
|
111
|
+
- compress long chunks
|
|
112
|
+
- standardize content for better retrieval
|
|
113
|
+
- emphasize relevant information
|
|
114
|
+
|
|
115
|
+
### `kind` (optional)
|
|
116
|
+
Controls how the input is interpreted.
|
|
117
|
+
|
|
118
|
+
- If omitted: defaults to `"file"`
|
|
119
|
+
- Supported patterns:
|
|
120
|
+
- `"file"`: embed content from files on disk (converted to text)
|
|
121
|
+
- `"text"`: embed a provided text string
|
|
122
|
+
- Other kinds: typically handled by embeddings plugins (see “Special input kinds” below)
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### `embedSources` example: embed docs (MDX) with chunking + prompt
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"embeddingModel": "text-embedding-ada-002",
|
|
131
|
+
"embedSources": [
|
|
132
|
+
{
|
|
133
|
+
"kind": "file",
|
|
134
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
135
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
136
|
+
"prompt": "BasicEmbeddingExplainer",
|
|
137
|
+
"chunkSize": 2000
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### `embedSources` example: embed TypeScript source files
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"embedSources": [
|
|
150
|
+
{
|
|
151
|
+
"kind": "file",
|
|
152
|
+
"input": "src/**/*.ts",
|
|
153
|
+
"output": ".knowhow/embeddings/code.json",
|
|
154
|
+
"chunkSize": 2000,
|
|
155
|
+
"minLength": 200
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### `embedSources` example: embed a literal text string
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"embedSources": [
|
|
168
|
+
{
|
|
169
|
+
"kind": "text",
|
|
170
|
+
"input": "This is a short paragraph I want searchable.",
|
|
171
|
+
"output": ".knowhow/embeddings/notes.json",
|
|
172
|
+
"chunkSize": 0,
|
|
173
|
+
"minLength": 1
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
> With `kind: "text"`, Knowhow treats `input` as the content to embed (it hashes it to generate an ID).
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 4) Embedding models (`embeddingModel`)
|
|
184
|
+
|
|
185
|
+
Knowhow uses `embeddingModel` from config to request vectors from the embedding provider.
|
|
186
|
+
|
|
187
|
+
Default (from the template config):
|
|
188
|
+
- `text-embedding-ada-002`
|
|
189
|
+
|
|
190
|
+
Supported models in the codebase:
|
|
191
|
+
|
|
192
|
+
### OpenAI embedding models
|
|
193
|
+
- `text-embedding-ada-002` (`EmbeddingAda2`)
|
|
194
|
+
- `text-embedding-3-small` (`EmbeddingSmall3`)
|
|
195
|
+
- `text-embedding-3-large` (`EmbeddingLarge3`)
|
|
196
|
+
|
|
197
|
+
### Google embedding models
|
|
198
|
+
- `gemini-embedding-exp` (`Gemini_Embedding`)
|
|
199
|
+
- `gemini-embedding-001` (`Gemini_Embedding_001`)
|
|
200
|
+
|
|
201
|
+
Example config:
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"embeddingModel": "text-embedding-3-small",
|
|
206
|
+
"embedSources": [
|
|
207
|
+
{
|
|
208
|
+
"input": "docs/**/*.md",
|
|
209
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
210
|
+
"chunkSize": 2000
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 5) Remote storage options (upload/download embeddings)
|
|
219
|
+
|
|
220
|
+
Knowhow can store the generated embeddings JSON remotely using `remote` and `remoteType` in each `embedSources` entry.
|
|
221
|
+
|
|
222
|
+
### A) Upload to S3: `remoteType: "s3"`
|
|
223
|
+
**Config**
|
|
224
|
+
- `remote`: S3 bucket name
|
|
225
|
+
- `output`: local path to the `.json` embeddings file to upload
|
|
226
|
+
|
|
227
|
+
Upload behavior (from `knowhow upload`):
|
|
228
|
+
- uploads `source.output` to `${bucket}/${embeddingName}.json` (where `embeddingName` is derived from the local filename)
|
|
229
|
+
|
|
230
|
+
Example:
|
|
231
|
+
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"embedSources": [
|
|
235
|
+
{
|
|
236
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
237
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
238
|
+
"remoteType": "s3",
|
|
239
|
+
"remote": "my-knowhow-embeddings",
|
|
240
|
+
"chunkSize": 2000
|
|
241
|
+
}
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Download behavior (from `knowhow download`):
|
|
247
|
+
- downloads `${name}.json` from the bucket into `source.output`
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
### B) Upload via GitHub (git LFS): `remoteType: "github"`
|
|
252
|
+
The downloader supports `remoteType: "github"` (implemented in `knowhow download`).
|
|
253
|
+
|
|
254
|
+
From `knowhow download`:
|
|
255
|
+
- downloads `".knowhow/embeddings/<fileName>.json"` from a configured GitHub remote into `destinationPath`
|
|
256
|
+
|
|
257
|
+
Example:
|
|
258
|
+
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"embedSources": [
|
|
262
|
+
{
|
|
263
|
+
"input": "src/**/*.ts",
|
|
264
|
+
"output": ".knowhow/embeddings/code.json",
|
|
265
|
+
"remoteType": "github",
|
|
266
|
+
"remote": "github-owner/github-repo"
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
> Note: in the provided `knowhow upload` implementation, S3 and Knowhow-cloud uploads are explicit; GitHub/LFS upload behavior may be handled by other integrations in your setup.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
### C) Upload to Knowhow Cloud KB: `remoteType: "knowhow"`
|
|
277
|
+
This is the integration path for storing embeddings into Knowhow’s hosted knowledge base.
|
|
278
|
+
|
|
279
|
+
From `knowhow upload`:
|
|
280
|
+
- requires `remoteId`
|
|
281
|
+
- uses a presigned upload URL
|
|
282
|
+
- then syncs embedding metadata back to the backend DB
|
|
283
|
+
|
|
284
|
+
Example:
|
|
285
|
+
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"embedSources": [
|
|
289
|
+
{
|
|
290
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
291
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
292
|
+
"remoteType": "knowhow",
|
|
293
|
+
"remoteId": "kb_1234567890abcdef"
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 6) `knowhow upload` (upload embeddings to remote)
|
|
302
|
+
|
|
303
|
+
Command:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
knowhow upload
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
For each `embedSources` entry:
|
|
310
|
+
|
|
311
|
+
- if `remoteType` is missing → it skips that source
|
|
312
|
+
- if `remoteType === "s3"` → uploads via S3Service
|
|
313
|
+
- if `remoteType === "knowhow"` → uploads via Knowhow presigned URLs and syncs metadata
|
|
314
|
+
|
|
315
|
+
Example: upload both docs and code embeddings
|
|
316
|
+
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"embedSources": [
|
|
320
|
+
{
|
|
321
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
322
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
323
|
+
"remoteType": "s3",
|
|
324
|
+
"remote": "my-knowhow-embeddings"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"input": "src/**/*.ts",
|
|
328
|
+
"output": ".knowhow/embeddings/code.json",
|
|
329
|
+
"remoteType": "knowhow",
|
|
330
|
+
"remoteId": "kb_1234567890abcdef"
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Run:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
knowhow upload
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 7) `knowhow download` (download embeddings from remote)
|
|
345
|
+
|
|
346
|
+
Command:
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
knowhow download
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
It will read each configured `embedSources[].remoteType` and download the corresponding embeddings JSON into `embedSources[].output`.
|
|
353
|
+
|
|
354
|
+
Supported remote types in the provided code:
|
|
355
|
+
- `s3`
|
|
356
|
+
- `github`
|
|
357
|
+
- `knowhow` (requires `remoteId`)
|
|
358
|
+
|
|
359
|
+
Example:
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"embedSources": [
|
|
364
|
+
{
|
|
365
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
366
|
+
"remoteType": "s3",
|
|
367
|
+
"remote": "my-knowhow-embeddings"
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Run:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
knowhow download
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## 8) Uploading to knowhow.tyvm.ai (Cloud KB)
|
|
382
|
+
|
|
383
|
+
To upload embeddings to the Knowhow cloud knowledge base:
|
|
384
|
+
|
|
385
|
+
### Step 1: Get a KB ID
|
|
386
|
+
You need the `KB ID` (stored as `remoteId`) from **knowhow.tyvm.ai**.
|
|
387
|
+
|
|
388
|
+
### Step 2: Configure your local `embedSources`
|
|
389
|
+
Set:
|
|
390
|
+
|
|
391
|
+
- `remoteType: "knowhow"`
|
|
392
|
+
- `remoteId: "<your KB ID>"`
|
|
393
|
+
|
|
394
|
+
Example:
|
|
395
|
+
|
|
396
|
+
```json
|
|
397
|
+
{
|
|
398
|
+
"embedSources": [
|
|
399
|
+
{
|
|
400
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
401
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
402
|
+
"remoteType": "knowhow",
|
|
403
|
+
"remoteId": "kb_1234567890abcdef",
|
|
404
|
+
"chunkSize": 2000
|
|
405
|
+
}
|
|
406
|
+
]
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Step 3: Generate + upload
|
|
411
|
+
1) Generate embeddings:
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
knowhow embed
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
2) Upload them:
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
knowhow upload
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Knowhow Cloud upload also syncs metadata back (glob, output path, chunk size, remoteType).
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## 9) Using embeddings in chat
|
|
428
|
+
|
|
429
|
+
Knowhow’s chat tooling includes an **embeddings plugin** (enabled by default in the template config). The plugin:
|
|
430
|
+
|
|
431
|
+
- embeds the user query
|
|
432
|
+
- computes similarity between the query vector and stored embedding vectors
|
|
433
|
+
- automatically selects the most relevant chunks
|
|
434
|
+
- injects them into the model context as supporting material
|
|
435
|
+
|
|
436
|
+
So, once your embeddings are generated and (optionally) uploaded/downloaded, you typically don’t manually reference the embedding files—**semantic retrieval happens automatically** by the chat/embeddings integration.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## 10) Special input kinds (YouTube, Asana, web pages, etc.)
|
|
441
|
+
|
|
442
|
+
`embedSources[].kind` can be more than `"file"`/`"text"`. The embedding pipeline checks:
|
|
443
|
+
|
|
444
|
+
- if `Plugins.isPlugin(kind)` is true → it delegates embedding to that plugin:
|
|
445
|
+
```ts
|
|
446
|
+
return Plugins.embed(kind, input);
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Your default config template enables many plugins (including `asana`, `github`, `download`, `url`, etc.), which commonly correspond to special `kind` values.
|
|
450
|
+
|
|
451
|
+
### Pattern for plugin-based kinds
|
|
452
|
+
Use:
|
|
453
|
+
|
|
454
|
+
- `kind`: plugin name
|
|
455
|
+
- `input`: plugin-specific selector or identifier
|
|
456
|
+
- `output`: local embeddings JSON file
|
|
457
|
+
- optional: `prompt`, `chunkSize`, `minLength`
|
|
458
|
+
|
|
459
|
+
#### Example: embed Asana tasks (plugin-based kind)
|
|
460
|
+
```json
|
|
461
|
+
{
|
|
462
|
+
"embedSources": [
|
|
463
|
+
{
|
|
464
|
+
"kind": "asana",
|
|
465
|
+
"input": "workspace-or-project-id-or-filter",
|
|
466
|
+
"output": ".knowhow/embeddings/asana.json",
|
|
467
|
+
"chunkSize": 2000
|
|
468
|
+
}
|
|
469
|
+
]
|
|
470
|
+
}
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
#### Example: embed web pages (URL plugin)
|
|
474
|
+
```json
|
|
475
|
+
{
|
|
476
|
+
"embedSources": [
|
|
477
|
+
{
|
|
478
|
+
"kind": "url",
|
|
479
|
+
"input": "https://example.com/docs/index.html",
|
|
480
|
+
"output": ".knowhow/embeddings/web.json",
|
|
481
|
+
"chunkSize": 2000
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
#### Example: embed YouTube videos
|
|
488
|
+
```json
|
|
489
|
+
{
|
|
490
|
+
"embedSources": [
|
|
491
|
+
{
|
|
492
|
+
"kind": "youtube",
|
|
493
|
+
"input": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
494
|
+
"output": ".knowhow/embeddings/youtube.json",
|
|
495
|
+
"chunkSize": 2000,
|
|
496
|
+
"prompt": "BasicEmbeddingExplainer"
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
}
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
#### Example: embed GitHub content (plugin-based kind)
|
|
503
|
+
```json
|
|
504
|
+
{
|
|
505
|
+
"embedSources": [
|
|
506
|
+
{
|
|
507
|
+
"kind": "github",
|
|
508
|
+
"input": "owner/repo",
|
|
509
|
+
"output": ".knowhow/embeddings/github.json",
|
|
510
|
+
"chunkSize": 2000
|
|
511
|
+
}
|
|
512
|
+
]
|
|
513
|
+
}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
> If a `kind` doesn’t correspond to an enabled embedding plugin, Knowhow may not know how to fetch/convert that input. Ensure the plugin is installed/enabled in your Knowhow setup.
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Practical recipes
|
|
521
|
+
|
|
522
|
+
### 1) Embed docs + upload to S3
|
|
523
|
+
```json
|
|
524
|
+
{
|
|
525
|
+
"embeddingModel": "text-embedding-3-small",
|
|
526
|
+
"embedSources": [
|
|
527
|
+
{
|
|
528
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
529
|
+
"output": ".knowhow/embeddings/docs.json",
|
|
530
|
+
"prompt": "BasicEmbeddingExplainer",
|
|
531
|
+
"chunkSize": 2000,
|
|
532
|
+
"remoteType": "s3",
|
|
533
|
+
"remote": "my-knowhow-embeddings"
|
|
534
|
+
}
|
|
535
|
+
]
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
knowhow embed
|
|
541
|
+
knowhow upload
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### 2) Embed code + upload to Knowhow cloud KB
|
|
545
|
+
```json
|
|
546
|
+
{
|
|
547
|
+
"embedSources": [
|
|
548
|
+
{
|
|
549
|
+
"input": "src/**/*.ts",
|
|
550
|
+
"output": ".knowhow/embeddings/code.json",
|
|
551
|
+
"chunkSize": 2000,
|
|
552
|
+
"remoteType": "knowhow",
|
|
553
|
+
"remoteId": "kb_1234567890abcdef"
|
|
554
|
+
}
|
|
555
|
+
]
|
|
556
|
+
}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
knowhow embed
|
|
561
|
+
knowhow upload
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
If you share your current `.knowhow/knowhow.json`, I can tailor an embeddings configuration (chunking, prompts, and remote storage) to your exact project structure and retrieval goals.
|