@vybestack/llxprt-code 0.8.0-nightly.260111.af7260fe6 → 0.8.0-nightly.260113.48db4b09b

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 (109) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/generated/git-commit.d.ts +1 -1
  3. package/dist/src/generated/git-commit.js +1 -1
  4. package/dist/src/runtime/runtimeSettings.d.ts +1 -0
  5. package/dist/src/runtime/runtimeSettings.js +4 -0
  6. package/dist/src/runtime/runtimeSettings.js.map +1 -1
  7. package/dist/src/ui/AppContainer.js +67 -0
  8. package/dist/src/ui/AppContainer.js.map +1 -1
  9. package/dist/src/ui/commands/profileCommand.js +111 -9
  10. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  11. package/dist/src/ui/commands/profileCommand.test.js +3 -6
  12. package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
  13. package/dist/src/ui/commands/subagentCommand.js +58 -244
  14. package/dist/src/ui/commands/subagentCommand.js.map +1 -1
  15. package/dist/src/ui/commands/test/subagentCommand.schema.test.js +4 -3
  16. package/dist/src/ui/commands/test/subagentCommand.schema.test.js.map +1 -1
  17. package/dist/src/ui/commands/test/subagentCommand.test.js +44 -124
  18. package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -1
  19. package/dist/src/ui/commands/types.d.ts +43 -2
  20. package/dist/src/ui/commands/types.js.map +1 -1
  21. package/dist/src/ui/components/DialogManager.js +17 -0
  22. package/dist/src/ui/components/DialogManager.js.map +1 -1
  23. package/dist/src/ui/components/ProfileDetailDialog.d.ts +22 -0
  24. package/dist/src/ui/components/ProfileDetailDialog.js +113 -0
  25. package/dist/src/ui/components/ProfileDetailDialog.js.map +1 -0
  26. package/dist/src/ui/components/ProfileInlineEditor.d.ts +16 -0
  27. package/dist/src/ui/components/ProfileInlineEditor.js +216 -0
  28. package/dist/src/ui/components/ProfileInlineEditor.js.map +1 -0
  29. package/dist/src/ui/components/ProfileListDialog.d.ts +26 -0
  30. package/dist/src/ui/components/ProfileListDialog.js +172 -0
  31. package/dist/src/ui/components/ProfileListDialog.js.map +1 -0
  32. package/dist/src/ui/components/ProviderDialog.js +1 -1
  33. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  34. package/dist/src/ui/components/ProviderModelDialog.js +1 -1
  35. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  36. package/dist/src/ui/components/SubagentManagement/ProfileAttachmentWizard.d.ts +24 -0
  37. package/dist/src/ui/components/SubagentManagement/ProfileAttachmentWizard.js +102 -0
  38. package/dist/src/ui/components/SubagentManagement/ProfileAttachmentWizard.js.map +1 -0
  39. package/dist/src/ui/components/SubagentManagement/SubagentCreationWizard.d.ts +14 -0
  40. package/dist/src/ui/components/SubagentManagement/SubagentCreationWizard.js +179 -0
  41. package/dist/src/ui/components/SubagentManagement/SubagentCreationWizard.js.map +1 -0
  42. package/dist/src/ui/components/SubagentManagement/SubagentDeleteDialog.d.ts +15 -0
  43. package/dist/src/ui/components/SubagentManagement/SubagentDeleteDialog.js +47 -0
  44. package/dist/src/ui/components/SubagentManagement/SubagentDeleteDialog.js.map +1 -0
  45. package/dist/src/ui/components/SubagentManagement/SubagentEditForm.d.ts +18 -0
  46. package/dist/src/ui/components/SubagentManagement/SubagentEditForm.js +111 -0
  47. package/dist/src/ui/components/SubagentManagement/SubagentEditForm.js.map +1 -0
  48. package/dist/src/ui/components/SubagentManagement/SubagentListMenu.d.ts +19 -0
  49. package/dist/src/ui/components/SubagentManagement/SubagentListMenu.js +137 -0
  50. package/dist/src/ui/components/SubagentManagement/SubagentListMenu.js.map +1 -0
  51. package/dist/src/ui/components/SubagentManagement/SubagentMainMenu.d.ts +13 -0
  52. package/dist/src/ui/components/SubagentManagement/SubagentMainMenu.js +14 -0
  53. package/dist/src/ui/components/SubagentManagement/SubagentMainMenu.js.map +1 -0
  54. package/dist/src/ui/components/SubagentManagement/SubagentManagerDialog.d.ts +8 -0
  55. package/dist/src/ui/components/SubagentManagement/SubagentManagerDialog.js +293 -0
  56. package/dist/src/ui/components/SubagentManagement/SubagentManagerDialog.js.map +1 -0
  57. package/dist/src/ui/components/SubagentManagement/SubagentShowView.d.ts +15 -0
  58. package/dist/src/ui/components/SubagentManagement/SubagentShowView.js +35 -0
  59. package/dist/src/ui/components/SubagentManagement/SubagentShowView.js.map +1 -0
  60. package/dist/src/ui/components/SubagentManagement/index.d.ts +14 -0
  61. package/dist/src/ui/components/SubagentManagement/index.js +15 -0
  62. package/dist/src/ui/components/SubagentManagement/index.js.map +1 -0
  63. package/dist/src/ui/components/SubagentManagement/types.d.ts +109 -0
  64. package/dist/src/ui/components/SubagentManagement/types.js +77 -0
  65. package/dist/src/ui/components/SubagentManagement/types.js.map +1 -0
  66. package/dist/src/ui/contexts/KeypressContext.js +2 -1
  67. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  68. package/dist/src/ui/contexts/RuntimeContext.d.ts +2 -1
  69. package/dist/src/ui/contexts/RuntimeContext.js +2 -1
  70. package/dist/src/ui/contexts/RuntimeContext.js.map +1 -1
  71. package/dist/src/ui/contexts/UIActionsContext.d.ts +13 -0
  72. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  73. package/dist/src/ui/contexts/UIStateContext.d.ts +21 -0
  74. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  75. package/dist/src/ui/hooks/atCommandProcessor.js +25 -1
  76. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  77. package/dist/src/ui/hooks/atCommandProcessor.test.js +127 -91
  78. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  79. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -0
  80. package/dist/src/ui/hooks/slashCommandProcessor.js +34 -0
  81. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  82. package/dist/src/ui/hooks/useEditorSettings.test.js +3 -0
  83. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
  84. package/dist/src/ui/hooks/useFolderTrust.js +1 -1
  85. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  86. package/dist/src/ui/hooks/useProfileManagement.d.ts +40 -0
  87. package/dist/src/ui/hooks/useProfileManagement.js +350 -0
  88. package/dist/src/ui/hooks/useProfileManagement.js.map +1 -0
  89. package/dist/src/ui/hooks/useReactToolScheduler.js +103 -33
  90. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  91. package/dist/src/ui/hooks/useSlashCompletion.test.js +1 -1
  92. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  93. package/dist/src/ui/hooks/useToolScheduler.test.js +322 -220
  94. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  95. package/dist/src/ui/layouts/DefaultAppLayout.js +5 -0
  96. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -1
  97. package/dist/src/ui/reducers/appReducer.d.ts +5 -2
  98. package/dist/src/ui/reducers/appReducer.js +3 -0
  99. package/dist/src/ui/reducers/appReducer.js.map +1 -1
  100. package/dist/src/ui/reducers/appReducer.test.js +6 -0
  101. package/dist/src/ui/reducers/appReducer.test.js.map +1 -1
  102. package/dist/src/utils/sandbox.d.ts +1 -0
  103. package/dist/src/utils/sandbox.js +22 -20
  104. package/dist/src/utils/sandbox.js.map +1 -1
  105. package/dist/src/utils/sandbox.test.d.ts +6 -0
  106. package/dist/src/utils/sandbox.test.js +176 -0
  107. package/dist/src/utils/sandbox.test.js.map +1 -0
  108. package/dist/tsconfig.build.tsbuildinfo +1 -1
  109. package/package.json +3 -3
