@vybestack/llxprt-code 0.1.16-nightly.250805.82080ee4 → 0.1.17

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 (46) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/config/config.d.ts +0 -1
  3. package/dist/src/config/config.js +1 -3
  4. package/dist/src/config/config.js.map +1 -1
  5. package/dist/src/generated/git-commit.d.ts +1 -1
  6. package/dist/src/generated/git-commit.js +2 -2
  7. package/dist/src/generated/git-commit.js.map +1 -1
  8. package/dist/src/ui/App.js +14 -2
  9. package/dist/src/ui/App.js.map +1 -1
  10. package/dist/src/ui/commands/ideCommand.js +26 -11
  11. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  12. package/dist/src/ui/commands/mcpCommand.js +15 -20
  13. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  14. package/dist/src/ui/commands/modelCommand.js +0 -2
  15. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  16. package/dist/src/ui/commands/profileCommand.js +11 -5
  17. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  18. package/dist/src/ui/commands/setCommand.js +45 -0
  19. package/dist/src/ui/commands/setCommand.js.map +1 -1
  20. package/dist/src/ui/commands/toolsCommand.js +41 -11
  21. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  22. package/dist/src/ui/commands/types.d.ts +1 -1
  23. package/dist/src/ui/commands/types.js.map +1 -1
  24. package/dist/src/ui/components/ToolsDialog.d.ts +16 -0
  25. package/dist/src/ui/components/ToolsDialog.js +48 -0
  26. package/dist/src/ui/components/ToolsDialog.js.map +1 -0
  27. package/dist/src/ui/hooks/atCommandProcessor.js +11 -4
  28. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  29. package/dist/src/ui/hooks/index.d.ts +1 -0
  30. package/dist/src/ui/hooks/index.js +1 -0
  31. package/dist/src/ui/hooks/index.js.map +1 -1
  32. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -1
  33. package/dist/src/ui/hooks/slashCommandProcessor.js +10 -1
  34. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  35. package/dist/src/ui/hooks/useGeminiStream.js +133 -76
  36. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  37. package/dist/src/ui/hooks/useSlashCompletion.js +10 -8
  38. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  39. package/dist/src/ui/hooks/useToolsDialog.d.ts +27 -0
  40. package/dist/src/ui/hooks/useToolsDialog.js +97 -0
  41. package/dist/src/ui/hooks/useToolsDialog.js.map +1 -0
  42. package/dist/src/ui/reducers/appReducer.d.ts +3 -2
  43. package/dist/src/ui/reducers/appReducer.js +1 -0
  44. package/dist/src/ui/reducers/appReducer.js.map +1 -1
  45. package/dist/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +3 -3
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { useCallback, useState } from 'react';
7
+ import { MessageType } from '../types.js';
8
+ import { useAppDispatch } from '../contexts/AppDispatchContext.js';
9
+ export const useToolsDialog = ({ addMessage, appState, config, }) => {
10
+ const appDispatch = useAppDispatch();
11
+ const showDialog = appState.openDialogs.tools;
12
+ const [action, setAction] = useState('disable');
13
+ const [availableTools, setAvailableTools] = useState([]);
14
+ const [disabledTools, setDisabledTools] = useState([]);
15
+ const openDialog = useCallback(async (dialogAction) => {
16
+ try {
17
+ const toolRegistry = await config.getToolRegistry();
18
+ if (!toolRegistry) {
19
+ addMessage({
20
+ type: MessageType.ERROR,
21
+ content: 'Could not retrieve tool registry.',
22
+ timestamp: new Date(),
23
+ });
24
+ return;
25
+ }
26
+ // Get current disabled tools from ephemeral settings
27
+ const ephemeralSettings = config.getEphemeralSettings() || {};
28
+ const currentDisabledTools = ephemeralSettings['disabled-tools'] || [];
29
+ // Get all non-MCP tools
30
+ const allTools = toolRegistry.getAllTools();
31
+ const geminiTools = allTools.filter((tool) => !('serverName' in tool));
32
+ // Filter tools based on the action
33
+ let tools;
34
+ if (dialogAction === 'disable') {
35
+ // Show only enabled tools for disabling
36
+ tools = geminiTools.filter((tool) => !currentDisabledTools.includes(tool.name));
37
+ }
38
+ else {
39
+ // Show only disabled tools for enabling
40
+ tools = geminiTools.filter((tool) => currentDisabledTools.includes(tool.name));
41
+ }
42
+ if (tools.length === 0) {
43
+ addMessage({
44
+ type: MessageType.INFO,
45
+ content: dialogAction === 'disable'
46
+ ? 'All tools are already disabled.'
47
+ : 'No tools are currently disabled.',
48
+ timestamp: new Date(),
49
+ });
50
+ return;
51
+ }
52
+ setAction(dialogAction);
53
+ setAvailableTools(tools);
54
+ setDisabledTools(currentDisabledTools);
55
+ appDispatch({ type: 'OPEN_DIALOG', payload: 'tools' });
56
+ }
57
+ catch (e) {
58
+ addMessage({
59
+ type: MessageType.ERROR,
60
+ content: `Failed to load tools: ${e instanceof Error ? e.message : String(e)}`,
61
+ timestamp: new Date(),
62
+ });
63
+ }
64
+ }, [addMessage, appDispatch, config]);
65
+ const closeDialog = useCallback(() => appDispatch({ type: 'CLOSE_DIALOG', payload: 'tools' }), [appDispatch]);
66
+ const handleSelect = useCallback((toolName) => {
67
+ const selectedTool = availableTools.find((t) => t.name === toolName);
68
+ if (!selectedTool)
69
+ return;
70
+ // Update disabled tools list
71
+ let updatedDisabledTools;
72
+ if (action === 'disable') {
73
+ updatedDisabledTools = [...disabledTools, toolName];
74
+ }
75
+ else {
76
+ updatedDisabledTools = disabledTools.filter((name) => name !== toolName);
77
+ }
78
+ // Update ephemeral settings
79
+ config.setEphemeralSetting('disabled-tools', updatedDisabledTools);
80
+ addMessage({
81
+ type: MessageType.INFO,
82
+ content: `Tool '${selectedTool.displayName}' has been ${action}d.`,
83
+ timestamp: new Date(),
84
+ });
85
+ appDispatch({ type: 'CLOSE_DIALOG', payload: 'tools' });
86
+ }, [addMessage, appDispatch, config, action, availableTools, disabledTools]);
87
+ return {
88
+ showDialog,
89
+ openDialog,
90
+ closeDialog,
91
+ action,
92
+ availableTools,
93
+ disabledTools,
94
+ handleSelect,
95
+ };
96
+ };
97
+ //# sourceMappingURL=useToolsDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolsDialog.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useToolsDialog.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@ export type AppAction = {
12
12
  };
