@tyvm/knowhow 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +14 -0
- package/CONFIG.md +336 -0
- package/README.md +49 -0
- package/autodoc/chat.mdx +20 -0
- package/autodoc/cli.mdx +11 -0
- package/autodoc/plugins/asana.mdx +47 -0
- package/autodoc/plugins/downloader/downloader.mdx +38 -0
- package/autodoc/plugins/downloader/plugin.mdx +37 -0
- package/autodoc/plugins/downloader/types.mdx +42 -0
- package/autodoc/plugins/embedding.mdx +41 -0
- package/autodoc/plugins/figma.mdx +45 -0
- package/autodoc/plugins/github.mdx +40 -0
- package/autodoc/plugins/jira.mdx +46 -0
- package/autodoc/plugins/language.mdx +37 -0
- package/autodoc/plugins/linear.mdx +35 -0
- package/autodoc/plugins/notion.mdx +38 -0
- package/autodoc/plugins/plugins.mdx +59 -0
- package/autodoc/plugins/types.mdx +51 -0
- package/autodoc/plugins/vim.mdx +39 -0
- package/autodoc/tools/addInternalTools.mdx +1 -0
- package/autodoc/tools/agentCall.mdx +1 -0
- package/autodoc/tools/asana/definitions.mdx +10 -0
- package/autodoc/tools/asana/index.mdx +12 -0
- package/autodoc/tools/askHuman.mdx +1 -0
- package/autodoc/tools/callPlugin.mdx +1 -0
- package/autodoc/tools/embeddingSearch.mdx +1 -0
- package/autodoc/tools/execCommand.mdx +1 -0
- package/autodoc/tools/fileSearch.mdx +1 -0
- package/autodoc/tools/finalAnswer.mdx +1 -0
- package/autodoc/tools/github/definitions.mdx +6 -0
- package/autodoc/tools/github/index.mdx +8 -0
- package/autodoc/tools/index.mdx +14 -0
- package/autodoc/tools/lintFile.mdx +7 -0
- package/autodoc/tools/list.mdx +16 -0
- package/autodoc/tools/modifyFile.mdx +7 -0
- package/autodoc/tools/patch.mdx +9 -0
- package/autodoc/tools/readBlocks.mdx +1 -0
- package/autodoc/tools/readFile.mdx +1 -0
- package/autodoc/tools/scanFile.mdx +1 -0
- package/autodoc/tools/textSearch.mdx +6 -0
- package/autodoc/tools/types/fileblock.mdx +1 -0
- package/autodoc/tools/visionTool.mdx +1 -0
- package/autodoc/tools/writeFile.mdx +1 -0
- package/jest.config.js +18 -0
- package/package.json +89 -0
- package/src/agents/base/base.ts +619 -0
- package/src/agents/base/prompt.ts +26 -0
- package/src/agents/configurable/ConfigAgent.ts +23 -0
- package/src/agents/developer/developer.ts +69 -0
- package/src/agents/index.ts +8 -0
- package/src/agents/interface.ts +11 -0
- package/src/agents/patcher/codebase.md +27 -0
- package/src/agents/patcher/patcher.ts +110 -0
- package/src/agents/researcher/researcher.ts +109 -0
- package/src/agents/tools/addInternalTools.ts +21 -0
- package/src/agents/tools/agentCall.ts +18 -0
- package/src/agents/tools/aiClient.ts +36 -0
- package/src/agents/tools/asana/definitions.ts +199 -0
- package/src/agents/tools/asana/index.ts +108 -0
- package/src/agents/tools/askHuman.ts +8 -0
- package/src/agents/tools/callPlugin.ts +4 -0
- package/src/agents/tools/embeddingSearch.ts +5 -0
- package/src/agents/tools/execCommand.ts +26 -0
- package/src/agents/tools/fileSearch.ts +33 -0
- package/src/agents/tools/finalAnswer.ts +4 -0
- package/src/agents/tools/github/definitions.ts +89 -0
- package/src/agents/tools/github/index.ts +67 -0
- package/src/agents/tools/googleSearch.ts +242 -0
- package/src/agents/tools/index.ts +24 -0
- package/src/agents/tools/language/definitions.ts +97 -0
- package/src/agents/tools/language/index.ts +19 -0
- package/src/agents/tools/lintFile.ts +17 -0
- package/src/agents/tools/list.ts +514 -0
- package/src/agents/tools/loadWebpage.ts +129 -0
- package/src/agents/tools/modifyFile.ts +53 -0
- package/src/agents/tools/patch.ts +672 -0
- package/src/agents/tools/readBlocks.ts +41 -0
- package/src/agents/tools/readFile.ts +39 -0
- package/src/agents/tools/scanFile.ts +16 -0
- package/src/agents/tools/textSearch.ts +21 -0
- package/src/agents/tools/types/fileblock.ts +5 -0
- package/src/agents/tools/visionTool.ts +5 -0
- package/src/agents/tools/writeFile.ts +46 -0
- package/src/agents/vim/vim.ts +153 -0
- package/src/ai.ts +167 -0
- package/src/chat.ts +412 -0
- package/src/cli.ts +85 -0
- package/src/clients/anthropic.ts +399 -0
- package/src/clients/gemini.ts +486 -0
- package/src/clients/http.ts +107 -0
- package/src/clients/index.ts +183 -0
- package/src/clients/knowhow.ts +33 -0
- package/src/clients/openai.ts +253 -0
- package/src/clients/types.ts +91 -0
- package/src/clients/xai.ts +132 -0
- package/src/config.ts +211 -0
- package/src/conversion.ts +140 -0
- package/src/dataset/diffs/README.md +12 -0
- package/src/dataset/diffs/debug-errors.ts +29 -0
- package/src/dataset/diffs/debug.ts +64 -0
- package/src/dataset/diffs/generate.ts +71 -0
- package/src/dataset/diffs/jsonl.ts +54 -0
- package/src/dataset/diffs/test.ts +193 -0
- package/src/embeddings.ts +411 -0
- package/src/hashes.ts +67 -0
- package/src/index.ts +376 -0
- package/src/login.ts +78 -0
- package/src/microphone.ts +136 -0
- package/src/modules/index.ts +37 -0
- package/src/modules/types.ts +48 -0
- package/src/plugins/asana.ts +134 -0
- package/src/plugins/downloader/downloader.ts +204 -0
- package/src/plugins/downloader/plugin.ts +85 -0
- package/src/plugins/downloader/types.ts +85 -0
- package/src/plugins/embedding.ts +42 -0
- package/src/plugins/figma.ts +137 -0
- package/src/plugins/github.ts +153 -0
- package/src/plugins/jira.ts +104 -0
- package/src/plugins/language.ts +100 -0
- package/src/plugins/linear.ts +219 -0
- package/src/plugins/notion.ts +170 -0
- package/src/plugins/plugins.ts +56 -0
- package/src/plugins/types.ts +5 -0
- package/src/plugins/url.ts +63 -0
- package/src/plugins/vim.ts +73 -0
- package/src/prompts/BasicCodeDocumenter.ts +1 -0
- package/src/prompts/BasicProjectDocumenter.ts +1 -0
- package/src/prompts/EmbeddingSeachHelper.ts +1 -0
- package/src/prompts/index.ts +9 -0
- package/src/server/index.ts +14 -0
- package/src/services/AgentService.ts +98 -0
- package/src/services/EmbeddingService.ts +410 -0
- package/src/services/EventService.ts +20 -0
- package/src/services/GitHub.ts +60 -0
- package/src/services/KnowhowClient.ts +113 -0
- package/src/services/Mcp.ts +270 -0
- package/src/services/McpServer.ts +119 -0
- package/src/services/McpWebsocketTransport.ts +64 -0
- package/src/services/S3.ts +126 -0
- package/src/services/Tools.ts +65 -0
- package/src/services/flags.ts +52 -0
- package/src/services/index.ts +8 -0
- package/src/types.ts +225 -0
- package/src/utils/index.ts +108 -0
- package/src/worker.ts +80 -0
- package/tests/integration/figma.test.ts +70 -0
- package/tests/integration/fileblocks/readwrite.test.ts +95 -0
- package/tests/integration/patching/input.txt +145 -0
- package/tests/integration/patching/output.txt +145 -0
- package/tests/integration/patching/patch.txt +15 -0
- package/tests/integration/patching/unseen.txt +80 -0
- package/tests/integration/patching.test.ts +136 -0
- package/tests/languagePlugin.test.ts +74 -0
- package/tests/patching/corrupted.test.ts +78 -0
- package/tests/patching/imports.patch.txt +11 -0
- package/tests/patching/imports.test.ts +43 -0
- package/tests/patching/imports.txt +11 -0
- package/tests/patching/interface.patch.txt +15 -0
- package/tests/patching/interface.txt +7 -0
- package/tests/test.spec.ts +132 -0
- package/ts_build/src/agents/base/base.d.ts +88 -0
- package/ts_build/src/agents/base/base.js +464 -0
- package/ts_build/src/agents/base/base.js.map +1 -0
- package/ts_build/src/agents/base/prompt.d.ts +1 -0
- package/ts_build/src/agents/base/prompt.js +30 -0
- package/ts_build/src/agents/base/prompt.js.map +1 -0
- package/ts_build/src/agents/configurable/ConfigAgent.d.ts +10 -0
- package/ts_build/src/agents/configurable/ConfigAgent.js +25 -0
- package/ts_build/src/agents/configurable/ConfigAgent.js.map +1 -0
- package/ts_build/src/agents/configurable/OpenAIAgent.d.ts +0 -0
- package/ts_build/src/agents/configurable/OpenAIAgent.js +1 -0
- package/ts_build/src/agents/configurable/OpenAIAgent.js.map +1 -0
- package/ts_build/src/agents/developer/developer.d.ts +9 -0
- package/ts_build/src/agents/developer/developer.js +69 -0
- package/ts_build/src/agents/developer/developer.js.map +1 -0
- package/ts_build/src/agents/index.d.ts +7 -0
- package/ts_build/src/agents/index.js +38 -0
- package/ts_build/src/agents/index.js.map +1 -0
- package/ts_build/src/agents/interface.d.ts +10 -0
- package/ts_build/src/agents/interface.js +3 -0
- package/ts_build/src/agents/interface.js.map +1 -0
- package/ts_build/src/agents/patcher/patcher.d.ts +9 -0
- package/ts_build/src/agents/patcher/patcher.js +106 -0
- package/ts_build/src/agents/patcher/patcher.js.map +1 -0
- package/ts_build/src/agents/researcher/researcher.d.ts +9 -0
- package/ts_build/src/agents/researcher/researcher.js +107 -0
- package/ts_build/src/agents/researcher/researcher.js.map +1 -0
- package/ts_build/src/agents/tools/addInternalTools.d.ts +5 -0
- package/ts_build/src/agents/tools/addInternalTools.js +18 -0
- package/ts_build/src/agents/tools/addInternalTools.js.map +1 -0
- package/ts_build/src/agents/tools/agentCall.d.ts +1 -0
- package/ts_build/src/agents/tools/agentCall.js +21 -0
- package/ts_build/src/agents/tools/agentCall.js.map +1 -0
- package/ts_build/src/agents/tools/aiClient.d.ts +6 -0
- package/ts_build/src/agents/tools/aiClient.js +25 -0
- package/ts_build/src/agents/tools/aiClient.js.map +1 -0
- package/ts_build/src/agents/tools/asana/definitions.d.ts +202 -0
- package/ts_build/src/agents/tools/asana/definitions.js +197 -0
- package/ts_build/src/agents/tools/asana/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/asana/index.d.ts +8 -0
- package/ts_build/src/agents/tools/asana/index.js +98 -0
- package/ts_build/src/agents/tools/asana/index.js.map +1 -0
- package/ts_build/src/agents/tools/askHuman.d.ts +1 -0
- package/ts_build/src/agents/tools/askHuman.js +15 -0
- package/ts_build/src/agents/tools/askHuman.js.map +1 -0
- package/ts_build/src/agents/tools/callPlugin.d.ts +1 -0
- package/ts_build/src/agents/tools/callPlugin.js +9 -0
- package/ts_build/src/agents/tools/callPlugin.js.map +1 -0
- package/ts_build/src/agents/tools/client.d.ts +5 -0
- package/ts_build/src/agents/tools/client.js +21 -0
- package/ts_build/src/agents/tools/client.js.map +1 -0
- package/ts_build/src/agents/tools/embeddingSearch.d.ts +1 -0
- package/ts_build/src/agents/tools/embeddingSearch.js +9 -0
- package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -0
- package/ts_build/src/agents/tools/execCommand.d.ts +1 -0
- package/ts_build/src/agents/tools/execCommand.js +25 -0
- package/ts_build/src/agents/tools/execCommand.js.map +1 -0
- package/ts_build/src/agents/tools/fileSearch.d.ts +1 -0
- package/ts_build/src/agents/tools/fileSearch.js +31 -0
- package/ts_build/src/agents/tools/fileSearch.js.map +1 -0
- package/ts_build/src/agents/tools/finalAnswer.d.ts +1 -0
- package/ts_build/src/agents/tools/finalAnswer.js +8 -0
- package/ts_build/src/agents/tools/finalAnswer.js.map +1 -0
- package/ts_build/src/agents/tools/github/definitions.d.ts +47 -0
- package/ts_build/src/agents/tools/github/definitions.js +86 -0
- package/ts_build/src/agents/tools/github/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/github/index.d.ts +789 -0
- package/ts_build/src/agents/tools/github/index.js +56 -0
- package/ts_build/src/agents/tools/github/index.js.map +1 -0
- package/ts_build/src/agents/tools/googleSearch.d.ts +93 -0
- package/ts_build/src/agents/tools/googleSearch.js +117 -0
- package/ts_build/src/agents/tools/googleSearch.js.map +1 -0
- package/ts_build/src/agents/tools/googleSearchTypes.d.ts +74 -0
- package/ts_build/src/agents/tools/googleSearchTypes.js +3 -0
- package/ts_build/src/agents/tools/googleSearchTypes.js.map +1 -0
- package/ts_build/src/agents/tools/index.d.ts +24 -0
- package/ts_build/src/agents/tools/index.js +41 -0
- package/ts_build/src/agents/tools/index.js.map +1 -0
- package/ts_build/src/agents/tools/language/definitions.d.ts +89 -0
- package/ts_build/src/agents/tools/language/definitions.js +95 -0
- package/ts_build/src/agents/tools/language/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/language/index.d.ts +4 -0
- package/ts_build/src/agents/tools/language/index.js +22 -0
- package/ts_build/src/agents/tools/language/index.js.map +1 -0
- package/ts_build/src/agents/tools/lintFile.d.ts +1 -0
- package/ts_build/src/agents/tools/lintFile.js +22 -0
- package/ts_build/src/agents/tools/lintFile.js.map +1 -0
- package/ts_build/src/agents/tools/list.d.ts +2 -0
- package/ts_build/src/agents/tools/list.js +505 -0
- package/ts_build/src/agents/tools/list.js.map +1 -0
- package/ts_build/src/agents/tools/loadWebpage.d.ts +8 -0
- package/ts_build/src/agents/tools/loadWebpage.js +97 -0
- package/ts_build/src/agents/tools/loadWebpage.js.map +1 -0
- package/ts_build/src/agents/tools/modifyFile.d.ts +2 -0
- package/ts_build/src/agents/tools/modifyFile.js +74 -0
- package/ts_build/src/agents/tools/modifyFile.js.map +1 -0
- package/ts_build/src/agents/tools/patch.d.ts +21 -0
- package/ts_build/src/agents/tools/patch.js +443 -0
- package/ts_build/src/agents/tools/patch.js.map +1 -0
- package/ts_build/src/agents/tools/readBlocks.d.ts +2 -0
- package/ts_build/src/agents/tools/readBlocks.js +59 -0
- package/ts_build/src/agents/tools/readBlocks.js.map +1 -0
- package/ts_build/src/agents/tools/readFile.d.ts +1 -0
- package/ts_build/src/agents/tools/readFile.js +46 -0
- package/ts_build/src/agents/tools/readFile.js.map +1 -0
- package/ts_build/src/agents/tools/scanFile.d.ts +1 -0
- package/ts_build/src/agents/tools/scanFile.js +36 -0
- package/ts_build/src/agents/tools/scanFile.js.map +1 -0
- package/ts_build/src/agents/tools/textSearch.d.ts +1 -0
- package/ts_build/src/agents/tools/textSearch.js +22 -0
- package/ts_build/src/agents/tools/textSearch.js.map +1 -0
- package/ts_build/src/agents/tools/types/fileblock.d.ts +5 -0
- package/ts_build/src/agents/tools/types/fileblock.js +3 -0
- package/ts_build/src/agents/tools/types/fileblock.js.map +1 -0
- package/ts_build/src/agents/tools/visionTool.d.ts +1 -0
- package/ts_build/src/agents/tools/visionTool.js +9 -0
- package/ts_build/src/agents/tools/visionTool.js.map +1 -0
- package/ts_build/src/agents/tools/writeFile.d.ts +2 -0
- package/ts_build/src/agents/tools/writeFile.js +61 -0
- package/ts_build/src/agents/tools/writeFile.js.map +1 -0
- package/ts_build/src/agents/vim/vim.d.ts +14 -0
- package/ts_build/src/agents/vim/vim.js +171 -0
- package/ts_build/src/agents/vim/vim.js.map +1 -0
- package/ts_build/src/ai.d.ts +10 -0
- package/ts_build/src/ai.js +102 -0
- package/ts_build/src/ai.js.map +1 -0
- package/ts_build/src/chat.d.ts +13 -0
- package/ts_build/src/chat.js +319 -0
- package/ts_build/src/chat.js.map +1 -0
- package/ts_build/src/cli.d.ts +2 -0
- package/ts_build/src/cli.js +98 -0
- package/ts_build/src/cli.js.map +1 -0
- package/ts_build/src/clients/anthropic.d.ts +31 -0
- package/ts_build/src/clients/anthropic.js +344 -0
- package/ts_build/src/clients/anthropic.js.map +1 -0
- package/ts_build/src/clients/gemini.d.ts +20 -0
- package/ts_build/src/clients/gemini.js +347 -0
- package/ts_build/src/clients/gemini.js.map +1 -0
- package/ts_build/src/clients/http.d.ts +12 -0
- package/ts_build/src/clients/http.js +91 -0
- package/ts_build/src/clients/http.js.map +1 -0
- package/ts_build/src/clients/index.d.ts +47 -0
- package/ts_build/src/clients/index.js +143 -0
- package/ts_build/src/clients/index.js.map +1 -0
- package/ts_build/src/clients/knowhow.d.ts +10 -0
- package/ts_build/src/clients/knowhow.js +24 -0
- package/ts_build/src/clients/knowhow.js.map +1 -0
- package/ts_build/src/clients/openai.d.ts +20 -0
- package/ts_build/src/clients/openai.js +221 -0
- package/ts_build/src/clients/openai.js.map +1 -0
- package/ts_build/src/clients/types.d.ts +89 -0
- package/ts_build/src/clients/types.js +3 -0
- package/ts_build/src/clients/types.js.map +1 -0
- package/ts_build/src/clients/xai.d.ts +22 -0
- package/ts_build/src/clients/xai.js +108 -0
- package/ts_build/src/clients/xai.js.map +1 -0
- package/ts_build/src/config.d.ts +9 -0
- package/ts_build/src/config.js +216 -0
- package/ts_build/src/config.js.map +1 -0
- package/ts_build/src/conversion.d.ts +7 -0
- package/ts_build/src/conversion.js +114 -0
- package/ts_build/src/conversion.js.map +1 -0
- package/ts_build/src/dataset/diffs/debug-errors.d.ts +1 -0
- package/ts_build/src/dataset/diffs/debug-errors.js +28 -0
- package/ts_build/src/dataset/diffs/debug-errors.js.map +1 -0
- package/ts_build/src/dataset/diffs/debug.d.ts +1 -0
- package/ts_build/src/dataset/diffs/debug.js +50 -0
- package/ts_build/src/dataset/diffs/debug.js.map +1 -0
- package/ts_build/src/dataset/diffs/generate.d.ts +1 -0
- package/ts_build/src/dataset/diffs/generate.js +70 -0
- package/ts_build/src/dataset/diffs/generate.js.map +1 -0
- package/ts_build/src/dataset/diffs/jsonl.d.ts +1 -0
- package/ts_build/src/dataset/diffs/jsonl.js +47 -0
- package/ts_build/src/dataset/diffs/jsonl.js.map +1 -0
- package/ts_build/src/dataset/diffs/test.d.ts +1 -0
- package/ts_build/src/dataset/diffs/test.js +114 -0
- package/ts_build/src/dataset/diffs/test.js.map +1 -0
- package/ts_build/src/embeddings.d.ts +19 -0
- package/ts_build/src/embeddings.js +322 -0
- package/ts_build/src/embeddings.js.map +1 -0
- package/ts_build/src/hashes.d.ts +6 -0
- package/ts_build/src/hashes.js +78 -0
- package/ts_build/src/hashes.js.map +1 -0
- package/ts_build/src/index.d.ts +14 -0
- package/ts_build/src/index.js +258 -0
- package/ts_build/src/index.js.map +1 -0
- package/ts_build/src/login.d.ts +2 -0
- package/ts_build/src/login.js +63 -0
- package/ts_build/src/login.js.map +1 -0
- package/ts_build/src/microphone.d.ts +9 -0
- package/ts_build/src/microphone.js +131 -0
- package/ts_build/src/microphone.js.map +1 -0
- package/ts_build/src/modules/index.d.ts +3 -0
- package/ts_build/src/modules/index.js +34 -0
- package/ts_build/src/modules/index.js.map +1 -0
- package/ts_build/src/modules/types.d.ts +37 -0
- package/ts_build/src/modules/types.js +3 -0
- package/ts_build/src/modules/types.js.map +1 -0
- package/ts_build/src/plugins/asana.d.ts +16 -0
- package/ts_build/src/plugins/asana.js +114 -0
- package/ts_build/src/plugins/asana.js.map +1 -0
- package/ts_build/src/plugins/downloader/downloader.d.ts +12 -0
- package/ts_build/src/plugins/downloader/downloader.js +174 -0
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -0
- package/ts_build/src/plugins/downloader/index.d.ts +3 -0
- package/ts_build/src/plugins/downloader/index.js +41 -0
- package/ts_build/src/plugins/downloader/index.js.map +1 -0
- package/ts_build/src/plugins/downloader/plugin.d.ts +8 -0
- package/ts_build/src/plugins/downloader/plugin.js +83 -0
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -0
- package/ts_build/src/plugins/downloader/types.d.ts +82 -0
- package/ts_build/src/plugins/downloader/types.js +79 -0
- package/ts_build/src/plugins/downloader/types.js.map +1 -0
- package/ts_build/src/plugins/embedding.d.ts +5 -0
- package/ts_build/src/plugins/embedding.js +28 -0
- package/ts_build/src/plugins/embedding.js.map +1 -0
- package/ts_build/src/plugins/figma.d.ts +20 -0
- package/ts_build/src/plugins/figma.js +94 -0
- package/ts_build/src/plugins/figma.js.map +1 -0
- package/ts_build/src/plugins/github.d.ts +1223 -0
- package/ts_build/src/plugins/github.js +115 -0
- package/ts_build/src/plugins/github.js.map +1 -0
- package/ts_build/src/plugins/jira.d.ts +15 -0
- package/ts_build/src/plugins/jira.js +94 -0
- package/ts_build/src/plugins/jira.js.map +1 -0
- package/ts_build/src/plugins/language.d.ts +8 -0
- package/ts_build/src/plugins/language.js +69 -0
- package/ts_build/src/plugins/language.js.map +1 -0
- package/ts_build/src/plugins/linear.d.ts +23 -0
- package/ts_build/src/plugins/linear.js +184 -0
- package/ts_build/src/plugins/linear.js.map +1 -0
- package/ts_build/src/plugins/notion.d.ts +32 -0
- package/ts_build/src/plugins/notion.js +131 -0
- package/ts_build/src/plugins/notion.js.map +1 -0
- package/ts_build/src/plugins/plugins.d.ts +11 -0
- package/ts_build/src/plugins/plugins.js +51 -0
- package/ts_build/src/plugins/plugins.js.map +1 -0
- package/ts_build/src/plugins/types.d.ts +5 -0
- package/ts_build/src/plugins/types.js +3 -0
- package/ts_build/src/plugins/types.js.map +1 -0
- package/ts_build/src/plugins/url.d.ts +8 -0
- package/ts_build/src/plugins/url.js +50 -0
- package/ts_build/src/plugins/url.js.map +1 -0
- package/ts_build/src/plugins/vim.d.ts +11 -0
- package/ts_build/src/plugins/vim.js +63 -0
- package/ts_build/src/plugins/vim.js.map +1 -0
- package/ts_build/src/prompts/BasicCodeDocumenter.d.ts +2 -0
- package/ts_build/src/prompts/BasicCodeDocumenter.js +4 -0
- package/ts_build/src/prompts/BasicCodeDocumenter.js.map +1 -0
- package/ts_build/src/prompts/BasicProjectDocumenter.d.ts +2 -0
- package/ts_build/src/prompts/BasicProjectDocumenter.js +4 -0
- package/ts_build/src/prompts/BasicProjectDocumenter.js.map +1 -0
- package/ts_build/src/prompts/EmbeddingSeachHelper.d.ts +2 -0
- package/ts_build/src/prompts/EmbeddingSeachHelper.js +4 -0
- package/ts_build/src/prompts/EmbeddingSeachHelper.js.map +1 -0
- package/ts_build/src/prompts/index.d.ts +13 -0
- package/ts_build/src/prompts/index.js +15 -0
- package/ts_build/src/prompts/index.js.map +1 -0
- package/ts_build/src/server/index.d.ts +1 -0
- package/ts_build/src/server/index.js +17 -0
- package/ts_build/src/server/index.js.map +1 -0
- package/ts_build/src/services/AgentService.d.ts +14 -0
- package/ts_build/src/services/AgentService.js +87 -0
- package/ts_build/src/services/AgentService.js.map +1 -0
- package/ts_build/src/services/EmbeddingService.d.ts +39 -0
- package/ts_build/src/services/EmbeddingService.js +307 -0
- package/ts_build/src/services/EmbeddingService.js.map +1 -0
- package/ts_build/src/services/EventService.d.ts +9 -0
- package/ts_build/src/services/EventService.js +20 -0
- package/ts_build/src/services/EventService.js.map +1 -0
- package/ts_build/src/services/GitHub.d.ts +11 -0
- package/ts_build/src/services/GitHub.js +52 -0
- package/ts_build/src/services/GitHub.js.map +1 -0
- package/ts_build/src/services/KnowhowClient.d.ts +18 -0
- package/ts_build/src/services/KnowhowClient.js +85 -0
- package/ts_build/src/services/KnowhowClient.js.map +1 -0
- package/ts_build/src/services/Mcp.d.ts +377 -0
- package/ts_build/src/services/Mcp.js +221 -0
- package/ts_build/src/services/Mcp.js.map +1 -0
- package/ts_build/src/services/McpServer.d.ts +19 -0
- package/ts_build/src/services/McpServer.js +104 -0
- package/ts_build/src/services/McpServer.js.map +1 -0
- package/ts_build/src/services/McpWebsocketTransport.d.ts +13 -0
- package/ts_build/src/services/McpWebsocketTransport.js +59 -0
- package/ts_build/src/services/McpWebsocketTransport.js.map +1 -0
- package/ts_build/src/services/S3.d.ts +9 -0
- package/ts_build/src/services/S3.js +116 -0
- package/ts_build/src/services/S3.js.map +1 -0
- package/ts_build/src/services/Tools.d.ts +19 -0
- package/ts_build/src/services/Tools.js +51 -0
- package/ts_build/src/services/Tools.js.map +1 -0
- package/ts_build/src/services/flags.d.ts +13 -0
- package/ts_build/src/services/flags.js +48 -0
- package/ts_build/src/services/flags.js.map +1 -0
- package/ts_build/src/services/index.d.ts +8 -0
- package/ts_build/src/services/index.js +38 -0
- package/ts_build/src/services/index.js.map +1 -0
- package/ts_build/src/terminal.d.ts +1 -0
- package/ts_build/src/terminal.js +35 -0
- package/ts_build/src/terminal.js.map +1 -0
- package/ts_build/src/types.d.ts +181 -0
- package/ts_build/src/types.js +94 -0
- package/ts_build/src/types.js.map +1 -0
- package/ts_build/src/utils/index.d.ts +24 -0
- package/ts_build/src/utils/index.js +116 -0
- package/ts_build/src/utils/index.js.map +1 -0
- package/ts_build/src/worker.d.ts +1 -0
- package/ts_build/src/worker.js +68 -0
- package/ts_build/src/worker.js.map +1 -0
- package/ts_build/tests/integration/figma.test.d.ts +1 -0
- package/ts_build/tests/integration/figma.test.js +47 -0
- package/ts_build/tests/integration/figma.test.js.map +1 -0
- package/ts_build/tests/integration/fileblocks/readwrite.test.d.ts +1 -0
- package/ts_build/tests/integration/fileblocks/readwrite.test.js +95 -0
- package/ts_build/tests/integration/fileblocks/readwrite.test.js.map +1 -0
- package/ts_build/tests/integration/patching.test.d.ts +1 -0
- package/ts_build/tests/integration/patching.test.js +117 -0
- package/ts_build/tests/integration/patching.test.js.map +1 -0
- package/ts_build/tests/languagePlugin.test.d.ts +1 -0
- package/ts_build/tests/languagePlugin.test.js +78 -0
- package/ts_build/tests/languagePlugin.test.js.map +1 -0
- package/ts_build/tests/patching/corrupted.test.d.ts +1 -0
- package/ts_build/tests/patching/corrupted.test.js +53 -0
- package/ts_build/tests/patching/corrupted.test.js.map +1 -0
- package/ts_build/tests/patching/imports.test.d.ts +1 -0
- package/ts_build/tests/patching/imports.test.js +61 -0
- package/ts_build/tests/patching/imports.test.js.map +1 -0
- package/ts_build/tests/test.spec.d.ts +1 -0
- package/ts_build/tests/test.spec.js +101 -0
- package/ts_build/tests/test.spec.js.map +1 -0
- package/tsconfig.json +31 -0
- package/tslint.json +11 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsanaPlugin = void 0;
|
|
4
|
+
class AsanaPlugin {
|
|
5
|
+
asanaClient = require("asana").ApiClient.instance;
|
|
6
|
+
constructor() {
|
|
7
|
+
this.asanaClient.authentications.token = process.env.ASANA_TOKEN;
|
|
8
|
+
this.asanaClient.defaultHeaders = {
|
|
9
|
+
"Asana-Enable": "new_user_task_lists,new_goal_memberships",
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
getTaskString(task) {
|
|
13
|
+
return `### Task: ${task.name}\n- Description: ${task.notes}\n- URL: ${task.permalink_url}\n Completed: ${task.completed}`;
|
|
14
|
+
}
|
|
15
|
+
async embed(userPrompt) {
|
|
16
|
+
const urls = this.extractTaskUrls(userPrompt);
|
|
17
|
+
const tasksData = await this.getTasksFromUrls(urls);
|
|
18
|
+
const tasksDataFiltered = tasksData.filter((task) => task !== null);
|
|
19
|
+
const tasksEmbeddings = tasksDataFiltered.map((task) => {
|
|
20
|
+
return {
|
|
21
|
+
id: task.permalink_url,
|
|
22
|
+
text: this.getTaskString(task),
|
|
23
|
+
metadata: {
|
|
24
|
+
task: JSON.stringify(task),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
const projectUrls = this.extractProjectUrls(userPrompt);
|
|
29
|
+
const projectTasks = await this.getTasksFromProjectUrls(projectUrls);
|
|
30
|
+
const projectTasksFiltered = projectTasks.filter((t) => t !== null);
|
|
31
|
+
const projectTaskEmbeddings = projectTasksFiltered.map((t) => {
|
|
32
|
+
return {
|
|
33
|
+
id: t.permalink_url,
|
|
34
|
+
text: this.getTaskString(t),
|
|
35
|
+
metadata: {
|
|
36
|
+
task: JSON.stringify(t),
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
const allTasks = tasksEmbeddings.concat(projectTaskEmbeddings);
|
|
41
|
+
console.log("Found ", allTasks.length, "tasks");
|
|
42
|
+
return allTasks;
|
|
43
|
+
}
|
|
44
|
+
extractProjectUrls(userPrompt) {
|
|
45
|
+
const projectUrlRegex = /https:\/\/app\.asana\.com\/0\/(\d+)\/list/g;
|
|
46
|
+
const matches = userPrompt.match(projectUrlRegex);
|
|
47
|
+
return matches || [];
|
|
48
|
+
}
|
|
49
|
+
extractTaskUrls(userPrompt) {
|
|
50
|
+
const taskUrlRegex = /https:\/\/app\.asana\.com\/0\/(\d+)\/(\d+)/g;
|
|
51
|
+
const matches = userPrompt.match(taskUrlRegex);
|
|
52
|
+
return matches || [];
|
|
53
|
+
}
|
|
54
|
+
async getTasksFromUrls(urls) {
|
|
55
|
+
const tasks = await Promise.all(urls.map(async (url) => {
|
|
56
|
+
return this.getTaskFromUrl(url);
|
|
57
|
+
}));
|
|
58
|
+
return tasks;
|
|
59
|
+
}
|
|
60
|
+
async getTasksFromProjectUrls(urls) {
|
|
61
|
+
const tasks = await Promise.all(urls.map((url) => this.getTasksFromProjectUrl(url)));
|
|
62
|
+
return tasks.flat();
|
|
63
|
+
}
|
|
64
|
+
async getTasksFromProjectUrl(url) {
|
|
65
|
+
const urlParts = url.split("/");
|
|
66
|
+
const projectId = urlParts[4];
|
|
67
|
+
console.log({ projectId });
|
|
68
|
+
if (!projectId) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
let tasks = await this.asanaClient.tasks.findAll({
|
|
72
|
+
project: projectId,
|
|
73
|
+
opt_expand: "notes,assignee,permalink_url,custom_fields,tags,completed",
|
|
74
|
+
});
|
|
75
|
+
const allData = [];
|
|
76
|
+
do {
|
|
77
|
+
allData.push(...tasks.data);
|
|
78
|
+
tasks = await tasks.nextPage();
|
|
79
|
+
} while (tasks);
|
|
80
|
+
return allData;
|
|
81
|
+
}
|
|
82
|
+
async getTaskFromUrl(url) {
|
|
83
|
+
const taskId = url.split("/").pop();
|
|
84
|
+
if (taskId) {
|
|
85
|
+
console.log(`Fetching Asana task ${taskId}`);
|
|
86
|
+
return await this.getTaskData(taskId);
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
async getTaskData(taskId) {
|
|
91
|
+
try {
|
|
92
|
+
const task = await this.asanaClient.tasks.findById(taskId);
|
|
93
|
+
return task;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error("Error fetching Asana task:", error);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async call(userPrompt) {
|
|
101
|
+
const urls = this.extractTaskUrls(userPrompt);
|
|
102
|
+
const tasksData = await this.getTasksFromUrls(urls);
|
|
103
|
+
const tasksDataFiltered = tasksData.filter((task) => task !== null);
|
|
104
|
+
if (tasksDataFiltered.length === 0) {
|
|
105
|
+
return "ASANA PLUGIN: No tasks found";
|
|
106
|
+
}
|
|
107
|
+
const markdownTasks = tasksDataFiltered
|
|
108
|
+
.map((task) => this.getTaskString(task))
|
|
109
|
+
.join("\n\n");
|
|
110
|
+
return `ASANA PLUGIN: The following tasks were loaded:\n\n${markdownTasks}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.AsanaPlugin = AsanaPlugin;
|
|
114
|
+
//# sourceMappingURL=asana.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asana.js","sourceRoot":"","sources":["../../../src/plugins/asana.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { KeyframeInfo } from "./types";
|
|
2
|
+
declare class DownloaderService {
|
|
3
|
+
download(url: string, outputDir: string): Promise<import("youtube-dl-exec").Payload>;
|
|
4
|
+
info(url: string): Promise<import("youtube-dl-exec").Payload>;
|
|
5
|
+
chunk(filePath: string, outputDir: string, CHUNK_LENGTH_SECONDS?: number, reuseExistingChunks?: boolean): Promise<string[]>;
|
|
6
|
+
transcribeChunks(files: string[], outputPath: string, reusePreviousTranscript?: boolean): Promise<any[]>;
|
|
7
|
+
extractKeyframes(filePath: string, outputPath: string, interval?: number): Promise<KeyframeInfo[]>;
|
|
8
|
+
private describeKeyframe;
|
|
9
|
+
private extractTimestamp;
|
|
10
|
+
}
|
|
11
|
+
export declare const Downloader: DownloaderService;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Downloader = void 0;
|
|
30
|
+
const fs = __importStar(require("fs"));
|
|
31
|
+
const path = __importStar(require("path"));
|
|
32
|
+
const youtube_dl_exec_1 = __importDefault(require("youtube-dl-exec"));
|
|
33
|
+
const progress_estimator_1 = __importDefault(require("progress-estimator"));
|
|
34
|
+
const visionTool_1 = require("../../agents/tools/visionTool");
|
|
35
|
+
const utils_1 = require("../../utils");
|
|
36
|
+
const ai_1 = require("../../ai");
|
|
37
|
+
const logger = (0, progress_estimator_1.default)();
|
|
38
|
+
class DownloaderService {
|
|
39
|
+
async download(url, outputDir) {
|
|
40
|
+
const info = await this.info(url);
|
|
41
|
+
const exists = await (0, utils_1.fileExists)(`${outputDir}/${info.id}.${info.ext}`);
|
|
42
|
+
if (exists) {
|
|
43
|
+
console.log("File already exists, skipping download");
|
|
44
|
+
return info;
|
|
45
|
+
}
|
|
46
|
+
const scrape = (0, youtube_dl_exec_1.default)(url, { output: `${outputDir}/%(id)s.%(ext)s` });
|
|
47
|
+
const result = await logger(scrape, `Obtaining ${url}`);
|
|
48
|
+
return info;
|
|
49
|
+
}
|
|
50
|
+
async info(url) {
|
|
51
|
+
const info = await (0, youtube_dl_exec_1.default)(url, {
|
|
52
|
+
dumpSingleJson: true,
|
|
53
|
+
noWarnings: true,
|
|
54
|
+
});
|
|
55
|
+
console.log(info);
|
|
56
|
+
return info;
|
|
57
|
+
}
|
|
58
|
+
async chunk(filePath, outputDir, CHUNK_LENGTH_SECONDS = 30, reuseExistingChunks = true) {
|
|
59
|
+
const parsed = path.parse(filePath);
|
|
60
|
+
const fileName = parsed.name;
|
|
61
|
+
const fileExt = parsed.ext;
|
|
62
|
+
console.log({ fileName, fileExt });
|
|
63
|
+
console.log("Chunking file", filePath);
|
|
64
|
+
const outputDirPath = path.join(outputDir, `${fileName}/chunks`);
|
|
65
|
+
await fs.promises.mkdir(outputDirPath, { recursive: true });
|
|
66
|
+
const existingFolderFiles = await fs.promises.readdir(outputDirPath);
|
|
67
|
+
const existingChunkNames = existingFolderFiles.filter((f) => f.includes("chunk") && f.endsWith(".mp3"));
|
|
68
|
+
if (existingChunkNames.length > 0) {
|
|
69
|
+
if (reuseExistingChunks) {
|
|
70
|
+
console.log("Chunks already exist, skipping");
|
|
71
|
+
return existingFolderFiles.map((chunkName) => path.join(outputDirPath, chunkName));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
for (const file of existingFolderFiles) {
|
|
75
|
+
fs.rmSync(path.join(outputDirPath, file), { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const command = `ffmpeg -i "${filePath}" -f segment -segment_time ${CHUNK_LENGTH_SECONDS} -map 0:a:0 -acodec mp3 -vn "${outputDirPath}/chunk%03d.mp3"`;
|
|
80
|
+
await (0, utils_1.execAsync)(command);
|
|
81
|
+
const folderFiles = await fs.promises.readdir(outputDirPath);
|
|
82
|
+
const chunkNames = folderFiles.filter((f) => f.includes("chunk") && f.endsWith(".mp3"));
|
|
83
|
+
console.log("Chunked into", chunkNames.length, "chunks");
|
|
84
|
+
return chunkNames.map((chunkName) => path.join(outputDirPath, chunkName));
|
|
85
|
+
}
|
|
86
|
+
async transcribeChunks(files, outputPath, reusePreviousTranscript = true) {
|
|
87
|
+
const exists = await (0, utils_1.fileExists)(outputPath);
|
|
88
|
+
if (exists && reusePreviousTranscript) {
|
|
89
|
+
console.log("Transcription already exists, skipping");
|
|
90
|
+
const contents = await (0, utils_1.readFile)(outputPath);
|
|
91
|
+
return JSON.parse(contents.toString());
|
|
92
|
+
}
|
|
93
|
+
const fullText = [];
|
|
94
|
+
for (const file of files) {
|
|
95
|
+
const chunkName = path.parse(file).name;
|
|
96
|
+
const chunkTranscriptPath = path.join(path.dirname(outputPath), `/chunks/${chunkName}.txt`);
|
|
97
|
+
const chunkExists = await (0, utils_1.fileExists)(chunkTranscriptPath);
|
|
98
|
+
if (chunkExists && reusePreviousTranscript) {
|
|
99
|
+
console.log("Chunk transcription already exists, skipping");
|
|
100
|
+
const contents = await (0, utils_1.readFile)(chunkTranscriptPath);
|
|
101
|
+
fullText.push(contents.toString());
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
console.log("Transcribing", file);
|
|
105
|
+
const transcript = await ai_1.openai.audio.transcriptions
|
|
106
|
+
.create({
|
|
107
|
+
file: fs.createReadStream(file),
|
|
108
|
+
model: "whisper-1",
|
|
109
|
+
})
|
|
110
|
+
.catch((e) => {
|
|
111
|
+
console.error("Error transcribing", file, e);
|
|
112
|
+
return { text: "" };
|
|
113
|
+
});
|
|
114
|
+
await (0, utils_1.mkdir)(path.dirname(chunkTranscriptPath), { recursive: true });
|
|
115
|
+
await fs.promises.writeFile(chunkTranscriptPath, transcript.text);
|
|
116
|
+
fullText.push(transcript.text);
|
|
117
|
+
}
|
|
118
|
+
await fs.promises.writeFile(outputPath, JSON.stringify(fullText));
|
|
119
|
+
return fullText;
|
|
120
|
+
}
|
|
121
|
+
async extractKeyframes(filePath, outputPath, interval = 10) {
|
|
122
|
+
if (fs.existsSync(outputPath)) {
|
|
123
|
+
console.log("Keyframes already exist, skipping");
|
|
124
|
+
const contents = await (0, utils_1.readFile)(outputPath);
|
|
125
|
+
return JSON.parse(contents.toString());
|
|
126
|
+
}
|
|
127
|
+
const parsed = path.parse(filePath);
|
|
128
|
+
const outputDir = path.dirname(outputPath);
|
|
129
|
+
const fileName = parsed.name;
|
|
130
|
+
const keyframesDir = path.join(outputDir, `/keyframes`);
|
|
131
|
+
await fs.promises.mkdir(keyframesDir, { recursive: true });
|
|
132
|
+
const command = `ffmpeg -i "${filePath}" -vf "fps=1/${interval},scale=640:-1" "${keyframesDir}/frame%04d.jpg"`;
|
|
133
|
+
await (0, utils_1.execAsync)(command);
|
|
134
|
+
const keyframes = await fs.promises.readdir(keyframesDir);
|
|
135
|
+
const keyframeInfos = [];
|
|
136
|
+
for (const keyframe of keyframes) {
|
|
137
|
+
const keyframePath = path.join(keyframesDir, keyframe);
|
|
138
|
+
const keyframeName = path.parse(keyframe).name;
|
|
139
|
+
const keyframeDescriptionPath = path.join(keyframesDir, `${keyframeName}.json`);
|
|
140
|
+
const descriptionExists = await (0, utils_1.fileExists)(keyframeDescriptionPath);
|
|
141
|
+
if (descriptionExists) {
|
|
142
|
+
const cached = await (0, utils_1.readFile)(keyframeDescriptionPath);
|
|
143
|
+
const cachedJson = JSON.parse(cached.toString());
|
|
144
|
+
keyframeInfos.push(cachedJson);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const description = await this.describeKeyframe(keyframePath);
|
|
148
|
+
const keyframeJson = {
|
|
149
|
+
path: keyframePath,
|
|
150
|
+
description,
|
|
151
|
+
timestamp: this.extractTimestamp(keyframe, interval),
|
|
152
|
+
};
|
|
153
|
+
await fs.promises.writeFile(keyframeDescriptionPath, JSON.stringify(keyframeJson, null, 2));
|
|
154
|
+
keyframeInfos.push(keyframeJson);
|
|
155
|
+
}
|
|
156
|
+
await fs.promises.writeFile(outputPath, JSON.stringify(keyframeInfos));
|
|
157
|
+
return keyframeInfos;
|
|
158
|
+
}
|
|
159
|
+
async describeKeyframe(keyframePath) {
|
|
160
|
+
const question = "Describe this image in detail, focusing on the main elements and actions visible.";
|
|
161
|
+
const base64 = await fs.promises.readFile(keyframePath, {
|
|
162
|
+
encoding: "base64",
|
|
163
|
+
});
|
|
164
|
+
const image = `data:image/jpeg;base64,${base64}`;
|
|
165
|
+
const description = await (0, visionTool_1.visionTool)(image, question);
|
|
166
|
+
return description;
|
|
167
|
+
}
|
|
168
|
+
extractTimestamp(keyframeName, interval) {
|
|
169
|
+
const frameNumber = parseInt(keyframeName.match(/\d+/)[0], 10);
|
|
170
|
+
return frameNumber * interval;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.Downloader = new DownloaderService();
|
|
174
|
+
//# sourceMappingURL=downloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../../../src/plugins/downloader/downloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const downloader_1 = require("./downloader");
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const downloaderPlugin = {
|
|
29
|
+
name: "downloader",
|
|
30
|
+
async execute(input) {
|
|
31
|
+
const outputDir = path.join(process.cwd(), "downloads");
|
|
32
|
+
console.log("Downloading", input);
|
|
33
|
+
const downloadInfo = await downloader_1.Downloader.download(input, outputDir);
|
|
34
|
+
console.log("Download complete", downloadInfo);
|
|
35
|
+
const filePath = path.join(outputDir, `${downloadInfo.id}.${downloadInfo.ext}`);
|
|
36
|
+
const embeddedContent = await downloader_1.Downloader.embedVideoContent(filePath, outputDir);
|
|
37
|
+
return embeddedContent;
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
exports.default = downloaderPlugin;
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/downloader/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA0C;AAC1C,2CAA6B;AAE7B,MAAM,gBAAgB,GAAW;IAC/B,IAAI,EAAE,YAAY;IAClB,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,uBAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,MAAM,uBAAU,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChF,OAAO,eAAe,CAAC;IACzB,CAAC;CACF,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Plugin } from "../types";
|
|
2
|
+
import { MinimalEmbedding } from "../../types";
|
|
3
|
+
export declare class DownloaderPlugin implements Plugin {
|
|
4
|
+
skipExt: string[];
|
|
5
|
+
extractUrls(userInput: string): string[];
|
|
6
|
+
call(userInput: string): Promise<string>;
|
|
7
|
+
embed(userInput: string): Promise<MinimalEmbedding[]>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DownloaderPlugin = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const conversion_1 = require("../../conversion");
|
|
9
|
+
const downloader_1 = require("./downloader");
|
|
10
|
+
class DownloaderPlugin {
|
|
11
|
+
skipExt = ["jpg", "jpeg", "png", "gif"];
|
|
12
|
+
extractUrls(userInput) {
|
|
13
|
+
const urlRegex = /https:\/\/[^\s]+/gim;
|
|
14
|
+
const matches = userInput.match(urlRegex) || [];
|
|
15
|
+
return matches;
|
|
16
|
+
}
|
|
17
|
+
async call(userInput) {
|
|
18
|
+
const urls = this.extractUrls(userInput);
|
|
19
|
+
if (urls.length === 0) {
|
|
20
|
+
return "DOWNLOADER PLUGIN: No URLs found in the input";
|
|
21
|
+
}
|
|
22
|
+
let transcript = "";
|
|
23
|
+
for (const url of urls) {
|
|
24
|
+
if (this.skipExt.includes(url.split(".").pop() || "")) {
|
|
25
|
+
console.log("DOWNLOADER PLUGIN: skipping", url);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
console.log("DOWNLOADER PLUGIN: attempting", url);
|
|
30
|
+
const downloadDir = ".knowhow/downloads/";
|
|
31
|
+
const fileInfo = await downloader_1.Downloader.download(url, downloadDir);
|
|
32
|
+
const filePath = `${downloadDir}${fileInfo.id}.${fileInfo.ext}`;
|
|
33
|
+
transcript += await (0, conversion_1.convertToText)(filePath);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
console.log("DOWNLOADER PLUGIN: cannot download", url);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return "DOWNLOADER PLUGIN: " + transcript;
|
|
40
|
+
}
|
|
41
|
+
async embed(userInput) {
|
|
42
|
+
const urls = this.extractUrls(userInput);
|
|
43
|
+
if (urls.length === 0) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const embeddings = [];
|
|
47
|
+
for (const url of urls) {
|
|
48
|
+
const downloadDir = ".knowhow/downloads/";
|
|
49
|
+
const fileInfo = await downloader_1.Downloader.download(url, downloadDir);
|
|
50
|
+
const filePath = `${downloadDir}${fileInfo.id}.${fileInfo.ext}`;
|
|
51
|
+
const processed = await (0, conversion_1.processVideo)(filePath);
|
|
52
|
+
let index = 0;
|
|
53
|
+
for (const chunk of processed) {
|
|
54
|
+
if (chunk.transcription) {
|
|
55
|
+
embeddings.push({
|
|
56
|
+
id: `${url}-audio-${index}`,
|
|
57
|
+
text: chunk.transcription,
|
|
58
|
+
metadata: {
|
|
59
|
+
url,
|
|
60
|
+
description: chunk.frame.description,
|
|
61
|
+
timestamp: `${chunk.frame.timestamp}s`,
|
|
62
|
+
image: fs_1.default.readFileSync(chunk.frame.path, "base64"),
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (chunk.frame.description) {
|
|
67
|
+
embeddings.push({
|
|
68
|
+
id: `${url}-video-${index}`,
|
|
69
|
+
text: chunk.frame.description,
|
|
70
|
+
metadata: {
|
|
71
|
+
url,
|
|
72
|
+
timestamp: `${chunk.frame.timestamp}s`,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
index++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return embeddings;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.DownloaderPlugin = DownloaderPlugin;
|
|
83
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/plugins/downloader/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export declare class AudioFormat {
|
|
2
|
+
ext: string;
|
|
3
|
+
width: number | null;
|
|
4
|
+
height: number | null;
|
|
5
|
+
tbr: number | null;
|
|
6
|
+
format_id: string;
|
|
7
|
+
url: string;
|
|
8
|
+
vcodec: string;
|
|
9
|
+
http_headers: Record<string, string>;
|
|
10
|
+
protocol: string;
|
|
11
|
+
resolution: string;
|
|
12
|
+
aspect_ratio: number | null;
|
|
13
|
+
audio_ext: string;
|
|
14
|
+
video_ext: string;
|
|
15
|
+
format: string;
|
|
16
|
+
}
|
|
17
|
+
export interface KeyframeInfo {
|
|
18
|
+
path: string;
|
|
19
|
+
description: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class RequestedDownload {
|
|
23
|
+
ext: string;
|
|
24
|
+
format_id: string;
|
|
25
|
+
url: string;
|
|
26
|
+
vcodec: string;
|
|
27
|
+
http_headers: Record<string, string>;
|
|
28
|
+
protocol: string;
|
|
29
|
+
resolution: string;
|
|
30
|
+
audio_ext: string;
|
|
31
|
+
video_ext: string;
|
|
32
|
+
format: string;
|
|
33
|
+
epoch: number;
|
|
34
|
+
_filename: string;
|
|
35
|
+
__write_download_archive: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare class DownloadInfo {
|
|
38
|
+
id: string;
|
|
39
|
+
title: string;
|
|
40
|
+
timestamp: Date | null;
|
|
41
|
+
description: string | null;
|
|
42
|
+
thumbnail: string | null;
|
|
43
|
+
age_limit: number;
|
|
44
|
+
formats: AudioFormat[];
|
|
45
|
+
subtitles: Record<string, string>;
|
|
46
|
+
_old_archive_ids: string[];
|
|
47
|
+
extractor: string;
|
|
48
|
+
extractor_key: string;
|
|
49
|
+
webpage_url: string;
|
|
50
|
+
original_url: string;
|
|
51
|
+
webpage_url_basename: string;
|
|
52
|
+
webpage_url_domain: string;
|
|
53
|
+
playlist: string | null;
|
|
54
|
+
playlist_index: number | null;
|
|
55
|
+
display_id: string;
|
|
56
|
+
fulltitle: string;
|
|
57
|
+
requested_subtitles: Record<string, string> | null;
|
|
58
|
+
_has_drm: boolean | null;
|
|
59
|
+
requested_downloads: RequestedDownload[];
|
|
60
|
+
ext: string;
|
|
61
|
+
width: number | null;
|
|
62
|
+
height: number | null;
|
|
63
|
+
tbr: number | null;
|
|
64
|
+
format_id: string;
|
|
65
|
+
url: string;
|
|
66
|
+
vcodec: string;
|
|
67
|
+
http_headers: Record<string, string>;
|
|
68
|
+
protocol: string;
|
|
69
|
+
resolution: string;
|
|
70
|
+
aspect_ratio: number | null;
|
|
71
|
+
audio_ext: string;
|
|
72
|
+
video_ext: string;
|
|
73
|
+
format: string;
|
|
74
|
+
epoch: number;
|
|
75
|
+
_type: string;
|
|
76
|
+
_version: {
|
|
77
|
+
version: string;
|
|
78
|
+
current_git_head: string | null;
|
|
79
|
+
release_git_head: string;
|
|
80
|
+
repository: string;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DownloadInfo = exports.RequestedDownload = exports.AudioFormat = void 0;
|
|
4
|
+
class AudioFormat {
|
|
5
|
+
ext;
|
|
6
|
+
width;
|
|
7
|
+
height;
|
|
8
|
+
tbr;
|
|
9
|
+
format_id;
|
|
10
|
+
url;
|
|
11
|
+
vcodec;
|
|
12
|
+
http_headers;
|
|
13
|
+
protocol;
|
|
14
|
+
resolution;
|
|
15
|
+
aspect_ratio;
|
|
16
|
+
audio_ext;
|
|
17
|
+
video_ext;
|
|
18
|
+
format;
|
|
19
|
+
}
|
|
20
|
+
exports.AudioFormat = AudioFormat;
|
|
21
|
+
class RequestedDownload {
|
|
22
|
+
ext;
|
|
23
|
+
format_id;
|
|
24
|
+
url;
|
|
25
|
+
vcodec;
|
|
26
|
+
http_headers;
|
|
27
|
+
protocol;
|
|
28
|
+
resolution;
|
|
29
|
+
audio_ext;
|
|
30
|
+
video_ext;
|
|
31
|
+
format;
|
|
32
|
+
epoch;
|
|
33
|
+
_filename;
|
|
34
|
+
__write_download_archive;
|
|
35
|
+
}
|
|
36
|
+
exports.RequestedDownload = RequestedDownload;
|
|
37
|
+
class DownloadInfo {
|
|
38
|
+
id;
|
|
39
|
+
title;
|
|
40
|
+
timestamp;
|
|
41
|
+
description;
|
|
42
|
+
thumbnail;
|
|
43
|
+
age_limit;
|
|
44
|
+
formats;
|
|
45
|
+
subtitles;
|
|
46
|
+
_old_archive_ids;
|
|
47
|
+
extractor;
|
|
48
|
+
extractor_key;
|
|
49
|
+
webpage_url;
|
|
50
|
+
original_url;
|
|
51
|
+
webpage_url_basename;
|
|
52
|
+
webpage_url_domain;
|
|
53
|
+
playlist;
|
|
54
|
+
playlist_index;
|
|
55
|
+
display_id;
|
|
56
|
+
fulltitle;
|
|
57
|
+
requested_subtitles;
|
|
58
|
+
_has_drm;
|
|
59
|
+
requested_downloads;
|
|
60
|
+
ext;
|
|
61
|
+
width;
|
|
62
|
+
height;
|
|
63
|
+
tbr;
|
|
64
|
+
format_id;
|
|
65
|
+
url;
|
|
66
|
+
vcodec;
|
|
67
|
+
http_headers;
|
|
68
|
+
protocol;
|
|
69
|
+
resolution;
|
|
70
|
+
aspect_ratio;
|
|
71
|
+
audio_ext;
|
|
72
|
+
video_ext;
|
|
73
|
+
format;
|
|
74
|
+
epoch;
|
|
75
|
+
_type;
|
|
76
|
+
_version;
|
|
77
|
+
}
|
|
78
|
+
exports.DownloadInfo = DownloadInfo;
|
|
79
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/plugins/downloader/types.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACtB,GAAG,CAAS;IACZ,KAAK,CAAgB;IACrB,MAAM,CAAgB;IACtB,GAAG,CAAgB;IACnB,SAAS,CAAS;IAClB,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,YAAY,CAAyB;IACrC,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,YAAY,CAAgB;IAC5B,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,MAAM,CAAS;CAChB;AAfD,kCAeC;AAQD,MAAa,iBAAiB;IAC5B,GAAG,CAAS;IACZ,SAAS,CAAS;IAClB,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,YAAY,CAAyB;IACrC,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,wBAAwB,CAAU;CACnC;AAdD,8CAcC;AAED,MAAa,YAAY;IACvB,EAAE,CAAS;IACX,KAAK,CAAS;IACd,SAAS,CAAc;IACvB,WAAW,CAAgB;IAC3B,SAAS,CAAgB;IACzB,SAAS,CAAS;IAClB,OAAO,CAAgB;IACvB,SAAS,CAAyB;IAClC,gBAAgB,CAAW;IAC3B,SAAS,CAAS;IAClB,aAAa,CAAS;IACtB,WAAW,CAAS;IACpB,YAAY,CAAS;IACrB,oBAAoB,CAAS;IAC7B,kBAAkB,CAAS;IAC3B,QAAQ,CAAgB;IACxB,cAAc,CAAgB;IAC9B,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,mBAAmB,CAAgC;IACnD,QAAQ,CAAiB;IACzB,mBAAmB,CAAsB;IACzC,GAAG,CAAS;IACZ,KAAK,CAAgB;IACrB,MAAM,CAAgB;IACtB,GAAG,CAAgB;IACnB,SAAS,CAAS;IAClB,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,YAAY,CAAyB;IACrC,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,YAAY,CAAgB;IAC5B,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,KAAK,CAAS;IACd,QAAQ,CAKN;CACH;AA7CD,oCA6CC"}
|