@tyvm/knowhow 0.0.107 → 0.0.108-dev.879609c
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/README.md +45 -0
- package/package.json +8 -2
- package/scripts/publish.sh +86 -0
- package/src/agents/base/base.ts +10 -0
- package/src/agents/tools/execCommand.ts +49 -6
- package/src/chat/CliChatService.ts +7 -1
- package/src/chat/modules/AgentModule.ts +55 -30
- package/src/chat/modules/SessionsModule.ts +7 -2
- package/src/chat/renderer/CompactRenderer.ts +20 -0
- package/src/chat/renderer/ConsoleRenderer.ts +19 -0
- package/src/chat/renderer/FancyRenderer.ts +19 -0
- package/src/chat/renderer/types.ts +11 -0
- package/src/cli.ts +7 -2
- package/src/clients/anthropic.ts +19 -16
- package/src/clients/types.ts +23 -4
- package/src/cloudWorker.ts +75 -1
- package/src/index.ts +17 -0
- package/src/plugins/embedding.ts +11 -6
- package/src/plugins/vim.ts +5 -16
- package/src/processors/JsonCompressor.ts +3 -3
- package/src/services/KnowhowClient.ts +22 -2
- package/src/services/S3.ts +10 -0
- package/src/services/modules/types.ts +2 -0
- package/src/worker.ts +65 -1
- package/src/workers/tools/index.ts +2 -0
- package/src/workers/tools/reloadConfig.ts +84 -0
- package/tests/services/WorkerReloadConfig.test.ts +141 -0
- package/ts_build/package.json +8 -2
- package/ts_build/src/agents/base/base.js +11 -0
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +1 -1
- package/ts_build/src/agents/tools/execCommand.js +39 -5
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/chat/CliChatService.js +10 -1
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.d.ts +1 -1
- package/ts_build/src/chat/modules/AgentModule.js +39 -19
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/modules/SessionsModule.js +7 -2
- package/ts_build/src/chat/modules/SessionsModule.js.map +1 -1
- package/ts_build/src/chat/renderer/CompactRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/CompactRenderer.js +16 -0
- package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/ConsoleRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/ConsoleRenderer.js +16 -0
- package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/FancyRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/FancyRenderer.js +16 -0
- package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/types.d.ts +2 -0
- package/ts_build/src/cli.js +8 -2
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +5 -5
- package/ts_build/src/clients/anthropic.js +19 -16
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +5 -2
- package/ts_build/src/cloudWorker.d.ts +9 -0
- package/ts_build/src/cloudWorker.js +36 -0
- package/ts_build/src/cloudWorker.js.map +1 -1
- package/ts_build/src/index.js +14 -0
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/plugins/embedding.js +4 -3
- package/ts_build/src/plugins/embedding.js.map +1 -1
- package/ts_build/src/plugins/vim.js +3 -9
- package/ts_build/src/plugins/vim.js.map +1 -1
- package/ts_build/src/processors/JsonCompressor.js +3 -3
- package/ts_build/src/processors/JsonCompressor.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.d.ts +12 -0
- package/ts_build/src/services/KnowhowClient.js +11 -0
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/S3.js +7 -0
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/modules/types.d.ts +2 -0
- package/ts_build/src/worker.js +38 -0
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/src/workers/tools/index.d.ts +2 -0
- package/ts_build/src/workers/tools/index.js +4 -1
- package/ts_build/src/workers/tools/index.js.map +1 -1
- package/ts_build/src/workers/tools/reloadConfig.d.ts +14 -0
- package/ts_build/src/workers/tools/reloadConfig.js +48 -0
- package/ts_build/src/workers/tools/reloadConfig.js.map +1 -0
- package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +1 -0
- package/ts_build/tests/services/WorkerReloadConfig.test.js +86 -0
- package/ts_build/tests/services/WorkerReloadConfig.test.js.map +1 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Mcp_1 = require("../../src/services/Mcp");
|
|
4
|
+
const Tools_1 = require("../../src/services/Tools");
|
|
5
|
+
async function simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef) {
|
|
6
|
+
const freshConfig = await getConfig();
|
|
7
|
+
await Mcp.closeAll();
|
|
8
|
+
await Mcp.connectToConfigured(Tools);
|
|
9
|
+
const allowedToolNames = freshConfig.worker?.allowedTools ?? Tools.getToolNames();
|
|
10
|
+
toolsToUseRef.value = Tools.getToolsByNames(allowedToolNames);
|
|
11
|
+
mcpServer.withTools(toolsToUseRef.value);
|
|
12
|
+
}
|
|
13
|
+
describe("Worker reloadConfig handler", () => {
|
|
14
|
+
let Mcp;
|
|
15
|
+
let Tools;
|
|
16
|
+
let mcpServer;
|
|
17
|
+
let toolsToUseRef;
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
Mcp = new Mcp_1.McpService();
|
|
20
|
+
Tools = new Tools_1.ToolsService();
|
|
21
|
+
mcpServer = { withTools: jest.fn() };
|
|
22
|
+
toolsToUseRef = { value: [] };
|
|
23
|
+
jest.spyOn(Mcp, "closeAll").mockResolvedValue(undefined);
|
|
24
|
+
jest.spyOn(Mcp, "connectToConfigured").mockResolvedValue(undefined);
|
|
25
|
+
});
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
jest.restoreAllMocks();
|
|
28
|
+
});
|
|
29
|
+
it("should call closeAll() to tear down existing MCP connections", async () => {
|
|
30
|
+
const getConfig = jest
|
|
31
|
+
.fn()
|
|
32
|
+
.mockResolvedValue({ worker: { allowedTools: [] } });
|
|
33
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
34
|
+
expect(Mcp.closeAll).toHaveBeenCalledTimes(1);
|
|
35
|
+
});
|
|
36
|
+
it("should call connectToConfigured() to reconnect MCPs from fresh config", async () => {
|
|
37
|
+
const getConfig = jest
|
|
38
|
+
.fn()
|
|
39
|
+
.mockResolvedValue({ worker: { allowedTools: [] } });
|
|
40
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
41
|
+
expect(Mcp.connectToConfigured).toHaveBeenCalledWith(Tools);
|
|
42
|
+
});
|
|
43
|
+
it("should rebuild the tool list from allowedTools in fresh config", async () => {
|
|
44
|
+
const toolsByNamesSpy = jest
|
|
45
|
+
.spyOn(Tools, "getToolsByNames")
|
|
46
|
+
.mockReturnValue([{ function: { name: "execCommand" } }]);
|
|
47
|
+
const getConfig = jest
|
|
48
|
+
.fn()
|
|
49
|
+
.mockResolvedValue({ worker: { allowedTools: ["execCommand"] } });
|
|
50
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
51
|
+
expect(toolsByNamesSpy).toHaveBeenCalledWith(["execCommand"]);
|
|
52
|
+
expect(toolsToUseRef.value).toHaveLength(1);
|
|
53
|
+
});
|
|
54
|
+
it("should fall back to all tool names when allowedTools is not set", async () => {
|
|
55
|
+
const allNames = ["execCommand", "readFile", "writeFileChunk"];
|
|
56
|
+
jest.spyOn(Tools, "getToolNames").mockReturnValue(allNames);
|
|
57
|
+
const toolsByNamesSpy = jest
|
|
58
|
+
.spyOn(Tools, "getToolsByNames")
|
|
59
|
+
.mockReturnValue([]);
|
|
60
|
+
const getConfig = jest.fn().mockResolvedValue({});
|
|
61
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
62
|
+
expect(toolsByNamesSpy).toHaveBeenCalledWith(allNames);
|
|
63
|
+
});
|
|
64
|
+
it("should call mcpServer.withTools() with the rebuilt tool list", async () => {
|
|
65
|
+
const fakeTools = [{ function: { name: "readFile" } }];
|
|
66
|
+
jest.spyOn(Tools, "getToolsByNames").mockReturnValue(fakeTools);
|
|
67
|
+
const getConfig = jest
|
|
68
|
+
.fn()
|
|
69
|
+
.mockResolvedValue({ worker: { allowedTools: ["readFile"] } });
|
|
70
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
71
|
+
expect(mcpServer.withTools).toHaveBeenCalledWith(fakeTools);
|
|
72
|
+
});
|
|
73
|
+
it("should re-read the config on every reload (not use stale config)", async () => {
|
|
74
|
+
const getConfig = jest
|
|
75
|
+
.fn()
|
|
76
|
+
.mockResolvedValueOnce({ worker: { allowedTools: ["execCommand"] } })
|
|
77
|
+
.mockResolvedValueOnce({ worker: { allowedTools: ["readFile", "writeFileChunk"] } });
|
|
78
|
+
jest.spyOn(Tools, "getToolsByNames").mockReturnValue([]);
|
|
79
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
80
|
+
await simulateReloadConfig(Mcp, Tools, mcpServer, getConfig, toolsToUseRef);
|
|
81
|
+
expect(getConfig).toHaveBeenCalledTimes(2);
|
|
82
|
+
expect(Mcp.closeAll).toHaveBeenCalledTimes(2);
|
|
83
|
+
expect(Mcp.connectToConfigured).toHaveBeenCalledTimes(2);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=WorkerReloadConfig.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerReloadConfig.test.js","sourceRoot":"","sources":["../../../tests/services/WorkerReloadConfig.test.ts"],"names":[],"mappings":"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"}
|