@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.
Files changed (84) hide show
  1. package/README.md +45 -0
  2. package/package.json +8 -2
  3. package/scripts/publish.sh +86 -0
  4. package/src/agents/base/base.ts +10 -0
  5. package/src/agents/tools/execCommand.ts +49 -6
  6. package/src/chat/CliChatService.ts +7 -1
  7. package/src/chat/modules/AgentModule.ts +55 -30
  8. package/src/chat/modules/SessionsModule.ts +7 -2
  9. package/src/chat/renderer/CompactRenderer.ts +20 -0
  10. package/src/chat/renderer/ConsoleRenderer.ts +19 -0
  11. package/src/chat/renderer/FancyRenderer.ts +19 -0
  12. package/src/chat/renderer/types.ts +11 -0
  13. package/src/cli.ts +7 -2
  14. package/src/clients/anthropic.ts +19 -16
  15. package/src/clients/types.ts +23 -4
  16. package/src/cloudWorker.ts +75 -1
  17. package/src/index.ts +17 -0
  18. package/src/plugins/embedding.ts +11 -6
  19. package/src/plugins/vim.ts +5 -16
  20. package/src/processors/JsonCompressor.ts +3 -3
  21. package/src/services/KnowhowClient.ts +22 -2
  22. package/src/services/S3.ts +10 -0
  23. package/src/services/modules/types.ts +2 -0
  24. package/src/worker.ts +65 -1
  25. package/src/workers/tools/index.ts +2 -0
  26. package/src/workers/tools/reloadConfig.ts +84 -0
  27. package/tests/services/WorkerReloadConfig.test.ts +141 -0
  28. package/ts_build/package.json +8 -2
  29. package/ts_build/src/agents/base/base.js +11 -0
  30. package/ts_build/src/agents/base/base.js.map +1 -1
  31. package/ts_build/src/agents/tools/execCommand.d.ts +1 -1
  32. package/ts_build/src/agents/tools/execCommand.js +39 -5
  33. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  34. package/ts_build/src/chat/CliChatService.js +10 -1
  35. package/ts_build/src/chat/CliChatService.js.map +1 -1
  36. package/ts_build/src/chat/modules/AgentModule.d.ts +1 -1
  37. package/ts_build/src/chat/modules/AgentModule.js +39 -19
  38. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  39. package/ts_build/src/chat/modules/SessionsModule.js +7 -2
  40. package/ts_build/src/chat/modules/SessionsModule.js.map +1 -1
  41. package/ts_build/src/chat/renderer/CompactRenderer.d.ts +4 -0
  42. package/ts_build/src/chat/renderer/CompactRenderer.js +16 -0
  43. package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -1
  44. package/ts_build/src/chat/renderer/ConsoleRenderer.d.ts +4 -0
  45. package/ts_build/src/chat/renderer/ConsoleRenderer.js +16 -0
  46. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  47. package/ts_build/src/chat/renderer/FancyRenderer.d.ts +4 -0
  48. package/ts_build/src/chat/renderer/FancyRenderer.js +16 -0
  49. package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -1
  50. package/ts_build/src/chat/renderer/types.d.ts +2 -0
  51. package/ts_build/src/cli.js +8 -2
  52. package/ts_build/src/cli.js.map +1 -1
  53. package/ts_build/src/clients/anthropic.d.ts +5 -5
  54. package/ts_build/src/clients/anthropic.js +19 -16
  55. package/ts_build/src/clients/anthropic.js.map +1 -1
  56. package/ts_build/src/clients/types.d.ts +5 -2
  57. package/ts_build/src/cloudWorker.d.ts +9 -0
  58. package/ts_build/src/cloudWorker.js +36 -0
  59. package/ts_build/src/cloudWorker.js.map +1 -1
  60. package/ts_build/src/index.js +14 -0
  61. package/ts_build/src/index.js.map +1 -1
  62. package/ts_build/src/plugins/embedding.js +4 -3
  63. package/ts_build/src/plugins/embedding.js.map +1 -1
  64. package/ts_build/src/plugins/vim.js +3 -9
  65. package/ts_build/src/plugins/vim.js.map +1 -1
  66. package/ts_build/src/processors/JsonCompressor.js +3 -3
  67. package/ts_build/src/processors/JsonCompressor.js.map +1 -1
  68. package/ts_build/src/services/KnowhowClient.d.ts +12 -0
  69. package/ts_build/src/services/KnowhowClient.js +11 -0
  70. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  71. package/ts_build/src/services/S3.js +7 -0
  72. package/ts_build/src/services/S3.js.map +1 -1
  73. package/ts_build/src/services/modules/types.d.ts +2 -0
  74. package/ts_build/src/worker.js +38 -0
  75. package/ts_build/src/worker.js.map +1 -1
  76. package/ts_build/src/workers/tools/index.d.ts +2 -0
  77. package/ts_build/src/workers/tools/index.js +4 -1
  78. package/ts_build/src/workers/tools/index.js.map +1 -1
  79. package/ts_build/src/workers/tools/reloadConfig.d.ts +14 -0
  80. package/ts_build/src/workers/tools/reloadConfig.js +48 -0
  81. package/ts_build/src/workers/tools/reloadConfig.js.map +1 -0
  82. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +1 -0
  83. package/ts_build/tests/services/WorkerReloadConfig.test.js +86 -0
  84. 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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"}