13
13
  } | {
14
14
  type: 'OPEN_DIALOG';
15
- payload: 'theme' | 'auth' | 'editor' | 'providerModel' | 'provider' | 'privacy' | 'loadProfile';
15
+ payload: 'theme' | 'auth' | 'editor' | 'providerModel' | 'provider' | 'privacy' | 'loadProfile' | 'tools';
16
16
  } | {
17
17
  type: 'CLOSE_DIALOG';
18
- payload: 'theme' | 'auth' | 'editor' | 'providerModel' | 'provider' | 'privacy' | 'loadProfile';
18
+ payload: 'theme' | 'auth' | 'editor' | 'providerModel' | 'provider' | 'privacy' | 'loadProfile' | 'tools';
19
19
  } | {
20
20
  type: 'SET_WARNING';
21
21
  payload: {
@@ -44,6 +44,7 @@ export interface AppState {
44
44
  provider: boolean;
45
45
  privacy: boolean;
46
46
  loadProfile: boolean;
47
+ tools: boolean;
47
48
  };
48
49
  warnings: Map<string, string>;
49
50
  errors: {
@@ -12,6 +12,7 @@ export const initialAppState = {
12
12
  provider: false,
13
13
  privacy: false,
14
14
  loadProfile: false,
15
+ tools: false,
15
16
  },
16
17
  warnings: new Map(),
17
18
  errors: {
@@ -1 +1 @@
1
- {"version":3,"file":"appReducer.js","sourceRoot":"","sources":["../../../../src/ui/reducers/appReducer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2DH,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,WAAW,EAAE;QACX,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,KAAK;KACnB;IACD,QAAQ,EAAE,IAAI,GAAG,EAAE;IACnB,MAAM,EAAE;QACN,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;KACb;IACD,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,MAAiB;IAC3D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,0DAA0D;YAC1D,OAAO;gBACL,GAAG,KAAK;gBACR,iBAAiB,EAAE,MAAM,CAAC,OAAO;aAClC,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI;iBACvB;aACF,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK;iBACxB;aACF,CAAC;QAEJ,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,KAAK,EAAE,MAAM,CAAC,OAAO;iBACtB;aACF,CAAC;QAEJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,IAAI,EAAE,MAAM,CAAC,OAAO;iBACrB;aACF,CAAC;QAEJ,KAAK,kBAAkB;YACrB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,MAAM,EAAE,MAAM,CAAC,OAAO;iBACvB;aACF,CAAC;QAEJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"appReducer.js","sourceRoot":"","sources":["../../../../src/ui/reducers/appReducer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8DH,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,WAAW,EAAE;QACX,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,KAAK;KACb;IACD,QAAQ,EAAE,IAAI,GAAG,EAAE;IACnB,MAAM,EAAE;QACN,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;KACb;IACD,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,MAAiB;IAC3D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,0DAA0D;YAC1D,OAAO;gBACL,GAAG,KAAK;gBACR,iBAAiB,EAAE,MAAM,CAAC,OAAO;aAClC,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI;iBACvB;aACF,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK;iBACxB;aACF,CAAC;QAEJ,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,KAAK,EAAE,MAAM,CAAC,OAAO;iBACtB;aACF,CAAC;QAEJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,IAAI,EAAE,MAAM,CAAC,OAAO;iBACrB;aACF,CAAC;QAEJ,KAAK,kBAAkB;YACrB,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,MAAM,EAAE,MAAM,CAAC,OAAO;iBACvB;aACF,CAAC;QAEJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}