@@ -0,0 +1,113 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Vybestack LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { useState } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { SemanticColors } from '../colors.js';
10
+ import { useResponsive } from '../hooks/useResponsive.js';
11
+ import { useKeypress } from '../hooks/useKeypress.js';
12
+ /**
13
+ * Allowlist of ephemeralSettings keys that are safe to display.
14
+ * Any key NOT in this set will be hidden to prevent accidental secret leakage.
15
+ */
16
+ const SAFE_EPHEMERAL_KEYS = new Set([
17
+ 'baseurl',
18
+ 'endpoint',
19
+ 'url',
20
+ 'timeout',
21
+ 'maxretries',
22
+ 'retries',
23
+ 'region',
24
+ 'debug',
25
+ 'loglevel',
26
+ 'version',
27
+ 'apiversion',
28
+ 'organization',
29
+ 'orgid',
30
+ 'project',
31
+ 'projectid',
32
+ 'maxtokens',
33
+ 'temperature',
34
+ 'topp',
35
+ 'topk',
36
+ 'stream',
37
+ 'safetysettings',
38
+ ]);
39
+ // Type guard for load balancer profile
40
+ function isLoadBalancerProfile(profile) {
41
+ const p = profile;
42
+ return (profile.type === 'loadbalancer' &&
43
+ Array.isArray(p.profiles) &&
44
+ typeof p.policy === 'string');
45
+ }
46
+ export const ProfileDetailDialog = ({ profileName, profile, onClose, onLoad, onDelete, onSetDefault, onEdit, isLoading = false, isDefault = false, isActive = false, error, }) => {
47
+ const { isNarrow, width } = useResponsive();
48
+ const [confirmDelete, setConfirmDelete] = useState(false);
49
+ useKeypress((key) => {
50
+ if (key.name === 'escape') {
51
+ if (confirmDelete) {
52
+ setConfirmDelete(false);
53
+ }
54
+ else {
55
+ return onClose();
56
+ }
57
+ }
58
+ // On error / missing profile screens, only Esc should do anything.
59
+ if (error || !profile) {
60
+ return;
61
+ }
62
+ if (confirmDelete) {
63
+ if (key.sequence === 'y' || key.sequence === 'Y') {
64
+ onDelete(profileName);
65
+ }
66
+ else if (key.sequence === 'n' || key.sequence === 'N') {
67
+ setConfirmDelete(false);
68
+ }
69
+ return;
70
+ }
71
+ // Quick actions
72
+ if (key.sequence === 'l') {
73
+ return onLoad(profileName);
74
+ }
75
+ if (key.sequence === 'e') {
76
+ return onEdit(profileName);
77
+ }
78
+ if (key.sequence === 'd') {
79
+ setConfirmDelete(true);
80
+ }
81
+ if (key.sequence === 's') {
82
+ return onSetDefault(profileName);
83
+ }
84
+ }, { isActive: !isLoading });
85
+ if (isLoading) {
86
+ return (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, children: _jsx(Text, { color: SemanticColors.text.primary, children: "Loading profile..." }) }));
87
+ }
88
+ if (error) {
89
+ return (_jsxs(Box, { borderStyle: "round", borderColor: SemanticColors.status.error, flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: SemanticColors.status.error, children: "Error Loading Profile" }), _jsx(Text, { color: SemanticColors.text.secondary, children: error }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: SemanticColors.text.secondary, children: "Press Esc to go back" }) })] }));
90
+ }
91
+ if (!profile) {
92
+ return (_jsxs(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, children: [_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Profile not found: ", profileName] }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Press Esc to go back" })] }));
93
+ }
94
+ // Render JSON config in a readable format
95
+ const renderConfig = () => {
96
+ if (isLoadBalancerProfile(profile)) {
97
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Type: " }), _jsx(Text, { color: SemanticColors.text.accent, children: "Load Balancer" })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Policy: " }), _jsx(Text, { color: SemanticColors.text.primary, children: profile.policy })] }), _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Member Profiles:" }), profile.profiles.map((p) => (_jsxs(Text, { color: SemanticColors.text.primary, children: [' ', "- ", p] }, p)))] })] }));
98
+ }
99
+ // Standard profile
100
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Type: " }), _jsx(Text, { color: SemanticColors.text.primary, children: "Standard" })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Provider: " }), _jsx(Text, { color: SemanticColors.text.accent, children: profile.provider })] }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Model: " }), _jsx(Text, { color: SemanticColors.text.primary, children: profile.model })] }), profile.modelParams && Object.keys(profile.modelParams).length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Model Parameters:" }), Object.entries(profile.modelParams).map(([key, value]) => (_jsxs(Text, { color: SemanticColors.text.primary, children: [' ', key, ": ", JSON.stringify(value)] }, key)))] })), profile.ephemeralSettings && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Settings:" }), Object.entries(profile.ephemeralSettings)
101
+ .filter(([key]) => SAFE_EPHEMERAL_KEYS.has(key.toLowerCase()))
102
+ .filter(([, value]) => value !== undefined && value !== null)
103
+ .slice(0, 10) // Limit displayed settings
104
+ .map(([key, value]) => (_jsxs(Text, { color: SemanticColors.text.primary, children: [' ', key, ": ", JSON.stringify(value)] }, key)))] })), profile.auth && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: SemanticColors.text.secondary, children: "Authentication:" }), _jsxs(Text, { color: SemanticColors.text.primary, children: [' ', "Type: ", profile.auth.type] }), profile.auth.buckets && profile.auth.buckets.length > 0 && (_jsxs(Text, { color: SemanticColors.text.primary, children: [' ', "Buckets: ", profile.auth.buckets.join(', ')] }))] }))] }));
105
+ };
106
+ // Delete confirmation overlay
107
+ if (confirmDelete) {
108
+ return (_jsxs(Box, { borderStyle: "round", borderColor: SemanticColors.status.warning, flexDirection: "column", padding: 1, width: Math.min(width, 60), children: [_jsx(Text, { bold: true, color: SemanticColors.status.warning, children: "Delete Profile?" }), _jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.primary, children: ["Are you sure you want to delete \"", profileName, "\"?"] }) }), _jsx(Text, { color: SemanticColors.text.secondary, children: "This action cannot be undone." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: SemanticColors.text.accent, children: "Press y to confirm, n or Esc to cancel" }) })] }));
109
+ }
110
+ const dialogWidth = isNarrow ? undefined : Math.min(width, 80);
111
+ return (_jsxs(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, width: dialogWidth, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: SemanticColors.text.accent, children: profileName }), isActive && (_jsx(Text, { color: SemanticColors.status.success, children: " (Active)" })), isDefault && (_jsx(Text, { color: SemanticColors.text.secondary, children: " (Default)" }))] }), renderConfig(), _jsx(Box, { marginTop: 1, borderStyle: "single", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, borderColor: SemanticColors.border.default, paddingTop: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["Actions: ", _jsx(Text, { color: SemanticColors.text.accent, children: "l" }), "=load", ' ', _jsx(Text, { color: SemanticColors.text.accent, children: "e" }), "=edit", ' ', _jsx(Text, { color: SemanticColors.text.accent, children: "d" }), "=delete", ' ', _jsx(Text, { color: SemanticColors.text.accent, children: "s" }), "=set-default", ' ', _jsx(Text, { color: SemanticColors.text.secondary, children: "Esc" }), "=back"] }) })] }));
112
+ };
113
+ //# sourceMappingURL=ProfileDetailDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileDetailDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProfileDetailDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ import type { Profile } from '@vybestack/llxprt-code-core';
8
+ interface ProfileInlineEditorProps {
9
+ profileName: string;
10
+ profile: Profile;
11
+ onSave: (profileName: string, updatedProfile: Profile) => void;
12
+ onCancel: () => void;
13
+ error?: string;
14
+ }
15
+ export declare const ProfileInlineEditor: React.FC<ProfileInlineEditorProps>;
16
+ export {};
@@ -0,0 +1,216 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Vybestack LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { useState, useEffect, useMemo } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { SemanticColors } from '../colors.js';
10
+ import { useResponsive } from '../hooks/useResponsive.js';
11
+ import { useKeypress } from '../hooks/useKeypress.js';
12
+ /**
13
+ * Validates a profile structure. Returns error message or null if valid.
14
+ */
15
+ function validateProfile(profile) {
16
+ if (typeof profile !== 'object' || profile === null) {
17
+ return 'Invalid profile: must be an object';
18
+ }
19
+ const p = profile;
20
+ if (!('version' in p) || typeof p.version !== 'string') {
21
+ return 'Missing or invalid version';
22
+ }
23
+ if (!('type' in p) || typeof p.type !== 'string') {
24
+ return 'Missing or invalid type';
25
+ }
26
+ if (p.type === 'standard') {
27
+ if (!('provider' in p) || typeof p.provider !== 'string' || !p.provider) {
28
+ return 'Standard profile requires provider';
29
+ }
30
+ if (!('model' in p) || typeof p.model !== 'string' || !p.model) {
31
+ return 'Standard profile requires model';
32
+ }
33
+ }
34
+ else if (p.type === 'loadbalancer') {
35
+ if (!('profiles' in p) || !Array.isArray(p.profiles)) {
36
+ return 'Load balancer requires profiles array';
37
+ }
38
+ if (p.profiles.length === 0) {
39
+ return 'Load balancer requires at least one profile';
40
+ }
41
+ if (!p.profiles.every((item) => typeof item === 'string')) {
42
+ return 'Profiles must be strings';
43
+ }
44
+ if (!('policy' in p) || typeof p.policy !== 'string' || !p.policy) {
45
+ return 'Load balancer requires policy';
46
+ }
47
+ }
48
+ else {
49
+ return `Unknown profile type: ${p.type}`;
50
+ }
51
+ return null;
52
+ }
53
+ // Simple JSON editor that allows line-by-line editing
54
+ export const ProfileInlineEditor = ({ profileName, profile, onSave, onCancel, error: externalError, }) => {
55
+ const { width } = useResponsive();
56
+ // Convert profile to formatted JSON lines
57
+ const formatProfile = (p) => {
58
+ const json = JSON.stringify(p, null, 2);
59
+ return json.split('\n');
60
+ };
61
+ const [lines, setLines] = useState(() => formatProfile(profile));
62
+ const [cursorLine, setCursorLine] = useState(0);
63
+ const [isEditing, setIsEditing] = useState(false);
64
+ const [editBuffer, setEditBuffer] = useState('');
65
+ const [validationError, setValidationError] = useState(null);
66
+ const [hasChanges, setHasChanges] = useState(false);
67
+ // Visible window for scrolling
68
+ const maxVisibleLines = 15;
69
+ const [scrollOffset, setScrollOffset] = useState(0);
70
+ // Reset editor when a different profile is loaded into the dialog.
71
+ useEffect(() => {
72
+ setLines(formatProfile(profile));
73
+ setCursorLine(0);
74
+ setScrollOffset(0);
75
+ setIsEditing(false);
76
+ setEditBuffer('');
77
+ setValidationError(null);
78
+ setHasChanges(false);
79
+ }, [profileName, profile]);
80
+ // Ensure cursor line is visible
81
+ useEffect(() => {
82
+ if (cursorLine < scrollOffset) {
83
+ setScrollOffset(cursorLine);
84
+ }
85
+ else if (cursorLine >= scrollOffset + maxVisibleLines) {
86
+ setScrollOffset(cursorLine - maxVisibleLines + 1);
87
+ }
88
+ }, [cursorLine, scrollOffset, maxVisibleLines]);
89
+ // Validate JSON on changes
90
+ const validateJson = useMemo(() => {
91
+ try {
92
+ const jsonString = lines.join('\n');
93
+ JSON.parse(jsonString);
94
+ return null;
95
+ }
96
+ catch (e) {
97
+ return e instanceof Error ? e.message : 'Invalid JSON';
98
+ }
99
+ }, [lines]);
100
+ // Clear stale validation errors when JSON becomes valid
101
+ useEffect(() => {
102
+ if (!validateJson) {
103
+ setValidationError(null);
104
+ }
105
+ }, [validateJson]);
106
+ useKeypress((key) => {
107
+ if (isEditing) {
108
+ // Edit mode
109
+ if (key.name === 'escape') {
110
+ // Cancel line edit
111
+ setIsEditing(false);
112
+ setEditBuffer('');
113
+ return;
114
+ }
115
+ if (key.name === 'return') {
116
+ // Commit line edit
117
+ const newLines = [...lines];
118
+ newLines[cursorLine] = editBuffer;
119
+ setLines(newLines);
120
+ setIsEditing(false);
121
+ setEditBuffer('');
122
+ setHasChanges(true);
123
+ return;
124
+ }
125
+ if (key.name === 'backspace' || key.name === 'delete') {
126
+ setEditBuffer((prev) => prev.slice(0, -1));
127
+ return;
128
+ }
129
+ if (key.sequence &&
130
+ typeof key.sequence === 'string' &&
131
+ !key.ctrl &&
132
+ !key.meta &&
133
+ key.insertable !== false) {
134
+ setEditBuffer((prev) => prev + key.sequence);
135
+ return;
136
+ }
137
+ return;
138
+ }
139
+ // Navigation mode
140
+ if (key.name === 'escape') {
141
+ onCancel();
142
+ return;
143
+ }
144
+ // Save
145
+ if (key.ctrl && key.name === 's') {
146
+ if (validateJson) {
147
+ setValidationError(validateJson);
148
+ return;
149
+ }
150
+ try {
151
+ const updatedProfile = JSON.parse(lines.join('\n'));
152
+ // Comprehensive profile validation
153
+ const profileError = validateProfile(updatedProfile);
154
+ if (profileError) {
155
+ setValidationError(profileError);
156
+ return;
157
+ }
158
+ onSave(profileName, updatedProfile);
159
+ }
160
+ catch (e) {
161
+ setValidationError(e instanceof Error ? e.message : 'Invalid JSON');
162
+ }
163
+ return;
164
+ }
165
+ // Navigation
166
+ if (key.name === 'up' || key.sequence === 'k') {
167
+ setCursorLine((prev) => Math.max(0, prev - 1));
168
+ return;
169
+ }
170
+ if (key.name === 'down' || key.sequence === 'j') {
171
+ setCursorLine((prev) => Math.min(lines.length - 1, prev + 1));
172
+ return;
173
+ }
174
+ // Enter edit mode
175
+ if (key.name === 'return' || key.sequence === 'e') {
176
+ setIsEditing(true);
177
+ setEditBuffer(lines[cursorLine]);
178
+ setValidationError(null);
179
+ return;
180
+ }
181
+ // Page up/down
182
+ if (key.name === 'pageup') {
183
+ setCursorLine((prev) => Math.max(0, prev - maxVisibleLines));
184
+ return;
185
+ }
186
+ if (key.name === 'pagedown') {
187
+ setCursorLine((prev) => Math.min(lines.length - 1, prev + maxVisibleLines));
188
+ return;
189
+ }
190
+ // Home/End
191
+ if (key.sequence === 'g') {
192
+ setCursorLine(0);
193
+ return;
194
+ }
195
+ if (key.sequence === 'G') {
196
+ setCursorLine(lines.length - 1);
197
+ return;
198
+ }
199
+ }, { isActive: true });
200
+ const visibleLines = lines.slice(scrollOffset, scrollOffset + maxVisibleLines);
201
+ const dialogWidth = Math.min(width, 90);
202
+ return (_jsxs(Box, { borderStyle: "round", borderColor: validateJson
203
+ ? SemanticColors.status.error
204
+ : hasChanges
205
+ ? SemanticColors.status.warning
206
+ : SemanticColors.border.default, flexDirection: "column", padding: 1, width: dialogWidth, children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, color: SemanticColors.text.accent, children: ["Edit: ", profileName] }), hasChanges && (_jsx(Text, { color: SemanticColors.status.warning, children: " (modified)" }))] }), (validationError || externalError || validateJson) && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: SemanticColors.status.error, children: ["Error: ", validationError || externalError || validateJson] }) })), _jsx(Box, { flexDirection: "column", marginBottom: 1, children: visibleLines.map((line, idx) => {
207
+ const actualLine = scrollOffset + idx;
208
+ const isCurrentLine = actualLine === cursorLine;
209
+ return (_jsxs(Box, { children: [_jsx(Box, { width: 4, children: _jsx(Text, { color: isCurrentLine
210
+ ? SemanticColors.text.accent
211
+ : SemanticColors.text.secondary, children: String(actualLine + 1).padStart(3, ' ') }) }), isEditing && isCurrentLine ? (_jsx(Box, { children: _jsxs(Text, { color: SemanticColors.text.accent, children: [editBuffer, _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }) })) : (_jsxs(Text, { color: isCurrentLine
212
+ ? SemanticColors.text.accent
213
+ : SemanticColors.text.primary, bold: isCurrentLine, children: [isCurrentLine ? '› ' : ' ', line] }))] }, actualLine));
214
+ }) }), lines.length > maxVisibleLines && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["Lines ", scrollOffset + 1, "-", Math.min(scrollOffset + maxVisibleLines, lines.length), " of", ' ', lines.length] }) })), _jsx(Box, { borderStyle: "single", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, borderColor: SemanticColors.border.default, paddingTop: 1, children: isEditing ? (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Editing line ", cursorLine + 1, ". Enter=commit, Esc=cancel"] })) : (_jsx(Text, { color: SemanticColors.text.secondary, children: "\u2191/\u2193=navigate, Enter/e=edit line, Ctrl+S=save, Esc=cancel" })) })] }));
215
+ };
216
+ //# sourceMappingURL=ProfileInlineEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileInlineEditor.js","sourceRoot":"","sources":["../../../../src/ui/components/ProfileInlineEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ export interface ProfileListItem {
8
+ name: string;
9
+ type: 'standard' | 'loadbalancer';
10
+ provider?: string;
11
+ model?: string;
12
+ isDefault?: boolean;
13
+ isActive?: boolean;
14
+ loadError?: boolean;
15
+ }
16
+ interface ProfileListDialogProps {
17
+ profiles: ProfileListItem[];
18
+ onSelect: (profileName: string) => void;
19
+ onClose: () => void;
20
+ onViewDetail: (profileName: string) => void;
21
+ isLoading?: boolean;
22
+ defaultProfileName?: string;
23
+ activeProfileName?: string;
24
+ }
25
+ export declare const ProfileListDialog: React.FC<ProfileListDialogProps>;
26
+ export {};
@@ -0,0 +1,172 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Vybestack LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import React, { useState, useMemo } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { SemanticColors } from '../colors.js';
10
+ import { useResponsive } from '../hooks/useResponsive.js';
11
+ import { truncateEnd } from '../utils/responsive.js';
12
+ import { useKeypress } from '../hooks/useKeypress.js';
13
+ export const ProfileListDialog = ({ profiles, onSelect, onClose, onViewDetail, isLoading = false, defaultProfileName, activeProfileName, }) => {
14
+ const { isNarrow, isWide, width } = useResponsive();
15
+ const [searchTerm, setSearchTerm] = useState('');
16
+ const [isSearching, setIsSearching] = useState(true); // Start in search mode
17
+ const [index, setIndex] = useState(0);
18
+ // Filter profiles based on search term
19
+ const filteredProfiles = useMemo(() => profiles.filter((p) => p.name.toLowerCase().includes(searchTerm.toLowerCase())), [profiles, searchTerm]);
20
+ // Reset index when search term changes
21
+ React.useEffect(() => {
22
+ setIndex(0);
23
+ }, [searchTerm]);
24
+ // Clamp index when the underlying list changes.
25
+ React.useEffect(() => {
26
+ setIndex((prev) => {
27
+ if (filteredProfiles.length === 0)
28
+ return 0;
29
+ return Math.min(prev, filteredProfiles.length - 1);
30
+ });
31
+ }, [filteredProfiles.length]);
32
+ const columns = isNarrow ? 1 : isWide ? 3 : 2;
33
+ const longest = filteredProfiles.reduce((len, p) => Math.max(len, p.name.length + 10), // account for indicators
34
+ 0);
35
+ const colWidth = isWide
36
+ ? Math.max(longest + 4, 35)
37
+ : Math.max(longest + 4, 25);
38
+ const rows = Math.ceil(filteredProfiles.length / columns);
39
+ const move = (delta) => {
40
+ if (filteredProfiles.length === 0) {
41
+ setIndex(0);
42
+ return;
43
+ }
44
+ let next = index + delta;
45
+ if (next < 0)
46
+ next = 0;
47
+ if (next >= filteredProfiles.length)
48
+ next = filteredProfiles.length - 1;
49
+ setIndex(next);
50
+ };
51
+ useKeypress((key) => {
52
+ if (key.name === 'escape') {
53
+ if (isSearching && searchTerm.length > 0) {
54
+ setSearchTerm('');
55
+ }
56
+ else {
57
+ return onClose();
58
+ }
59
+ }
60
+ if (isSearching || isNarrow) {
61
+ if (key.name === 'return') {
62
+ if (filteredProfiles.length > 0) {
63
+ if (isNarrow) {
64
+ return onViewDetail(filteredProfiles[index].name);
65
+ }
66
+ setIsSearching(false);
67
+ }
68
+ }
69
+ else if (key.name === 'tab' && !isNarrow) {
70
+ setIsSearching(false);
71
+ }
72
+ else if (key.name === 'backspace' || key.name === 'delete') {
73
+ setSearchTerm((prev) => prev.slice(0, -1));
74
+ }
75
+ else if (key.sequence &&
76
+ typeof key.sequence === 'string' &&
77
+ !key.ctrl &&
78
+ !key.meta &&
79
+ key.insertable !== false) {
80
+ setSearchTerm((prev) => prev + key.sequence);
81
+ }
82
+ }
83
+ else {
84
+ // Navigation mode
85
+ if (key.name === 'return' && filteredProfiles.length > 0) {
86
+ return onViewDetail(filteredProfiles[index].name);
87
+ }
88
+ if (key.name === 'tab') {
89
+ setIsSearching(true);
90
+ }
91
+ if (filteredProfiles.length === 0) {
92
+ return;
93
+ }
94
+ // Quick actions
95
+ if (key.sequence === 'l' && filteredProfiles.length > 0) {
96
+ return onSelect(filteredProfiles[index].name);
97
+ }
98
+ // Navigation
99
+ if (key.name === 'left')
100
+ move(-1);
101
+ if (key.name === 'right')
102
+ move(1);
103
+ if (key.name === 'up')
104
+ move(-columns);
105
+ if (key.name === 'down')
106
+ move(columns);
107
+ // Vim-style navigation
108
+ if (key.sequence === 'j')
109
+ move(columns);
110
+ if (key.sequence === 'k')
111
+ move(-columns);
112
+ if (key.sequence === 'h')
113
+ move(-1);
114
+ }
115
+ }, { isActive: !isLoading });
116
+ const renderItem = (profile, i) => {
117
+ const selected = i === index && (!isSearching || isNarrow);
118
+ const isActiveProfile = profile.name === activeProfileName;
119
+ const isDefaultProfile = profile.name === defaultProfileName;
120
+ // Build indicators
121
+ let indicators = '';
122
+ if (isActiveProfile)
123
+ indicators += '*';
124
+ if (isDefaultProfile)
125
+ indicators += 'D';
126
+ if (profile.type === 'loadbalancer')
127
+ indicators += 'LB';
128
+ const indicatorText = indicators ? ` [${indicators}]` : '';
129
+ // Truncate name if needed
130
+ const maxNameLen = colWidth - 6 - indicatorText.length;
131
+ const displayName = isWide
132
+ ? profile.name
133
+ : profile.name.length > maxNameLen
134
+ ? truncateEnd(profile.name, maxNameLen)
135
+ : profile.name;
136
+ return (_jsx(Box, { width: isWide ? undefined : colWidth, marginRight: 2, children: _jsxs(Text, { color: selected
137
+ ? SemanticColors.text.accent
138
+ : isSearching && !isNarrow
139
+ ? SemanticColors.text.secondary
140
+ : isActiveProfile
141
+ ? SemanticColors.status.success
142
+ : SemanticColors.text.primary, children: [selected ? '● ' : '○ ', displayName, indicatorText && (_jsx(Text, { color: SemanticColors.text.secondary, children: indicatorText }))] }) }, profile.name));
143
+ };
144
+ const grid = [];
145
+ for (let r = 0; r < rows; r++) {
146
+ const rowItems = [];
147
+ for (let c = 0; c < columns; c++) {
148
+ const i = r * columns + c;
149
+ if (i < filteredProfiles.length) {
150
+ rowItems.push(renderItem(filteredProfiles[i], i));
151
+ }
152
+ }
153
+ grid.push(_jsx(Box, { children: rowItems }, r));
154
+ }
155
+ if (isLoading) {
156
+ return (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, children: _jsx(Text, { color: SemanticColors.text.primary, children: "Loading profiles..." }) }));
157
+ }
158
+ if (profiles.length === 0) {
159
+ return (_jsxs(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, children: [_jsx(Text, { color: SemanticColors.text.primary, children: "No saved profiles found. Use /profile save model <name> to create one." }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Press Esc to close" })] }));
160
+ }
161
+ const renderContent = () => {
162
+ if (isNarrow) {
163
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: "Profiles" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: SemanticColors.text.primary, children: ["Search: ", _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Type to filter, Enter for details, Esc to cancel" }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [filteredProfiles.length, " profiles", searchTerm && ' found'] }), filteredProfiles.length > 0 ? (grid) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No profiles match \"", searchTerm, "\""] }) }))] }));
164
+ }
165
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: "Profile List" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: isSearching
166
+ ? SemanticColors.text.primary
167
+ : SemanticColors.text.secondary, children: ["Search:", ' ', isSearching && _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [' ', "(press Tab to ", isSearching ? 'navigate' : 'search', ") Found", ' ', filteredProfiles.length, " profiles"] })] }), filteredProfiles.length > 0 ? (grid) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No profiles match \"", searchTerm, "\""] }) })), filteredProfiles.length > 0 && !isSearching && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["Selected: ", filteredProfiles[index].name, filteredProfiles[index].provider && (_jsxs(Text, { color: SemanticColors.text.secondary, children: [' ', "(", filteredProfiles[index].provider, filteredProfiles[index].model &&
168
+ ` / ${filteredProfiles[index].model}`, ")"] }))] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: SemanticColors.text.secondary, children: "Legend: * = active, D = default, LB = load balancer" }) }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Controls: \u2191\u2193\u2190\u2192 Navigate [Enter] Details [l] Load [Esc] Close" })] }));
169
+ };
170
+ return isNarrow ? (_jsx(Box, { flexDirection: "column", padding: 1, children: renderContent() })) : (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, width: Math.min(width, 100), children: renderContent() }));
171
+ };
172
+ //# sourceMappingURL=ProfileListDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileListDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProfileListDialog.tsx"],"names":[],"mappings":"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"}
@@ -73,7 +73,7 @@ export const ProviderDialog = ({ providers, currentProvider, onSelect, onClose,
73
73
  typeof key.sequence === 'string' &&
74
74
  !key.ctrl &&
75
75
  !key.meta &&
76
- key.insertable) {
76
+ key.insertable !== false) {
77
77
  setSearchTerm((prev) => prev + key.sequence);
78
78
  }
79
79
  }