@tyvm/knowhow 0.0.46 → 0.0.48
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/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +2909 -0
- package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +1671 -0
- package/jest.config.js +2 -2
- package/package.json +8 -3
- package/src/agents/base/base.ts +30 -24
- package/src/agents/patcher/patcher.ts +26 -5
- package/src/agents/tools/agentCall.ts +4 -2
- package/src/agents/tools/aiClient.ts +3 -11
- package/src/agents/tools/ast/astAppendNode.ts +90 -0
- package/src/agents/tools/ast/astDeleteNode.ts +88 -0
- package/src/agents/tools/ast/astEditNode.ts +95 -0
- package/src/agents/tools/ast/astGetPathForLine.ts +73 -0
- package/src/agents/tools/ast/astListPaths.ts +66 -0
- package/src/agents/tools/ast/index.ts +7 -0
- package/src/agents/tools/callPlugin.ts +8 -2
- package/src/agents/tools/embeddingSearch.ts +2 -1
- package/src/agents/tools/execCommand.ts +239 -94
- package/src/agents/tools/fileSearch.ts +15 -17
- package/src/agents/tools/index.ts +1 -0
- package/src/agents/tools/language/definitions.ts +10 -2
- package/src/agents/tools/language/index.ts +3 -2
- package/src/agents/tools/lintFile.ts +4 -2
- package/src/agents/tools/list.ts +203 -62
- package/src/agents/tools/patch.ts +48 -14
- package/src/agents/tools/readBlocks.ts +34 -0
- package/src/agents/tools/readFile.ts +23 -0
- package/src/agents/tools/stringReplace.ts +33 -9
- package/src/agents/tools/writeFile.ts +55 -0
- package/src/agents/tools/ycmd/server.ts +14 -4
- package/src/chat/CliChatService.ts +6 -1
- package/src/chat/modules/AgentModule.ts +107 -64
- package/src/chat/modules/AskModule.ts +0 -1
- package/src/chat/modules/SetupModule.ts +4 -4
- package/src/chat/modules/SystemModule.ts +28 -5
- package/src/chat/types.ts +2 -0
- package/src/chat-old.ts +2 -2
- package/src/clients/anthropic.ts +22 -1
- package/src/clients/openai.ts +1 -1
- package/src/clients/types.ts +1 -1
- package/src/clients/xai.ts +15 -5
- package/src/config.ts +17 -5
- package/src/dataset/diffs/generate.ts +2 -2
- package/src/dataset/diffs/jsonl.ts +0 -1
- package/src/embeddings.ts +6 -4
- package/src/index.ts +11 -5
- package/src/plugins/GitPlugin.ts +530 -0
- package/src/plugins/LinterPlugin.ts +89 -0
- package/src/plugins/PluginBase.ts +4 -2
- package/src/plugins/asana.ts +4 -2
- package/src/plugins/downloader/plugin.ts +5 -2
- package/src/plugins/embedding.ts +24 -4
- package/src/plugins/figma.ts +7 -3
- package/src/plugins/github.ts +4 -2
- package/src/plugins/jira.ts +4 -2
- package/src/plugins/language.ts +134 -27
- package/src/plugins/linear.ts +4 -2
- package/src/plugins/notion.ts +4 -2
- package/src/plugins/plugins.ts +27 -16
- package/src/plugins/tree-sitter/editor.ts +369 -0
- package/src/plugins/tree-sitter/lang-packs/index.ts +23 -0
- package/src/plugins/tree-sitter/lang-packs/java.ts +59 -0
- package/src/plugins/tree-sitter/lang-packs/javascript.ts +57 -0
- package/src/plugins/tree-sitter/lang-packs/python.ts +45 -0
- package/src/plugins/tree-sitter/lang-packs/types.ts +79 -0
- package/src/plugins/tree-sitter/lang-packs/typescript.ts +49 -0
- package/src/plugins/tree-sitter/parser.ts +444 -0
- package/src/plugins/tree-sitter/simple-paths.ts +467 -0
- package/src/plugins/types.ts +11 -0
- package/src/plugins/url.ts +5 -3
- package/src/plugins/vim.ts +8 -5
- package/src/processors/CustomVariables.ts +19 -7
- package/src/processors/TokenCompressor.ts +13 -13
- package/src/processors/ToolResponseCache.ts +15 -6
- package/src/services/EmbeddingService.ts +18 -9
- package/src/services/EventService.ts +80 -0
- package/src/services/Mcp.ts +5 -0
- package/src/services/S3.ts +4 -3
- package/src/services/Tools.ts +125 -53
- package/src/services/index.ts +16 -11
- package/src/services/types.ts +3 -3
- package/src/types.ts +7 -2
- package/src/worker.ts +14 -1
- package/test-comprehensive.ts +31 -0
- package/tests/clients/AIClient.test.ts +490 -0
- package/tests/manual/agent-events/run-test.ts +203 -0
- package/tests/{integration → manual/file-edits}/figma.test.ts +1 -1
- package/tests/{integration → manual/file-edits}/fileblocks/readwrite.test.ts +7 -3
- package/tests/{integration → manual/file-edits}/patching.test.ts +11 -8
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +332 -0
- package/tests/plugins/language/languagePlugin-integration.test.ts +456 -0
- package/tests/plugins/language/languagePlugin.test.ts +363 -0
- package/tests/processors/Base64ImageDetector.test.ts +403 -0
- package/tests/processors/CustomVariables.test.ts +430 -0
- package/tests/processors/HarmonyToolProcessor.test.ts +490 -0
- package/tests/processors/TokenCompressor.test.ts +391 -0
- package/tests/processors/ToolResponseCache.test.ts +688 -0
- package/tests/services/Tools.test.ts +1339 -0
- package/tests/test.spec.ts +162 -117
- package/tests/tree-sitter/editor.test.ts +113 -0
- package/tests/tree-sitter/invalid.test.ts +299 -0
- package/tests/tree-sitter/paths/common-edits.test.ts +564 -0
- package/tests/tree-sitter/paths/debug-exact-position.test.ts +44 -0
- package/tests/tree-sitter/paths/debug-line-indexing.test.ts +49 -0
- package/tests/tree-sitter/paths/debug-paths.test.ts +90 -0
- package/tests/tree-sitter/paths/paths.test.ts +170 -0
- package/tests/tree-sitter/paths/simple-paths.test.ts +367 -0
- package/tests/tree-sitter/sample-after.ts +48 -0
- package/tests/tree-sitter/sample-before.ts +25 -0
- package/tests/tree-sitter/test-files/completely-broken.ts +7 -0
- package/tests/tree-sitter/test-files/duplicate-braces.ts +39 -0
- package/tests/tree-sitter/test-files/invalid-nesting.ts +39 -0
- package/tests/tree-sitter/test-files/malformed-signature.ts +39 -0
- package/tests/tree-sitter/test-files/mismatched-parens.ts +39 -0
- package/tests/tree-sitter/test-files/missing-semicolon.ts +39 -0
- package/tests/tree-sitter/test-files/partially-broken.ts +20 -0
- package/tests/tree-sitter/test-files/specific-errors.ts +14 -0
- package/tests/tree-sitter/test-files/unclosed-string.ts +39 -0
- package/tests/tree-sitter/tree-sitter.test.ts +251 -0
- package/ts_build/package.json +8 -3
- package/ts_build/src/agents/base/base.d.ts +2 -2
- package/ts_build/src/agents/base/base.js +24 -20
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +26 -5
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/tools/agentCall.js +2 -1
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/aiClient.d.ts +7 -8
- package/ts_build/src/agents/tools/aiClient.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astAppendNode.js +96 -0
- package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.js +94 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astEditNode.js +96 -0
- package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js +78 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astListPaths.js +78 -0
- package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -0
- package/ts_build/src/agents/tools/ast/index.d.ts +5 -0
- package/ts_build/src/agents/tools/ast/index.js +14 -0
- package/ts_build/src/agents/tools/ast/index.js.map +1 -0
- package/ts_build/src/agents/tools/astAppendNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astAppendNode.js +98 -0
- package/ts_build/src/agents/tools/astAppendNode.js.map +1 -0
- package/ts_build/src/agents/tools/astDeleteNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astDeleteNode.js +95 -0
- package/ts_build/src/agents/tools/astDeleteNode.js.map +1 -0
- package/ts_build/src/agents/tools/astEditNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astEditNode.js +98 -0
- package/ts_build/src/agents/tools/astEditNode.js.map +1 -0
- package/ts_build/src/agents/tools/astGetPathForLine.d.ts +1 -0
- package/ts_build/src/agents/tools/astGetPathForLine.js +89 -0
- package/ts_build/src/agents/tools/astGetPathForLine.js.map +1 -0
- package/ts_build/src/agents/tools/astListPaths.d.ts +1 -0
- package/ts_build/src/agents/tools/astListPaths.js +82 -0
- package/ts_build/src/agents/tools/astListPaths.js.map +1 -0
- package/ts_build/src/agents/tools/callPlugin.js +4 -2
- package/ts_build/src/agents/tools/callPlugin.js.map +1 -1
- package/ts_build/src/agents/tools/embeddingSearch.js +3 -2
- package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
- package/ts_build/src/agents/tools/execCommand.js +201 -67
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/agents/tools/fileSearch.d.ts +1 -1
- package/ts_build/src/agents/tools/fileSearch.js +11 -15
- package/ts_build/src/agents/tools/fileSearch.js.map +1 -1
- package/ts_build/src/agents/tools/github/index.d.ts +1 -1
- package/ts_build/src/agents/tools/index.d.ts +1 -0
- package/ts_build/src/agents/tools/index.js +1 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/language/definitions.js +11 -2
- package/ts_build/src/agents/tools/language/definitions.js.map +1 -1
- package/ts_build/src/agents/tools/language/index.js +4 -3
- package/ts_build/src/agents/tools/language/index.js.map +1 -1
- package/ts_build/src/agents/tools/lintFile.js +4 -2
- package/ts_build/src/agents/tools/lintFile.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +185 -49
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/patch.js +33 -10
- package/ts_build/src/agents/tools/patch.js.map +1 -1
- package/ts_build/src/agents/tools/readBlocks.js +23 -0
- package/ts_build/src/agents/tools/readBlocks.js.map +1 -1
- package/ts_build/src/agents/tools/readFile.js +14 -0
- package/ts_build/src/agents/tools/readFile.js.map +1 -1
- package/ts_build/src/agents/tools/stringReplace.js +19 -2
- package/ts_build/src/agents/tools/stringReplace.js.map +1 -1
- package/ts_build/src/agents/tools/writeFile.js +40 -0
- package/ts_build/src/agents/tools/writeFile.js.map +1 -1
- package/ts_build/src/agents/tools/ycmd/server.js +5 -0
- package/ts_build/src/agents/tools/ycmd/server.js.map +1 -1
- package/ts_build/src/chat/CliChatService.d.ts +1 -0
- package/ts_build/src/chat/CliChatService.js +6 -2
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.d.ts +5 -1
- package/ts_build/src/chat/modules/AgentModule.js +53 -31
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/modules/AskModule.js.map +1 -1
- package/ts_build/src/chat/modules/SetupModule.js +4 -3
- package/ts_build/src/chat/modules/SetupModule.js.map +1 -1
- package/ts_build/src/chat/modules/SystemModule.js +19 -4
- package/ts_build/src/chat/modules/SystemModule.js.map +1 -1
- package/ts_build/src/chat/modules/index.d.ts +5 -0
- package/ts_build/src/chat/modules/index.js +14 -0
- package/ts_build/src/chat/modules/index.js.map +1 -0
- package/ts_build/src/chat/types.d.ts +2 -0
- package/ts_build/src/chat-old.js +3 -3
- package/ts_build/src/chat-old.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +1 -0
- package/ts_build/src/clients/anthropic.js +22 -1
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/openai.js +1 -1
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +1 -1
- package/ts_build/src/clients/xai.d.ts +7 -0
- package/ts_build/src/clients/xai.js +13 -4
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/config.js +14 -3
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/dataset/diffs/generate.js +2 -2
- package/ts_build/src/dataset/diffs/generate.js.map +1 -1
- package/ts_build/src/dataset/diffs/jsonl.js.map +1 -1
- package/ts_build/src/embeddings.js +7 -9
- package/ts_build/src/embeddings.js.map +1 -1
- package/ts_build/src/index.js +10 -10
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/plugins/GitPlugin.d.ts +39 -0
- package/ts_build/src/plugins/GitPlugin.js +439 -0
- package/ts_build/src/plugins/GitPlugin.js.map +1 -0
- package/ts_build/src/plugins/LinterPlugin.d.ts +15 -0
- package/ts_build/src/plugins/LinterPlugin.js +65 -0
- package/ts_build/src/plugins/LinterPlugin.js.map +1 -0
- package/ts_build/src/plugins/PluginBase.d.ts +4 -3
- package/ts_build/src/plugins/PluginBase.js +3 -3
- package/ts_build/src/plugins/PluginBase.js.map +1 -1
- package/ts_build/src/plugins/asana.d.ts +3 -1
- package/ts_build/src/plugins/asana.js +3 -2
- package/ts_build/src/plugins/asana.js.map +1 -1
- package/ts_build/src/plugins/downloader/plugin.d.ts +3 -1
- package/ts_build/src/plugins/downloader/plugin.js +3 -2
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
- package/ts_build/src/plugins/embedding.d.ts +5 -1
- package/ts_build/src/plugins/embedding.js +15 -3
- package/ts_build/src/plugins/embedding.js.map +1 -1
- package/ts_build/src/plugins/figma.d.ts +3 -1
- package/ts_build/src/plugins/figma.js +28 -4
- package/ts_build/src/plugins/figma.js.map +1 -1
- package/ts_build/src/plugins/github.d.ts +3 -1
- package/ts_build/src/plugins/github.js +3 -2
- package/ts_build/src/plugins/github.js.map +1 -1
- package/ts_build/src/plugins/jira.d.ts +3 -1
- package/ts_build/src/plugins/jira.js +3 -2
- package/ts_build/src/plugins/jira.js.map +1 -1
- package/ts_build/src/plugins/language.d.ts +7 -4
- package/ts_build/src/plugins/language.js +85 -20
- package/ts_build/src/plugins/language.js.map +1 -1
- package/ts_build/src/plugins/linear.d.ts +3 -1
- package/ts_build/src/plugins/linear.js +3 -2
- package/ts_build/src/plugins/linear.js.map +1 -1
- package/ts_build/src/plugins/notion.d.ts +3 -1
- package/ts_build/src/plugins/notion.js +3 -2
- package/ts_build/src/plugins/notion.js.map +1 -1
- package/ts_build/src/plugins/plugins.d.ts +4 -3
- package/ts_build/src/plugins/plugins.js +24 -14
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/editor.d.ts +34 -0
- package/ts_build/src/plugins/tree-sitter/editor.js +218 -0
- package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.d.ts +29 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js +538 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.d.ts +22 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.js +332 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.d.ts +8 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.js +26 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.js +61 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js +59 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.js +47 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.d.ts +43 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.js +3 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js +50 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/parser.d.ts +75 -0
- package/ts_build/src/plugins/tree-sitter/parser.js +306 -0
- package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +22 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.js +332 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -0
- package/ts_build/src/plugins/types.d.ts +10 -0
- package/ts_build/src/plugins/url.d.ts +3 -2
- package/ts_build/src/plugins/url.js +3 -2
- package/ts_build/src/plugins/url.js.map +1 -1
- package/ts_build/src/plugins/vim.d.ts +4 -2
- package/ts_build/src/plugins/vim.js +6 -8
- package/ts_build/src/plugins/vim.js.map +1 -1
- package/ts_build/src/processors/CustomVariables.js +12 -3
- package/ts_build/src/processors/CustomVariables.js.map +1 -1
- package/ts_build/src/processors/TokenCompressor.js +8 -11
- package/ts_build/src/processors/TokenCompressor.js.map +1 -1
- package/ts_build/src/processors/ToolResponseCache.d.ts +2 -2
- package/ts_build/src/processors/ToolResponseCache.js +12 -2
- package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
- package/ts_build/src/services/EmbeddingService.d.ts +10 -1
- package/ts_build/src/services/EmbeddingService.js +12 -12
- package/ts_build/src/services/EmbeddingService.js.map +1 -1
- package/ts_build/src/services/EventService.d.ts +7 -0
- package/ts_build/src/services/EventService.js +49 -0
- package/ts_build/src/services/EventService.js.map +1 -1
- package/ts_build/src/services/Mcp.js +8 -0
- package/ts_build/src/services/Mcp.js.map +1 -1
- package/ts_build/src/services/S3.js +4 -3
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/Tools.d.ts +1 -0
- package/ts_build/src/services/Tools.js +97 -35
- package/ts_build/src/services/Tools.js.map +1 -1
- package/ts_build/src/services/index.d.ts +4 -5
- package/ts_build/src/services/index.js +14 -9
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/types.js +3 -3
- package/ts_build/src/services/types.js.map +1 -1
- package/ts_build/src/types.d.ts +7 -1
- package/ts_build/src/types.js +4 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/worker.js +12 -1
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/tests/clients/AIClient.test.d.ts +1 -0
- package/ts_build/tests/clients/AIClient.test.js +377 -0
- package/ts_build/tests/clients/AIClient.test.js.map +1 -0
- package/ts_build/tests/languagePlugin.test.js +217 -11
- package/ts_build/tests/languagePlugin.test.js.map +1 -1
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.d.ts +1 -0
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js +315 -0
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js.map +1 -0
- package/ts_build/tests/manual/agent-events/run-test.d.ts +2 -0
- package/ts_build/tests/manual/agent-events/run-test.js +148 -0
- package/ts_build/tests/manual/agent-events/run-test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/figma.test.js +47 -0
- package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +100 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/patching.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/patching.test.js +119 -0
- package/ts_build/tests/manual/file-edits/patching.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +277 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +331 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js +286 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +1 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.js +351 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.js.map +1 -0
- package/ts_build/tests/processors/CustomVariables.test.d.ts +1 -0
- package/ts_build/tests/processors/CustomVariables.test.js +351 -0
- package/ts_build/tests/processors/CustomVariables.test.js.map +1 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +1 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js +382 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +1 -0
- package/ts_build/tests/processors/TokenCompressor.test.d.ts +1 -0
- package/ts_build/tests/processors/TokenCompressor.test.js +300 -0
- package/ts_build/tests/processors/TokenCompressor.test.js.map +1 -0
- package/ts_build/tests/processors/ToolResponseCache.test.d.ts +1 -0
- package/ts_build/tests/processors/ToolResponseCache.test.js +539 -0
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.d.ts +1 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.js +232 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.js.map +1 -0
- package/ts_build/tests/services/Tools.test.d.ts +1 -0
- package/ts_build/tests/services/Tools.test.js +1059 -0
- package/ts_build/tests/services/Tools.test.js.map +1 -0
- package/ts_build/tests/test.spec.js +110 -68
- package/ts_build/tests/test.spec.js.map +1 -1
- package/ts_build/tests/tree-sitter/editor.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/editor.test.js +85 -0
- package/ts_build/tests/tree-sitter/editor.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/invalid.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/invalid.test.js +198 -0
- package/ts_build/tests/tree-sitter/invalid.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.js +347 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js +35 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js +38 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.js +74 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js +302 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.js +116 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.js +302 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/sample-after.d.ts +11 -0
- package/ts_build/tests/tree-sitter/sample-after.js +44 -0
- package/ts_build/tests/tree-sitter/sample-after.js.map +1 -0
- package/ts_build/tests/tree-sitter/sample-before.d.ts +9 -0
- package/ts_build/tests/tree-sitter/sample-before.js +28 -0
- package/ts_build/tests/tree-sitter/sample-before.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.d.ts +2 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.js +17 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.d.ts +10 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.d.ts +6 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.js +20 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.d.ts +7 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.js +14 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.js.map +1 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.js +185 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -0
- package/tsconfig.json +2 -1
- package/tests/languagePlugin.test.ts +0 -74
- /package/src/chat/modules/{index.js → index.ts} +0 -0
- /package/tests/{integration → manual/file-edits}/patching/input.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/output.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/patch.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/unseen.txt +0 -0
package/src/plugins/embedding.ts
CHANGED
|
@@ -7,22 +7,42 @@ import {
|
|
|
7
7
|
} from "../embeddings";
|
|
8
8
|
|
|
9
9
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
10
|
+
import { embed as embedFunction } from "../index";
|
|
10
11
|
|
|
11
12
|
export class EmbeddingPlugin extends PluginBase {
|
|
12
13
|
static readonly meta: PluginMeta = {
|
|
13
14
|
key: "embeddings",
|
|
14
15
|
name: "Embedding Plugin",
|
|
15
|
-
requires: []
|
|
16
|
+
requires: [],
|
|
16
17
|
};
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
meta = EmbeddingPlugin.meta;
|
|
20
|
+
|
|
21
|
+
constructor(context) {
|
|
22
|
+
super(context);
|
|
23
|
+
|
|
24
|
+
// Subscribe to file:post-edit events
|
|
25
|
+
this.context.Events.on("file:post-edit", this.handleFilePostEdit.bind(this));
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
async embed() {
|
|
23
29
|
return [];
|
|
24
30
|
}
|
|
25
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Handle file:post-edit events by triggering embedding
|
|
34
|
+
* @param payload The event payload containing filePath
|
|
35
|
+
* @returns Status message about embedding operation
|
|
36
|
+
*/
|
|
37
|
+
async handleFilePostEdit(payload: { filePath: string }): Promise<string> {
|
|
38
|
+
try {
|
|
39
|
+
await embedFunction();
|
|
40
|
+
return "Embedding completed successfully";
|
|
41
|
+
} catch (error) {
|
|
42
|
+
return `Embedding failed: ${error.message}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
26
46
|
async call(userPrompt: string): Promise<string> {
|
|
27
47
|
const count = 7;
|
|
28
48
|
const embeddings = await getConfiguredEmbeddings();
|
|
@@ -49,4 +69,4 @@ export class EmbeddingPlugin extends PluginBase {
|
|
|
49
69
|
return `EMBEDDING PLUGIN: Our knowledgebase contains this information which can be used to answer the question:
|
|
50
70
|
${JSON.stringify(context)}`;
|
|
51
71
|
}
|
|
52
|
-
}
|
|
72
|
+
}
|
package/src/plugins/figma.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Client } from "figma-js";
|
|
2
2
|
import qs from "qs"; // Assumed to be installed
|
|
3
3
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
4
|
+
import { PluginContext } from "./types";
|
|
4
5
|
import { Plugin } from "./types";
|
|
5
6
|
import { MinimalEmbedding } from "../types";
|
|
6
|
-
import { askGptVision } from "../ai";
|
|
7
7
|
|
|
8
8
|
interface Node {}
|
|
9
9
|
|
|
@@ -41,8 +41,10 @@ export class FigmaPlugin extends PluginBase implements Plugin {
|
|
|
41
41
|
requires: ["FIGMA_API_KEY"],
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
meta = FigmaPlugin.meta;
|
|
45
|
+
|
|
46
|
+
constructor(context: PluginContext = {}) {
|
|
47
|
+
super(context);
|
|
46
48
|
if (!this.isEnabled()) return;
|
|
47
49
|
|
|
48
50
|
this.figmaToken = process.env.FIGMA_API_KEY;
|
|
@@ -138,6 +140,8 @@ export class FigmaPlugin extends PluginBase implements Plugin {
|
|
|
138
140
|
if (!data.images.hasOwnProperty(nodeId)) continue;
|
|
139
141
|
|
|
140
142
|
const imageUrl = data.images[nodeId];
|
|
143
|
+
// Lazy import to break circular dependency
|
|
144
|
+
const { askGptVision } = await import("../ai");
|
|
141
145
|
const imageDescription = await askGptVision(
|
|
142
146
|
imageUrl,
|
|
143
147
|
`Describe the image with relavant information for this user question: ${userPrompt}`
|
package/src/plugins/github.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Octokit } from "@octokit/rest";
|
|
2
2
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
3
|
+
import { PluginContext } from "./types";
|
|
3
4
|
import { parseHunks, hunksToPatch } from "../agents/tools/patch";
|
|
4
5
|
import { MinimalEmbedding } from "../types";
|
|
5
6
|
|
|
@@ -10,10 +11,11 @@ export class GitHubPlugin extends PluginBase {
|
|
|
10
11
|
requires: ["GITHUB_TOKEN"],
|
|
11
12
|
};
|
|
12
13
|
|
|
14
|
+
meta = GitHubPlugin.meta;
|
|
13
15
|
octokit: Octokit;
|
|
14
16
|
|
|
15
|
-
constructor() {
|
|
16
|
-
super(
|
|
17
|
+
constructor(context: PluginContext) {
|
|
18
|
+
super(context);
|
|
17
19
|
|
|
18
20
|
const key = process.env.GITHUB_TOKEN;
|
|
19
21
|
if (key && this.isEnabled()) {
|
package/src/plugins/jira.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import JiraClient from "jira-client";
|
|
2
2
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
3
|
+
import { PluginContext } from "./types";
|
|
3
4
|
import { MinimalEmbedding } from "../types";
|
|
4
5
|
|
|
5
6
|
export class JiraPlugin extends PluginBase {
|
|
@@ -9,10 +10,11 @@ export class JiraPlugin extends PluginBase {
|
|
|
9
10
|
requires: ["JIRA_HOST", "JIRA_USER", "JIRA_PASSWORD"]
|
|
10
11
|
};
|
|
11
12
|
|
|
13
|
+
meta = JiraPlugin.meta;
|
|
12
14
|
jiraClient: JiraClient;
|
|
13
15
|
|
|
14
|
-
constructor() {
|
|
15
|
-
super(
|
|
16
|
+
constructor(context: PluginContext) {
|
|
17
|
+
super(context);
|
|
16
18
|
|
|
17
19
|
if (!this.isEnabled()) return;
|
|
18
20
|
this.jiraClient = new JiraClient({
|
package/src/plugins/language.ts
CHANGED
|
@@ -1,44 +1,67 @@
|
|
|
1
1
|
import { readFile, fileExists, fileStat } from "../utils";
|
|
2
|
+
import { minimatch } from "minimatch";
|
|
3
|
+
import { EventService } from "../services/EventService";
|
|
2
4
|
import { Language } from "../types";
|
|
3
5
|
import { getConfig, getLanguageConfig } from "../config";
|
|
4
6
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
5
|
-
import { Plugin } from "./types";
|
|
7
|
+
import { Plugin, PluginContext } from "./types";
|
|
6
8
|
import { GitHubPlugin } from "./github";
|
|
7
9
|
import { AsanaPlugin } from "./asana";
|
|
8
10
|
import { JiraPlugin } from "./jira";
|
|
9
11
|
import { LinearPlugin } from "./linear";
|
|
10
12
|
import { PluginService } from "./plugins";
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Language Plugin with event-driven context loading
|
|
16
|
+
*/
|
|
12
17
|
export class LanguagePlugin extends PluginBase implements Plugin {
|
|
13
18
|
static readonly meta: PluginMeta = {
|
|
14
19
|
key: "language",
|
|
15
20
|
name: "Language Plugin",
|
|
16
|
-
requires: []
|
|
21
|
+
requires: [],
|
|
17
22
|
};
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
meta = LanguagePlugin.meta;
|
|
25
|
+
private eventService: EventService;
|
|
26
|
+
|
|
27
|
+
constructor(context: PluginContext) {
|
|
28
|
+
super(context);
|
|
29
|
+
this.eventService = context.Events;
|
|
30
|
+
this.setupEventHandlers();
|
|
21
31
|
}
|
|
22
32
|
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Register event handlers based on language configuration
|
|
35
|
+
*/
|
|
36
|
+
private async setupEventHandlers() {
|
|
37
|
+
try {
|
|
38
|
+
const languageConfig = await getLanguageConfig();
|
|
39
|
+
|
|
40
|
+
// Collect all unique events from all language terms
|
|
41
|
+
const allEvents = new Set<string>();
|
|
42
|
+
Object.values(languageConfig).forEach((termConfig) => {
|
|
43
|
+
if (termConfig.events) {
|
|
44
|
+
termConfig.events.forEach((event) => allEvents.add(event));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Register handlers for each event
|
|
49
|
+
allEvents.forEach((eventType) => {
|
|
50
|
+
this.eventService.on(eventType, async (eventData) => {
|
|
51
|
+
await this.handleFileEvent(eventType, eventData);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error("LANGUAGE PLUGIN: Error setting up event handlers:", error);
|
|
56
|
+
}
|
|
25
57
|
}
|
|
26
58
|
|
|
27
|
-
|
|
28
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Resolve sources for given terms and return loaded contexts
|
|
61
|
+
*/
|
|
62
|
+
private async resolveSources(matchingTerms: string[]): Promise<any[]> {
|
|
29
63
|
const languageConfig = await getLanguageConfig();
|
|
30
|
-
|
|
31
|
-
const terms = Object.keys(languageConfig);
|
|
32
|
-
|
|
33
|
-
// Find all matching terms in the userPrompt
|
|
34
|
-
const matchingTerms = terms.filter((term) =>
|
|
35
|
-
term
|
|
36
|
-
.split(",")
|
|
37
|
-
.some((w) => userPrompt.toLowerCase().includes(w.toLowerCase()))
|
|
38
|
-
);
|
|
39
|
-
if (matchingTerms.length > 0) {
|
|
40
|
-
console.log("LANGUAGE PLUGIN: Found matching terms", matchingTerms);
|
|
41
|
-
}
|
|
64
|
+
const config = await getConfig();
|
|
42
65
|
|
|
43
66
|
const sources = matchingTerms.flatMap(
|
|
44
67
|
(term) => languageConfig[term].sources
|
|
@@ -60,7 +83,6 @@ export class LanguagePlugin extends PluginBase implements Plugin {
|
|
|
60
83
|
return { filePath, content: `File ${filePath} does not exist` };
|
|
61
84
|
}
|
|
62
85
|
const content = (await readFile(filePath, "utf8")).toString();
|
|
63
|
-
console.log("LANGUAGE PLUGIN: Read file", filePath);
|
|
64
86
|
return { filePath, content };
|
|
65
87
|
})
|
|
66
88
|
);
|
|
@@ -73,7 +95,7 @@ export class LanguagePlugin extends PluginBase implements Plugin {
|
|
|
73
95
|
.map((s) => s.data);
|
|
74
96
|
contexts.push(...textContexts);
|
|
75
97
|
|
|
76
|
-
const plugins = this.
|
|
98
|
+
const plugins = this.context.Plugins.listPlugins();
|
|
77
99
|
for (const plugin of plugins) {
|
|
78
100
|
if (config.plugins.includes(plugin)) {
|
|
79
101
|
const matchingSources = sources.filter((s) => s.kind === plugin);
|
|
@@ -85,13 +107,101 @@ export class LanguagePlugin extends PluginBase implements Plugin {
|
|
|
85
107
|
.map((s) => s.data)
|
|
86
108
|
.flat()
|
|
87
109
|
.join("\n");
|
|
88
|
-
|
|
89
|
-
const pluginContext = await this.pluginService.call(plugin, data);
|
|
110
|
+
const pluginContext = await this.context.Plugins.call(plugin, data);
|
|
90
111
|
|
|
91
112
|
contexts.push(...pluginContext);
|
|
92
113
|
}
|
|
93
114
|
}
|
|
94
115
|
|
|
116
|
+
return contexts;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Handle file operation events and emit agent messages when patterns match
|
|
121
|
+
*/
|
|
122
|
+
private async handleFileEvent(eventType: string, eventData: any) {
|
|
123
|
+
try {
|
|
124
|
+
const languageConfig = await getLanguageConfig();
|
|
125
|
+
const filePath = eventData?.filePath || eventData?.path;
|
|
126
|
+
const fileContent = await readFile(filePath, "utf8");
|
|
127
|
+
|
|
128
|
+
if (!filePath) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Find matching language terms based on file patterns
|
|
133
|
+
const matchingFileTerms = Object.entries(languageConfig)
|
|
134
|
+
.filter(([term, config]) => {
|
|
135
|
+
// Check if this event type is configured for this term
|
|
136
|
+
if (!config.events || !config.events.includes(eventType)) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Check if file path matches any of the term patterns
|
|
141
|
+
// Or if the file content includes any of the term patterns
|
|
142
|
+
const patterns = term.split(",").map((p) => p.trim());
|
|
143
|
+
const matches = patterns.some(
|
|
144
|
+
(pattern) =>
|
|
145
|
+
minimatch(filePath, pattern) ||
|
|
146
|
+
fileContent.toString().toLowerCase().includes(pattern.toLowerCase())
|
|
147
|
+
);
|
|
148
|
+
return matches;
|
|
149
|
+
})
|
|
150
|
+
.map(([term]) => term);
|
|
151
|
+
|
|
152
|
+
if (matchingFileTerms.length > 0) {
|
|
153
|
+
// Resolve sources for matching terms
|
|
154
|
+
const resolvedSources = await this.resolveSources(matchingFileTerms);
|
|
155
|
+
|
|
156
|
+
// Emit agent message event with resolved context
|
|
157
|
+
this.eventService.emit(
|
|
158
|
+
"agent:msg",
|
|
159
|
+
JSON.stringify({
|
|
160
|
+
type: "language_context_trigger",
|
|
161
|
+
filePath,
|
|
162
|
+
matchingTerms: matchingFileTerms,
|
|
163
|
+
eventType,
|
|
164
|
+
resolvedSources,
|
|
165
|
+
contextMessage: `LANGUAGE PLUGIN: File event ${eventType} on ${filePath} triggered contextual expansions for terms: ${matchingFileTerms.join(
|
|
166
|
+
", "
|
|
167
|
+
)}.
|
|
168
|
+
Expanded context: ${JSON.stringify(resolvedSources)}
|
|
169
|
+
These terms are directly related to the file operation so be sure to contextualize your response to this information.`,
|
|
170
|
+
})
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.error("LANGUAGE PLUGIN: Error handling file event:", error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async embed(userPrompt: string) {
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async call(userPrompt: string) {
|
|
183
|
+
// Get language configuration
|
|
184
|
+
const languageConfig = await getLanguageConfig();
|
|
185
|
+
const terms = Object.keys(languageConfig);
|
|
186
|
+
|
|
187
|
+
// Find all matching terms in the userPrompt using glob patterns
|
|
188
|
+
const matchingTerms = terms.filter((term) =>
|
|
189
|
+
term.split(",").some((pattern) => {
|
|
190
|
+
const trimmedPattern = pattern.trim();
|
|
191
|
+
// Use minimatch for file patterns, fallback to string contains for non-glob patterns
|
|
192
|
+
return trimmedPattern.includes("*")
|
|
193
|
+
? minimatch(userPrompt, trimmedPattern)
|
|
194
|
+
: userPrompt.toLowerCase().includes(trimmedPattern.toLowerCase());
|
|
195
|
+
})
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
if (matchingTerms.length === 0) {
|
|
199
|
+
return "LANGUAGE PLUGIN: No matching terms found";
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Use the extracted resolveSources method
|
|
203
|
+
const contexts = await this.resolveSources(matchingTerms);
|
|
204
|
+
|
|
95
205
|
if (!matchingTerms || !matchingTerms.length) {
|
|
96
206
|
return "LANGUAGE PLUGIN: No matching terms found";
|
|
97
207
|
}
|
|
@@ -104,6 +214,3 @@ export class LanguagePlugin extends PluginBase implements Plugin {
|
|
|
104
214
|
`;
|
|
105
215
|
}
|
|
106
216
|
}
|
|
107
|
-
|
|
108
|
-
// Since this uses other plugins, it needs to be registered
|
|
109
|
-
// Plugins.registerPlugin("language", new LanguagePlugin());
|
package/src/plugins/linear.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LinearClient } from "@linear/sdk";
|
|
2
2
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
3
|
+
import { PluginContext } from "./types";
|
|
3
4
|
import { MinimalEmbedding } from "../types";
|
|
4
5
|
|
|
5
6
|
export class LinearPlugin extends PluginBase {
|
|
@@ -9,10 +10,11 @@ export class LinearPlugin extends PluginBase {
|
|
|
9
10
|
requires: ["LINEAR_API_KEY"],
|
|
10
11
|
};
|
|
11
12
|
|
|
13
|
+
meta = LinearPlugin.meta;
|
|
12
14
|
linearClient: LinearClient;
|
|
13
15
|
|
|
14
|
-
constructor() {
|
|
15
|
-
super(
|
|
16
|
+
constructor(context: PluginContext) {
|
|
17
|
+
super(context);
|
|
16
18
|
|
|
17
19
|
if (!this.isEnabled()) return;
|
|
18
20
|
this.linearClient = new LinearClient({
|
package/src/plugins/notion.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Client } from "@notionhq/client";
|
|
2
2
|
import { PluginBase, PluginMeta } from "./PluginBase";
|
|
3
|
+
import { PluginContext } from "./types";
|
|
3
4
|
import { PageObjectResponse } from "@notionhq/client/build/src/api-endpoints";
|
|
4
5
|
import { Embeddable, MinimalEmbedding } from "../types";
|
|
5
6
|
|
|
@@ -10,10 +11,11 @@ export class NotionPlugin extends PluginBase {
|
|
|
10
11
|
requires: ["NOTION_TOKEN"]
|
|
11
12
|
};
|
|
12
13
|
|
|
14
|
+
meta = NotionPlugin.meta;
|
|
13
15
|
notionClient: Client;
|
|
14
16
|
|
|
15
|
-
constructor() {
|
|
16
|
-
super(
|
|
17
|
+
constructor(context: PluginContext) {
|
|
18
|
+
super(context);
|
|
17
19
|
|
|
18
20
|
if (!this.isEnabled()) return;
|
|
19
21
|
this.notionClient = new Client({
|
package/src/plugins/plugins.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Plugin } from "./types";
|
|
1
|
+
import { Plugin, PluginContext } from "./types";
|
|
3
2
|
import { VimPlugin } from "./vim";
|
|
3
|
+
import { LinterPlugin } from "./LinterPlugin";
|
|
4
4
|
import { LanguagePlugin } from "./language";
|
|
5
5
|
import { EmbeddingPlugin } from "./embedding";
|
|
6
6
|
import { GitHubPlugin } from "./github";
|
|
@@ -11,23 +11,28 @@ import { NotionPlugin } from "./notion";
|
|
|
11
11
|
import { DownloaderPlugin } from "./downloader/plugin";
|
|
12
12
|
import { FigmaPlugin } from "./figma";
|
|
13
13
|
import { UrlPlugin } from "./url";
|
|
14
|
+
import { GitPlugin } from "./GitPlugin";
|
|
14
15
|
|
|
15
16
|
export class PluginService {
|
|
16
17
|
private pluginMap = new Map<string, Plugin>();
|
|
17
18
|
|
|
18
|
-
constructor() {
|
|
19
|
+
constructor(context: PluginContext) {
|
|
20
|
+
context.Plugins = this;
|
|
21
|
+
|
|
19
22
|
// Register migrated PluginBase plugins
|
|
20
|
-
this.pluginMap.set("embeddings", new EmbeddingPlugin());
|
|
21
|
-
this.pluginMap.set("vim", new VimPlugin());
|
|
22
|
-
this.pluginMap.set("
|
|
23
|
-
this.pluginMap.set("
|
|
24
|
-
this.pluginMap.set("
|
|
25
|
-
this.pluginMap.set("
|
|
26
|
-
this.pluginMap.set("
|
|
27
|
-
this.pluginMap.set("
|
|
28
|
-
this.pluginMap.set("
|
|
29
|
-
this.pluginMap.set("
|
|
30
|
-
this.pluginMap.set("
|
|
23
|
+
this.pluginMap.set("embeddings", new EmbeddingPlugin(context));
|
|
24
|
+
this.pluginMap.set("vim", new VimPlugin(context));
|
|
25
|
+
this.pluginMap.set("linter", new LinterPlugin(context));
|
|
26
|
+
this.pluginMap.set("github", new GitHubPlugin(context));
|
|
27
|
+
this.pluginMap.set("asana", new AsanaPlugin(context));
|
|
28
|
+
this.pluginMap.set("linear", new LinearPlugin(context));
|
|
29
|
+
this.pluginMap.set("jira", new JiraPlugin(context));
|
|
30
|
+
this.pluginMap.set("notion", new NotionPlugin(context));
|
|
31
|
+
this.pluginMap.set("download", new DownloaderPlugin(context));
|
|
32
|
+
this.pluginMap.set("figma", new FigmaPlugin(context));
|
|
33
|
+
this.pluginMap.set("language", new LanguagePlugin(context));
|
|
34
|
+
this.pluginMap.set("url", new UrlPlugin(context));
|
|
35
|
+
this.pluginMap.set("git", new GitPlugin(context));
|
|
31
36
|
|
|
32
37
|
// Keep legacy plugins for backward compatibility
|
|
33
38
|
// These will be removed once all consumers are updated
|
|
@@ -78,6 +83,14 @@ export class PluginService {
|
|
|
78
83
|
this.pluginMap.set(name, plugin);
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
getPlugin(name: string): Plugin | undefined {
|
|
87
|
+
return this.pluginMap.get(name);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
getPlugins(): Plugin[] {
|
|
91
|
+
return Array.from(this.pluginMap.values());
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
async callMany(plugins: string[], userInput?: string) {
|
|
82
95
|
if (!plugins || plugins.length === 0) {
|
|
83
96
|
return "";
|
|
@@ -121,5 +134,3 @@ export class PluginService {
|
|
|
121
134
|
return newPlugin.embed ? newPlugin.embed(userInput) : [];
|
|
122
135
|
}
|
|
123
136
|
}
|
|
124
|
-
|
|
125
|
-
export const Plugins = new PluginService();
|