@tyvm/knowhow 0.0.82 → 0.0.84

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 (210) hide show
  1. package/package.json +4 -2
  2. package/src/agents/base/base.ts +72 -62
  3. package/src/agents/index.ts +30 -14
  4. package/src/agents/tools/startAgentTask.ts +3 -1
  5. package/src/chat/CliChatService.ts +20 -4
  6. package/src/chat/modules/AgentModule.ts +399 -357
  7. package/src/chat/modules/CustomCommandsModule.ts +0 -1
  8. package/src/chat/modules/InternalChatModule.ts +18 -2
  9. package/src/chat/modules/RendererModule.ts +109 -0
  10. package/src/chat/modules/SessionsModule.ts +854 -0
  11. package/src/chat/modules/SetupModule.ts +6 -8
  12. package/src/chat/modules/index.ts +1 -0
  13. package/src/chat/renderer/CompactRenderer.ts +209 -0
  14. package/src/chat/renderer/ConsoleRenderer.ts +141 -0
  15. package/src/chat/renderer/FancyRenderer.ts +421 -0
  16. package/src/chat/renderer/index.ts +5 -0
  17. package/src/chat/renderer/loadRenderer.ts +314 -0
  18. package/src/chat/renderer/messagesToRenderEvents.ts +96 -0
  19. package/src/chat/renderer/types.ts +88 -0
  20. package/src/chat/types.ts +5 -0
  21. package/src/chat.ts +69 -5
  22. package/src/cli.ts +24 -5
  23. package/src/config.ts +15 -0
  24. package/src/plugins/AgentsMdPlugin.ts +1 -1
  25. package/src/plugins/GitPlugin.ts +20 -20
  26. package/src/plugins/PluginBase.ts +11 -0
  27. package/src/plugins/SkillsPlugin.ts +150 -0
  28. package/src/plugins/asana.ts +4 -4
  29. package/src/plugins/embedding.ts +3 -5
  30. package/src/plugins/exec.ts +3 -3
  31. package/src/plugins/figma.ts +3 -7
  32. package/src/plugins/github.ts +18 -29
  33. package/src/plugins/jira.ts +2 -2
  34. package/src/plugins/language.ts +4 -4
  35. package/src/plugins/linear.ts +4 -4
  36. package/src/plugins/notion.ts +6 -8
  37. package/src/plugins/plugins.ts +30 -4
  38. package/src/plugins/url.ts +2 -2
  39. package/src/plugins/vim.ts +4 -3
  40. package/src/services/AgentService.ts +17 -0
  41. package/src/services/AgentSyncFs.ts +3 -0
  42. package/src/services/EventService.ts +168 -27
  43. package/src/services/KnowhowClient.ts +1 -0
  44. package/src/services/SessionManager.ts +51 -1
  45. package/src/services/SyncedAgentWatcher.ts +397 -0
  46. package/src/services/SyncerService.ts +147 -0
  47. package/src/services/index.ts +2 -0
  48. package/src/services/modules/index.ts +14 -3
  49. package/src/types.ts +25 -0
  50. package/src/worker.ts +80 -2
  51. package/src/workers/auth/PasskeySetup.ts +185 -0
  52. package/src/workers/auth/WorkerPasskeyAuth.ts +190 -0
  53. package/src/workers/auth/types.ts +58 -0
  54. package/src/workers/tools/getChallenge.ts +33 -0
  55. package/src/workers/tools/index.ts +8 -0
  56. package/src/workers/tools/lock.ts +31 -0
  57. package/src/workers/tools/unlock.ts +116 -0
  58. package/tests/unit/modules/moduleLoading.test.ts +226 -0
  59. package/tests/unit/plugins/pluginLoading.test.ts +151 -0
  60. package/ts_build/package.json +4 -2
  61. package/ts_build/src/agents/base/base.d.ts +4 -3
  62. package/ts_build/src/agents/base/base.js +54 -30
  63. package/ts_build/src/agents/base/base.js.map +1 -1
  64. package/ts_build/src/agents/index.d.ts +3 -0
  65. package/ts_build/src/agents/index.js +21 -11
  66. package/ts_build/src/agents/index.js.map +1 -1
  67. package/ts_build/src/agents/tools/startAgentTask.js +2 -1
  68. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -1
  69. package/ts_build/src/chat/CliChatService.js +16 -5
  70. package/ts_build/src/chat/CliChatService.js.map +1 -1
  71. package/ts_build/src/chat/modules/AgentModule.d.ts +34 -17
  72. package/ts_build/src/chat/modules/AgentModule.js +248 -258
  73. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  74. package/ts_build/src/chat/modules/CustomCommandsModule.js.map +1 -1
  75. package/ts_build/src/chat/modules/InternalChatModule.d.ts +3 -0
  76. package/ts_build/src/chat/modules/InternalChatModule.js +16 -1
  77. package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -1
  78. package/ts_build/src/chat/modules/RendererModule.d.ts +16 -0
  79. package/ts_build/src/chat/modules/RendererModule.js +76 -0
  80. package/ts_build/src/chat/modules/RendererModule.js.map +1 -0
  81. package/ts_build/src/chat/modules/SessionsModule.d.ts +33 -0
  82. package/ts_build/src/chat/modules/SessionsModule.js +582 -0
  83. package/ts_build/src/chat/modules/SessionsModule.js.map +1 -0
  84. package/ts_build/src/chat/modules/SetupModule.d.ts +3 -3
  85. package/ts_build/src/chat/modules/SetupModule.js +4 -6
  86. package/ts_build/src/chat/modules/SetupModule.js.map +1 -1
  87. package/ts_build/src/chat/modules/index.d.ts +1 -0
  88. package/ts_build/src/chat/modules/index.js +3 -1
  89. package/ts_build/src/chat/modules/index.js.map +1 -1
  90. package/ts_build/src/chat/renderer/CompactRenderer.d.ts +23 -0
  91. package/ts_build/src/chat/renderer/CompactRenderer.js +167 -0
  92. package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -0
  93. package/ts_build/src/chat/renderer/ConsoleRenderer.d.ts +22 -0
  94. package/ts_build/src/chat/renderer/ConsoleRenderer.js +110 -0
  95. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -0
  96. package/ts_build/src/chat/renderer/FancyRenderer.d.ts +23 -0
  97. package/ts_build/src/chat/renderer/FancyRenderer.js +328 -0
  98. package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -0
  99. package/ts_build/src/chat/renderer/index.d.ts +5 -0
  100. package/ts_build/src/chat/renderer/index.js +29 -0
  101. package/ts_build/src/chat/renderer/index.js.map +1 -0
  102. package/ts_build/src/chat/renderer/loadRenderer.d.ts +4 -0
  103. package/ts_build/src/chat/renderer/loadRenderer.js +246 -0
  104. package/ts_build/src/chat/renderer/loadRenderer.js.map +1 -0
  105. package/ts_build/src/chat/renderer/messagesToRenderEvents.d.ts +15 -0
  106. package/ts_build/src/chat/renderer/messagesToRenderEvents.js +72 -0
  107. package/ts_build/src/chat/renderer/messagesToRenderEvents.js.map +1 -0
  108. package/ts_build/src/chat/renderer/types.d.ts +75 -0
  109. package/ts_build/src/chat/renderer/types.js +3 -0
  110. package/ts_build/src/chat/renderer/types.js.map +1 -0
  111. package/ts_build/src/chat/types.d.ts +5 -0
  112. package/ts_build/src/chat.js +46 -4
  113. package/ts_build/src/chat.js.map +1 -1
  114. package/ts_build/src/cli.js +18 -5
  115. package/ts_build/src/cli.js.map +1 -1
  116. package/ts_build/src/config.d.ts +1 -0
  117. package/ts_build/src/config.js +17 -1
  118. package/ts_build/src/config.js.map +1 -1
  119. package/ts_build/src/plugins/AgentsMdPlugin.js +1 -1
  120. package/ts_build/src/plugins/AgentsMdPlugin.js.map +1 -1
  121. package/ts_build/src/plugins/GitPlugin.js +20 -20
  122. package/ts_build/src/plugins/GitPlugin.js.map +1 -1
  123. package/ts_build/src/plugins/PluginBase.d.ts +1 -0
  124. package/ts_build/src/plugins/PluginBase.js +13 -0
  125. package/ts_build/src/plugins/PluginBase.js.map +1 -1
  126. package/ts_build/src/plugins/SkillsPlugin.d.ts +13 -0
  127. package/ts_build/src/plugins/SkillsPlugin.js +149 -0
  128. package/ts_build/src/plugins/SkillsPlugin.js.map +1 -0
  129. package/ts_build/src/plugins/asana.js +4 -4
  130. package/ts_build/src/plugins/asana.js.map +1 -1
  131. package/ts_build/src/plugins/embedding.js +3 -3
  132. package/ts_build/src/plugins/embedding.js.map +1 -1
  133. package/ts_build/src/plugins/exec.js +3 -3
  134. package/ts_build/src/plugins/exec.js.map +1 -1
  135. package/ts_build/src/plugins/figma.js +3 -3
  136. package/ts_build/src/plugins/figma.js.map +1 -1
  137. package/ts_build/src/plugins/github.js +18 -18
  138. package/ts_build/src/plugins/github.js.map +1 -1
  139. package/ts_build/src/plugins/jira.js +2 -2
  140. package/ts_build/src/plugins/jira.js.map +1 -1
  141. package/ts_build/src/plugins/language.js +4 -4
  142. package/ts_build/src/plugins/language.js.map +1 -1
  143. package/ts_build/src/plugins/linear.js +4 -4
  144. package/ts_build/src/plugins/linear.js.map +1 -1
  145. package/ts_build/src/plugins/notion.js +6 -6
  146. package/ts_build/src/plugins/notion.js.map +1 -1
  147. package/ts_build/src/plugins/plugins.d.ts +3 -0
  148. package/ts_build/src/plugins/plugins.js +19 -4
  149. package/ts_build/src/plugins/plugins.js.map +1 -1
  150. package/ts_build/src/plugins/url.js +2 -2
  151. package/ts_build/src/plugins/url.js.map +1 -1
  152. package/ts_build/src/plugins/vim.js +2 -2
  153. package/ts_build/src/plugins/vim.js.map +1 -1
  154. package/ts_build/src/services/AgentService.d.ts +3 -0
  155. package/ts_build/src/services/AgentService.js +7 -0
  156. package/ts_build/src/services/AgentService.js.map +1 -1
  157. package/ts_build/src/services/AgentSyncFs.d.ts +1 -0
  158. package/ts_build/src/services/AgentSyncFs.js +2 -0
  159. package/ts_build/src/services/AgentSyncFs.js.map +1 -1
  160. package/ts_build/src/services/EventService.d.ts +25 -2
  161. package/ts_build/src/services/EventService.js +92 -14
  162. package/ts_build/src/services/EventService.js.map +1 -1
  163. package/ts_build/src/services/KnowhowClient.d.ts +1 -0
  164. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  165. package/ts_build/src/services/SessionManager.d.ts +6 -0
  166. package/ts_build/src/services/SessionManager.js +39 -1
  167. package/ts_build/src/services/SessionManager.js.map +1 -1
  168. package/ts_build/src/services/SyncedAgentWatcher.d.ts +101 -0
  169. package/ts_build/src/services/SyncedAgentWatcher.js +312 -0
  170. package/ts_build/src/services/SyncedAgentWatcher.js.map +1 -0
  171. package/ts_build/src/services/SyncerService.d.ts +30 -0
  172. package/ts_build/src/services/SyncerService.js +72 -0
  173. package/ts_build/src/services/SyncerService.js.map +1 -0
  174. package/ts_build/src/services/index.d.ts +2 -0
  175. package/ts_build/src/services/index.js +2 -0
  176. package/ts_build/src/services/index.js.map +1 -1
  177. package/ts_build/src/services/modules/index.js +10 -2
  178. package/ts_build/src/services/modules/index.js.map +1 -1
  179. package/ts_build/src/types.d.ts +19 -0
  180. package/ts_build/src/types.js.map +1 -1
  181. package/ts_build/src/worker.d.ts +2 -0
  182. package/ts_build/src/worker.js +59 -4
  183. package/ts_build/src/worker.js.map +1 -1
  184. package/ts_build/src/workers/auth/PasskeySetup.d.ts +10 -0
  185. package/ts_build/src/workers/auth/PasskeySetup.js +131 -0
  186. package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -0
  187. package/ts_build/src/workers/auth/WorkerPasskeyAuth.d.ts +35 -0
  188. package/ts_build/src/workers/auth/WorkerPasskeyAuth.js +129 -0
  189. package/ts_build/src/workers/auth/WorkerPasskeyAuth.js.map +1 -0
  190. package/ts_build/src/workers/auth/types.d.ts +36 -0
  191. package/ts_build/src/workers/auth/types.js +3 -0
  192. package/ts_build/src/workers/auth/types.js.map +1 -0
  193. package/ts_build/src/workers/tools/getChallenge.d.ts +9 -0
  194. package/ts_build/src/workers/tools/getChallenge.js +27 -0
  195. package/ts_build/src/workers/tools/getChallenge.js.map +1 -0
  196. package/ts_build/src/workers/tools/index.d.ts +6 -0
  197. package/ts_build/src/workers/tools/index.js +10 -0
  198. package/ts_build/src/workers/tools/index.js.map +1 -1
  199. package/ts_build/src/workers/tools/lock.d.ts +9 -0
  200. package/ts_build/src/workers/tools/lock.js +27 -0
  201. package/ts_build/src/workers/tools/lock.js.map +1 -0
  202. package/ts_build/src/workers/tools/unlock.d.ts +18 -0
  203. package/ts_build/src/workers/tools/unlock.js +78 -0
  204. package/ts_build/src/workers/tools/unlock.js.map +1 -0
  205. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +1 -0
  206. package/ts_build/tests/unit/modules/moduleLoading.test.js +187 -0
  207. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -0
  208. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +1 -0
  209. package/ts_build/tests/unit/plugins/pluginLoading.test.js +123 -0
  210. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -0
@@ -1,7 +1,6 @@
1
1
  import { BaseChatModule } from "./BaseChatModule";
2
2
  import { ChatCommand, ChatService, CommandResult } from "../types";
3
3
  import { getLanguageConfig } from "../../config";
4
- import { services } from "../../services";
5
4
 
6
5
  /**
7
6
  * CustomCommandsModule - Loads `/command`-style keys from the language config
@@ -9,6 +9,8 @@ import { SystemModule } from "./SystemModule";
9
9
  import { SetupModule } from "./SetupModule";
10
10
  import { CustomCommandsModule } from "./CustomCommandsModule";
11
11
  import { ShellCommandModule } from "./ShellCommandModule";
12
+ import { RendererModule } from "./RendererModule";
13
+ import { SessionsModule } from "./SessionsModule";
12
14
 
13
15
  export class InternalChatModule implements ChatModule {
14
16
  private chatService?: CliChatService;
@@ -19,11 +21,19 @@ export class InternalChatModule implements ChatModule {
19
21
  private agentModule = new AgentModule();
20
22
  private askModule = new AskModule();
21
23
  private searchModule = new SearchModule();
24
+ private sessionsModule: SessionsModule;
22
25
  private voiceModule = new VoiceModule();
23
26
  private systemModule = new SystemModule();
24
- private setupModule = new SetupModule();
27
+ private setupModule: SetupModule;
25
28
  private customCommandsModule = new CustomCommandsModule();
26
29
  private shellCommandModule = new ShellCommandModule();
30
+ private rendererModule: RendererModule;
31
+
32
+ constructor() {
33
+ this.rendererModule = new RendererModule(this.agentModule);
34
+ this.setupModule = new SetupModule(this.agentModule);
35
+ this.sessionsModule = new SessionsModule(this.agentModule);
36
+ }
27
37
 
28
38
  async initialize(chatService: CliChatService): Promise<void> {
29
39
  this.chatService = chatService;
@@ -31,8 +41,10 @@ export class InternalChatModule implements ChatModule {
31
41
  // Register this module first so it gets called for input handling
32
42
  chatService.registerModule(this);
33
43
 
34
- // Initialize all sub-modules
44
+ // Initialize renderer first so context.renderer is set before other modules use it
45
+ await this.rendererModule.initialize(chatService);
35
46
  await this.agentModule.initialize(chatService);
47
+ await this.sessionsModule.initialize(chatService);
36
48
  await this.askModule.initialize(chatService);
37
49
  await this.searchModule.initialize(chatService);
38
50
  await this.voiceModule.initialize(chatService);
@@ -63,6 +75,7 @@ export class InternalChatModule implements ChatModule {
63
75
  getCommands(): ChatCommand[] {
64
76
  const commands: ChatCommand[] = [
65
77
  ...this.agentModule.getCommands(),
78
+ ...this.sessionsModule.getCommands(),
66
79
  ...this.askModule.getCommands(),
67
80
  ...this.searchModule.getCommands(),
68
81
  ...this.voiceModule.getCommands(),
@@ -70,6 +83,7 @@ export class InternalChatModule implements ChatModule {
70
83
  ...this.setupModule.getCommands(),
71
84
  ...this.customCommandsModule.getCommands(),
72
85
  ...this.shellCommandModule.getCommands(),
86
+ ...this.rendererModule.getCommands(),
73
87
  {
74
88
  name: "exit",
75
89
  description: "Exit the chat",
@@ -87,6 +101,7 @@ export class InternalChatModule implements ChatModule {
87
101
  getModes(): ChatMode[] {
88
102
  return [
89
103
  ...this.agentModule.getModes(),
104
+ ...this.sessionsModule.getModes(),
90
105
  ...this.askModule.getModes(),
91
106
  ...this.searchModule.getModes(),
92
107
  ...this.voiceModule.getModes(),
@@ -94,6 +109,7 @@ export class InternalChatModule implements ChatModule {
94
109
  ...this.setupModule.getModes(),
95
110
  ...this.customCommandsModule.getModes(),
96
111
  ...this.shellCommandModule.getModes(),
112
+ ...this.rendererModule.getModes(),
97
113
  ];
98
114
  }
99
115
 
@@ -0,0 +1,109 @@
1
+ /**
2
+ * RendererModule - Allows switching the active renderer mid-session via /render command
3
+ */
4
+ import { BaseChatModule } from "./BaseChatModule";
5
+ import { ChatCommand, ChatMode, ChatContext, ChatService } from "../types";
6
+ import { loadRenderer } from "../renderer/loadRenderer";
7
+ import { ConsoleRenderer } from "../renderer";
8
+ import { AgentModule } from "./AgentModule";
9
+
10
+ const BUILTIN_RENDERERS = ["basic", "compact", "fancy"];
11
+
12
+ export class RendererModule extends BaseChatModule {
13
+ name = "renderer";
14
+ description = "Renderer switching functionality";
15
+
16
+ /** Track the current renderer name for display */
17
+ private currentRendererName: string = "basic";
18
+
19
+ /** Optional reference to AgentModule for rewiring rendering on renderer switch */
20
+ private agentModule: AgentModule | undefined;
21
+
22
+ constructor(agentModule?: AgentModule) {
23
+ super();
24
+ this.agentModule = agentModule;
25
+ }
26
+
27
+ async initialize(service: ChatService): Promise<void> {
28
+ await super.initialize(service);
29
+
30
+ // Initialize context.renderer with a default ConsoleRenderer if not already set
31
+ const context = service.getContext();
32
+ if (!context.renderer) {
33
+ service.setContext({ renderer: new ConsoleRenderer() });
34
+ }
35
+ }
36
+
37
+ getCommands(): ChatCommand[] {
38
+ return [
39
+ {
40
+ name: "render",
41
+ description: "Switch the active renderer or show current renderer info",
42
+ handler: this.handleRenderCommand.bind(this),
43
+ },
44
+ ];
45
+ }
46
+
47
+ getModes(): ChatMode[] {
48
+ return [];
49
+ }
50
+
51
+ async handleRenderCommand(args: string[]): Promise<void> {
52
+ const specifier = args[0]?.trim();
53
+
54
+ if (!specifier) {
55
+ // No args — show current renderer and list built-ins
56
+ console.log(`\nšŸŽØ Current renderer: ${this.currentRendererName}`);
57
+ console.log("\nAvailable built-in renderers:");
58
+ for (const name of BUILTIN_RENDERERS) {
59
+ const marker = name === this.currentRendererName ? " ← active" : "";
60
+ console.log(` ${name}${marker}`);
61
+ }
62
+ console.log(
63
+ "\nUsage: /render <name> (e.g. /render fancy, /render compact, /render basic)"
64
+ );
65
+ console.log(
66
+ " /render <path> (e.g. /render ./my-renderer.js)"
67
+ );
68
+ console.log(
69
+ " /render <pkg> (e.g. /render @my-org/knowhow-renderer)"
70
+ );
71
+ return;
72
+ }
73
+
74
+ try {
75
+ console.log(`šŸ”„ Loading renderer: ${specifier}...`);
76
+ const newRenderer = await loadRenderer(specifier);
77
+
78
+ // Preserve active task ID when swapping renderers
79
+ const currentRenderer = this.chatService?.getContext()?.renderer;
80
+ const activeTaskId = currentRenderer?.getActiveTaskId();
81
+ if (activeTaskId) {
82
+ newRenderer.setActiveTaskId(activeTaskId);
83
+ }
84
+
85
+ this.chatService?.setContext({ renderer: newRenderer });
86
+ this.currentRendererName = specifier;
87
+
88
+ // Rewire agent rendering event listeners to the new renderer so live
89
+ // events are forwarded correctly even mid-session.
90
+ // This works because wireAgentRendering() always reads `this.renderer`
91
+ // (which resolves from context), and re-registering replaces the old handlers.
92
+ if (this.agentModule && activeTaskId) {
93
+ this.agentModule.rewireAgentRendering();
94
+ }
95
+
96
+ console.log(`āœ… Renderer switched to: ${specifier}`);
97
+ } catch (err: any) {
98
+ console.error(`āŒ Failed to load renderer "${specifier}": ${err.message}`);
99
+ }
100
+ }
101
+
102
+ async handleInput(input: string, context: ChatContext): Promise<boolean> {
103
+ return false;
104
+ }
105
+
106
+ async cleanup(): Promise<void> {
107
+ // No cleanup needed
108
+ }
109
+ }