@dexto/tui 1.6.16 → 1.6.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.
- package/dist/InkCLIRefactored.d.ts +3 -3
- package/dist/InkCLIRefactored.d.ts.map +1 -1
- package/dist/agent-backend.cjs +118 -0
- package/dist/agent-backend.d.ts +82 -0
- package/dist/agent-backend.d.ts.map +1 -0
- package/dist/agent-backend.js +86 -0
- package/dist/agent-backend.test.cjs +28 -0
- package/dist/agent-backend.test.d.ts +2 -0
- package/dist/agent-backend.test.d.ts.map +1 -0
- package/dist/agent-backend.test.js +29 -0
- package/dist/components/Footer.cjs +5 -0
- package/dist/components/Footer.d.ts +3 -2
- package/dist/components/Footer.d.ts.map +1 -1
- package/dist/components/Footer.js +5 -0
- package/dist/components/ResourceAutocomplete.cjs +8 -0
- package/dist/components/ResourceAutocomplete.d.ts +2 -2
- package/dist/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/components/ResourceAutocomplete.js +8 -0
- package/dist/components/SlashCommandAutocomplete.cjs +4 -4
- package/dist/components/SlashCommandAutocomplete.d.ts +2 -2
- package/dist/components/SlashCommandAutocomplete.d.ts.map +1 -1
- package/dist/components/SlashCommandAutocomplete.js +5 -5
- package/dist/components/StatusBar.d.ts +2 -2
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/modes/AlternateBufferCLI.d.ts +2 -2
- package/dist/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/components/modes/StaticCLI.d.ts +2 -2
- package/dist/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/components/overlays/ContextStatsOverlay.d.ts +2 -2
- package/dist/components/overlays/ContextStatsOverlay.d.ts.map +1 -1
- package/dist/components/overlays/ExportWizard.d.ts +2 -2
- package/dist/components/overlays/ExportWizard.d.ts.map +1 -1
- package/dist/components/overlays/LogLevelSelector.d.ts +2 -2
- package/dist/components/overlays/LogLevelSelector.d.ts.map +1 -1
- package/dist/components/overlays/McpRemoveSelector.d.ts +2 -2
- package/dist/components/overlays/McpRemoveSelector.d.ts.map +1 -1
- package/dist/components/overlays/McpServerList.d.ts +3 -2
- package/dist/components/overlays/McpServerList.d.ts.map +1 -1
- package/dist/components/overlays/ModelSelectorRefactored.d.ts +3 -2
- package/dist/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/components/overlays/PromptDeleteSelector.d.ts +3 -2
- package/dist/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
- package/dist/components/overlays/PromptList.d.ts +3 -2
- package/dist/components/overlays/PromptList.d.ts.map +1 -1
- package/dist/components/overlays/ReasoningOverlay.d.ts +2 -2
- package/dist/components/overlays/ReasoningOverlay.d.ts.map +1 -1
- package/dist/components/overlays/SearchOverlay.d.ts +2 -2
- package/dist/components/overlays/SearchOverlay.d.ts.map +1 -1
- package/dist/components/overlays/SessionSelectorRefactored.d.ts +2 -2
- package/dist/components/overlays/SessionSelectorRefactored.d.ts.map +1 -1
- package/dist/components/overlays/ToolBrowser.d.ts +2 -2
- package/dist/components/overlays/ToolBrowser.d.ts.map +1 -1
- package/dist/containers/InputContainer.cjs +8 -4
- package/dist/containers/InputContainer.d.ts +3 -2
- package/dist/containers/InputContainer.d.ts.map +1 -1
- package/dist/containers/InputContainer.js +12 -4
- package/dist/containers/OverlayContainer.cjs +1 -1
- package/dist/containers/OverlayContainer.d.ts +2 -2
- package/dist/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/containers/OverlayContainer.js +1 -1
- package/dist/hooks/useAgentEvents.d.ts +3 -2
- package/dist/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/hooks/useCLIState.d.ts +4 -3
- package/dist/hooks/useCLIState.d.ts.map +1 -1
- package/dist/hooks/useCLIState.js +1 -4
- package/dist/hooks/useInputOrchestrator.d.ts +3 -2
- package/dist/hooks/useInputOrchestrator.d.ts.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +2 -2
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -1
- package/dist/hooks/useTokenCounter.d.ts +2 -2
- package/dist/hooks/useTokenCounter.d.ts.map +1 -1
- package/dist/host/index.d.ts +7 -3
- package/dist/host/index.d.ts.map +1 -1
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +243 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/interactive-commands/command-parser.d.ts +2 -2
- package/dist/interactive-commands/command-parser.d.ts.map +1 -1
- package/dist/interactive-commands/commands.cjs +27 -16
- package/dist/interactive-commands/commands.d.ts +3 -2
- package/dist/interactive-commands/commands.d.ts.map +1 -1
- package/dist/interactive-commands/commands.js +29 -15
- package/dist/interactive-commands/commands.test.cjs +28 -0
- package/dist/interactive-commands/commands.test.d.ts +2 -0
- package/dist/interactive-commands/commands.test.d.ts.map +1 -0
- package/dist/interactive-commands/commands.test.js +27 -0
- package/dist/interactive-commands/documentation-commands.d.ts.map +1 -1
- package/dist/interactive-commands/general-commands.cjs +3 -3
- package/dist/interactive-commands/general-commands.d.ts +2 -1
- package/dist/interactive-commands/general-commands.d.ts.map +1 -1
- package/dist/interactive-commands/general-commands.js +3 -3
- package/dist/interactive-commands/prompt-commands.d.ts +2 -2
- package/dist/interactive-commands/prompt-commands.d.ts.map +1 -1
- package/dist/interactive-commands/session/session-commands.d.ts.map +1 -1
- package/dist/interactive-commands/system/system-commands.d.ts.map +1 -1
- package/dist/interactive-commands/tool-commands.d.ts.map +1 -1
- package/dist/services/CommandService.d.ts +2 -2
- package/dist/services/CommandService.d.ts.map +1 -1
- package/dist/utils/commandOverlays.cjs +5 -1
- package/dist/utils/commandOverlays.d.ts +2 -1
- package/dist/utils/commandOverlays.d.ts.map +1 -1
- package/dist/utils/commandOverlays.js +5 -1
- package/dist/utils/messageFormatting.cjs +12 -0
- package/dist/utils/messageFormatting.d.ts +3 -2
- package/dist/utils/messageFormatting.d.ts.map +1 -1
- package/dist/utils/messageFormatting.js +12 -0
- package/package.json +4 -4
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The mode is selected via USE_ALTERNATE_BUFFER constant.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { TuiAgentBackend } from './agent-backend.js';
|
|
11
11
|
import type { StartupInfo } from './state/types.js';
|
|
12
12
|
import type { SoundNotificationService } from './utils/soundNotification.js';
|
|
13
13
|
interface InkCLIProps {
|
|
14
|
-
agent:
|
|
14
|
+
agent: TuiAgentBackend;
|
|
15
15
|
initialSessionId: string | null;
|
|
16
16
|
initialPrompt?: string | undefined;
|
|
17
17
|
startupInfo: StartupInfo;
|
|
@@ -50,6 +50,6 @@ export interface InkCLIOptions {
|
|
|
50
50
|
/**
|
|
51
51
|
* Start the modern Ink-based CLI
|
|
52
52
|
*/
|
|
53
|
-
export declare function startInkCliRefactored(agent:
|
|
53
|
+
export declare function startInkCliRefactored(agent: TuiAgentBackend, initialSessionId: string | null, options?: InkCLIOptions): Promise<void>;
|
|
54
54
|
export {};
|
|
55
55
|
//# sourceMappingURL=InkCLIRefactored.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InkCLIRefactored.d.ts","sourceRoot":"","sources":["../src/InkCLIRefactored.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"InkCLIRefactored.d.ts","sourceRoot":"","sources":["../src/InkCLIRefactored.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAWpD,OAAO,KAAK,EAAe,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAuB1F,UAAU,WAAW;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC9C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACtC;AA2DD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,wBAAgC,GACnC,EAAE,WAAW,2CAmBb;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,kDAAkD;IAClD,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACpF,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACvC,KAAK,EAAE,eAAe,EACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,GAAE,aAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqRf"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var agent_backend_exports = {};
|
|
20
|
+
__export(agent_backend_exports, {
|
|
21
|
+
getTuiCapabilities: () => getTuiCapabilities,
|
|
22
|
+
isCommandDefinitionSupported: () => isCommandDefinitionSupported,
|
|
23
|
+
isCommandSupported: () => isCommandSupported,
|
|
24
|
+
supportsAttachments: () => supportsAttachments,
|
|
25
|
+
supportsContextStats: () => supportsContextStats,
|
|
26
|
+
supportsPrompts: () => supportsPrompts,
|
|
27
|
+
supportsReasoningCycle: () => supportsReasoningCycle,
|
|
28
|
+
supportsResources: () => supportsResources,
|
|
29
|
+
supportsStartupInfo: () => supportsStartupInfo
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(agent_backend_exports);
|
|
32
|
+
const DEFAULT_CAPABILITIES = {
|
|
33
|
+
prompts: true,
|
|
34
|
+
resources: true,
|
|
35
|
+
attachments: true,
|
|
36
|
+
reasoningCycle: true,
|
|
37
|
+
contextStats: true,
|
|
38
|
+
startupInfo: true
|
|
39
|
+
};
|
|
40
|
+
const COMMAND_CAPABILITY_GATES = [
|
|
41
|
+
{
|
|
42
|
+
capability: "prompts",
|
|
43
|
+
commands: ["prompts", "sysprompt"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
capability: "reasoningCycle",
|
|
47
|
+
commands: ["reasoning"]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
capability: "contextStats",
|
|
51
|
+
commands: ["context", "ctx", "tokens"]
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
function normalizeCommandName(command) {
|
|
55
|
+
return command.trim().toLowerCase();
|
|
56
|
+
}
|
|
57
|
+
function getTuiCapabilities(agent) {
|
|
58
|
+
return {
|
|
59
|
+
...DEFAULT_CAPABILITIES,
|
|
60
|
+
...agent.capabilities,
|
|
61
|
+
...agent.capabilities?.supportedCommands ? {
|
|
62
|
+
supportedCommands: agent.capabilities.supportedCommands.map(normalizeCommandName)
|
|
63
|
+
} : {}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function isCommandSupported(agent, command, definition) {
|
|
67
|
+
const capabilities = getTuiCapabilities(agent);
|
|
68
|
+
const supportedCommands = capabilities.supportedCommands;
|
|
69
|
+
const candidates = /* @__PURE__ */ new Set([normalizeCommandName(command)]);
|
|
70
|
+
if (definition?.name) {
|
|
71
|
+
candidates.add(normalizeCommandName(definition.name));
|
|
72
|
+
}
|
|
73
|
+
for (const alias of definition?.aliases ?? []) {
|
|
74
|
+
candidates.add(normalizeCommandName(alias));
|
|
75
|
+
}
|
|
76
|
+
for (const gate of COMMAND_CAPABILITY_GATES) {
|
|
77
|
+
if (capabilities[gate.capability] === false && gate.commands.some((candidate) => candidates.has(candidate))) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!supportedCommands) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return Array.from(candidates).some((candidate) => supportedCommands.includes(candidate));
|
|
85
|
+
}
|
|
86
|
+
function isCommandDefinitionSupported(agent, definition) {
|
|
87
|
+
return isCommandSupported(agent, definition.name, definition);
|
|
88
|
+
}
|
|
89
|
+
function supportsPrompts(agent) {
|
|
90
|
+
return getTuiCapabilities(agent).prompts ?? true;
|
|
91
|
+
}
|
|
92
|
+
function supportsResources(agent) {
|
|
93
|
+
return getTuiCapabilities(agent).resources ?? true;
|
|
94
|
+
}
|
|
95
|
+
function supportsAttachments(agent) {
|
|
96
|
+
return getTuiCapabilities(agent).attachments ?? true;
|
|
97
|
+
}
|
|
98
|
+
function supportsReasoningCycle(agent) {
|
|
99
|
+
return getTuiCapabilities(agent).reasoningCycle ?? true;
|
|
100
|
+
}
|
|
101
|
+
function supportsContextStats(agent) {
|
|
102
|
+
return getTuiCapabilities(agent).contextStats ?? true;
|
|
103
|
+
}
|
|
104
|
+
function supportsStartupInfo(agent) {
|
|
105
|
+
return getTuiCapabilities(agent).startupInfo ?? true;
|
|
106
|
+
}
|
|
107
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
108
|
+
0 && (module.exports = {
|
|
109
|
+
getTuiCapabilities,
|
|
110
|
+
isCommandDefinitionSupported,
|
|
111
|
+
isCommandSupported,
|
|
112
|
+
supportsAttachments,
|
|
113
|
+
supportsContextStats,
|
|
114
|
+
supportsPrompts,
|
|
115
|
+
supportsReasoningCycle,
|
|
116
|
+
supportsResources,
|
|
117
|
+
supportsStartupInfo
|
|
118
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { AgentEventMap, DextoAgent, SessionMetadata } from '@dexto/core';
|
|
2
|
+
import type { CommandDefinition } from './interactive-commands/command-parser.js';
|
|
3
|
+
export interface TuiAgentCapabilities {
|
|
4
|
+
supportedCommands?: readonly string[];
|
|
5
|
+
prompts?: boolean;
|
|
6
|
+
resources?: boolean;
|
|
7
|
+
attachments?: boolean;
|
|
8
|
+
reasoningCycle?: boolean;
|
|
9
|
+
contextStats?: boolean;
|
|
10
|
+
startupInfo?: boolean;
|
|
11
|
+
}
|
|
12
|
+
type RootLogger = Pick<DextoAgent['logger'], 'debug' | 'info' | 'warn' | 'error' | 'getLevel' | 'getLogFilePath'>;
|
|
13
|
+
interface TuiSessionStats {
|
|
14
|
+
totalSessions: number;
|
|
15
|
+
inMemorySessions: number;
|
|
16
|
+
maxSessions: number;
|
|
17
|
+
}
|
|
18
|
+
export interface TuiEffectiveConfig {
|
|
19
|
+
llm: {
|
|
20
|
+
provider: string;
|
|
21
|
+
model: string;
|
|
22
|
+
maxOutputTokens?: number | null | undefined;
|
|
23
|
+
temperature?: number | null | undefined;
|
|
24
|
+
};
|
|
25
|
+
permissions: {
|
|
26
|
+
mode: string;
|
|
27
|
+
};
|
|
28
|
+
sessions?: {
|
|
29
|
+
maxSessions?: number | undefined;
|
|
30
|
+
sessionTTL?: number | undefined;
|
|
31
|
+
} | undefined;
|
|
32
|
+
mcpServers?: Record<string, unknown> | undefined;
|
|
33
|
+
prompts?: unknown[] | undefined;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface TuiAgentBackend extends Pick<DextoAgent, 'stream' | 'stop' | 'run' | 'listSessions' | 'getSessionMetadata' | 'getSessionHistory' | 'getSessionTitle' | 'setSessionTitle' | 'generateSessionTitle' | 'forkSession' | 'getCurrentLLMConfig' | 'switchLLM' | 'getSupportedProviders' | 'getSupportedModels' | 'getContextStats' | 'clearContext' | 'compactContext' | 'queueMessage' | 'getQueuedMessages' | 'removeQueuedMessage' | 'clearMessageQueue' | 'cancel' | 'searchMessages' | 'listPrompts' | 'refreshPrompts' | 'resolvePrompt' | 'getSystemPrompt' | 'loadToolkits' | 'listResources' | 'setLogLevel' | 'getAllTools' | 'getEnabledTools' | 'getAllMcpTools' | 'setGlobalDisabledTools' | 'setSessionDisabledTools' | 'setSessionAutoApproveTools' | 'getSessionAutoApproveTools' | 'getMcpServersWithStatus' | 'addMcpServer' | 'enableMcpServer' | 'disableMcpServer' | 'removeMcpServer' | 'restartMcpServer' | 'getMcpClients' | 'getMcpFailedConnections'> {
|
|
37
|
+
createSession: (sessionId?: string) => Promise<{
|
|
38
|
+
id: string;
|
|
39
|
+
logger: Pick<RootLogger, 'getLevel' | 'getLogFilePath'>;
|
|
40
|
+
}>;
|
|
41
|
+
getSession: (sessionId: string) => Promise<{
|
|
42
|
+
id: string;
|
|
43
|
+
logger: Pick<RootLogger, 'getLevel' | 'getLogFilePath'>;
|
|
44
|
+
} | undefined>;
|
|
45
|
+
getEffectiveConfig: (sessionId?: string) => TuiEffectiveConfig;
|
|
46
|
+
on: <K extends keyof AgentEventMap>(event: K, listener: AgentEventMap[K] extends void ? () => void : (payload: AgentEventMap[K]) => void, options?: {
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
}) => void;
|
|
49
|
+
emit: <K extends keyof AgentEventMap>(event: K, ...args: AgentEventMap[K] extends void ? [] : [AgentEventMap[K]]) => boolean;
|
|
50
|
+
logger: RootLogger;
|
|
51
|
+
config: {
|
|
52
|
+
agentId: string;
|
|
53
|
+
};
|
|
54
|
+
sessionManager: {
|
|
55
|
+
getSessionMetadata: (sessionId: string) => Promise<SessionMetadata | undefined>;
|
|
56
|
+
getSessionStats: () => Promise<TuiSessionStats>;
|
|
57
|
+
};
|
|
58
|
+
mcpManager: {
|
|
59
|
+
getClients: () => Map<string, unknown>;
|
|
60
|
+
getFailedConnections: () => Record<string, unknown>;
|
|
61
|
+
};
|
|
62
|
+
toolManager: {
|
|
63
|
+
addSessionAutoApproveTools: (sessionId: string, toolNames: string[]) => void | Promise<void>;
|
|
64
|
+
};
|
|
65
|
+
services: {
|
|
66
|
+
hookManager: {
|
|
67
|
+
getHookNames: () => string[];
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
capabilities?: TuiAgentCapabilities;
|
|
71
|
+
}
|
|
72
|
+
export declare function getTuiCapabilities(agent: TuiAgentBackend): TuiAgentCapabilities;
|
|
73
|
+
export declare function isCommandSupported(agent: TuiAgentBackend, command: string, definition?: Pick<CommandDefinition, 'name' | 'aliases'>): boolean;
|
|
74
|
+
export declare function isCommandDefinitionSupported(agent: TuiAgentBackend, definition: Pick<CommandDefinition, 'name' | 'aliases'>): boolean;
|
|
75
|
+
export declare function supportsPrompts(agent: TuiAgentBackend): boolean;
|
|
76
|
+
export declare function supportsResources(agent: TuiAgentBackend): boolean;
|
|
77
|
+
export declare function supportsAttachments(agent: TuiAgentBackend): boolean;
|
|
78
|
+
export declare function supportsReasoningCycle(agent: TuiAgentBackend): boolean;
|
|
79
|
+
export declare function supportsContextStats(agent: TuiAgentBackend): boolean;
|
|
80
|
+
export declare function supportsStartupInfo(agent: TuiAgentBackend): boolean;
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=agent-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-backend.d.ts","sourceRoot":"","sources":["../src/agent-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const DEFAULT_CAPABILITIES = {
|
|
2
|
+
prompts: true,
|
|
3
|
+
resources: true,
|
|
4
|
+
attachments: true,
|
|
5
|
+
reasoningCycle: true,
|
|
6
|
+
contextStats: true,
|
|
7
|
+
startupInfo: true
|
|
8
|
+
};
|
|
9
|
+
const COMMAND_CAPABILITY_GATES = [
|
|
10
|
+
{
|
|
11
|
+
capability: "prompts",
|
|
12
|
+
commands: ["prompts", "sysprompt"]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
capability: "reasoningCycle",
|
|
16
|
+
commands: ["reasoning"]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
capability: "contextStats",
|
|
20
|
+
commands: ["context", "ctx", "tokens"]
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
function normalizeCommandName(command) {
|
|
24
|
+
return command.trim().toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
function getTuiCapabilities(agent) {
|
|
27
|
+
return {
|
|
28
|
+
...DEFAULT_CAPABILITIES,
|
|
29
|
+
...agent.capabilities,
|
|
30
|
+
...agent.capabilities?.supportedCommands ? {
|
|
31
|
+
supportedCommands: agent.capabilities.supportedCommands.map(normalizeCommandName)
|
|
32
|
+
} : {}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function isCommandSupported(agent, command, definition) {
|
|
36
|
+
const capabilities = getTuiCapabilities(agent);
|
|
37
|
+
const supportedCommands = capabilities.supportedCommands;
|
|
38
|
+
const candidates = /* @__PURE__ */ new Set([normalizeCommandName(command)]);
|
|
39
|
+
if (definition?.name) {
|
|
40
|
+
candidates.add(normalizeCommandName(definition.name));
|
|
41
|
+
}
|
|
42
|
+
for (const alias of definition?.aliases ?? []) {
|
|
43
|
+
candidates.add(normalizeCommandName(alias));
|
|
44
|
+
}
|
|
45
|
+
for (const gate of COMMAND_CAPABILITY_GATES) {
|
|
46
|
+
if (capabilities[gate.capability] === false && gate.commands.some((candidate) => candidates.has(candidate))) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!supportedCommands) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return Array.from(candidates).some((candidate) => supportedCommands.includes(candidate));
|
|
54
|
+
}
|
|
55
|
+
function isCommandDefinitionSupported(agent, definition) {
|
|
56
|
+
return isCommandSupported(agent, definition.name, definition);
|
|
57
|
+
}
|
|
58
|
+
function supportsPrompts(agent) {
|
|
59
|
+
return getTuiCapabilities(agent).prompts ?? true;
|
|
60
|
+
}
|
|
61
|
+
function supportsResources(agent) {
|
|
62
|
+
return getTuiCapabilities(agent).resources ?? true;
|
|
63
|
+
}
|
|
64
|
+
function supportsAttachments(agent) {
|
|
65
|
+
return getTuiCapabilities(agent).attachments ?? true;
|
|
66
|
+
}
|
|
67
|
+
function supportsReasoningCycle(agent) {
|
|
68
|
+
return getTuiCapabilities(agent).reasoningCycle ?? true;
|
|
69
|
+
}
|
|
70
|
+
function supportsContextStats(agent) {
|
|
71
|
+
return getTuiCapabilities(agent).contextStats ?? true;
|
|
72
|
+
}
|
|
73
|
+
function supportsStartupInfo(agent) {
|
|
74
|
+
return getTuiCapabilities(agent).startupInfo ?? true;
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
getTuiCapabilities,
|
|
78
|
+
isCommandDefinitionSupported,
|
|
79
|
+
isCommandSupported,
|
|
80
|
+
supportsAttachments,
|
|
81
|
+
supportsContextStats,
|
|
82
|
+
supportsPrompts,
|
|
83
|
+
supportsReasoningCycle,
|
|
84
|
+
supportsResources,
|
|
85
|
+
supportsStartupInfo
|
|
86
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var import_vitest = require("vitest");
|
|
3
|
+
var import_agent_backend = require("./agent-backend.js");
|
|
4
|
+
function createAgent(capabilities) {
|
|
5
|
+
return { capabilities };
|
|
6
|
+
}
|
|
7
|
+
(0, import_vitest.describe)("isCommandSupported", () => {
|
|
8
|
+
(0, import_vitest.it)("blocks capability-gated commands when the capability is disabled", () => {
|
|
9
|
+
const agent = createAgent({ contextStats: false });
|
|
10
|
+
(0, import_vitest.expect)(
|
|
11
|
+
(0, import_agent_backend.isCommandSupported)(agent, "tokens", {
|
|
12
|
+
name: "context",
|
|
13
|
+
aliases: ["ctx", "tokens"]
|
|
14
|
+
})
|
|
15
|
+
).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
(0, import_vitest.it)("requires both capability support and allowlist support when both are configured", () => {
|
|
18
|
+
const agent = createAgent({
|
|
19
|
+
supportedCommands: ["context"],
|
|
20
|
+
contextStats: false
|
|
21
|
+
});
|
|
22
|
+
(0, import_vitest.expect)((0, import_agent_backend.isCommandSupported)(agent, "context", { name: "context", aliases: [] })).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
(0, import_vitest.it)("still allows unrelated commands when only a different capability is disabled", () => {
|
|
25
|
+
const agent = createAgent({ prompts: false });
|
|
26
|
+
(0, import_vitest.expect)((0, import_agent_backend.isCommandSupported)(agent, "help", { name: "help", aliases: ["h"] })).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-backend.test.d.ts","sourceRoot":"","sources":["../src/agent-backend.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
isCommandSupported
|
|
4
|
+
} from "./agent-backend.js";
|
|
5
|
+
function createAgent(capabilities) {
|
|
6
|
+
return { capabilities };
|
|
7
|
+
}
|
|
8
|
+
describe("isCommandSupported", () => {
|
|
9
|
+
it("blocks capability-gated commands when the capability is disabled", () => {
|
|
10
|
+
const agent = createAgent({ contextStats: false });
|
|
11
|
+
expect(
|
|
12
|
+
isCommandSupported(agent, "tokens", {
|
|
13
|
+
name: "context",
|
|
14
|
+
aliases: ["ctx", "tokens"]
|
|
15
|
+
})
|
|
16
|
+
).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it("requires both capability support and allowlist support when both are configured", () => {
|
|
19
|
+
const agent = createAgent({
|
|
20
|
+
supportedCommands: ["context"],
|
|
21
|
+
contextStats: false
|
|
22
|
+
});
|
|
23
|
+
expect(isCommandSupported(agent, "context", { name: "context", aliases: [] })).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it("still allows unrelated commands when only a different capability is disabled", () => {
|
|
26
|
+
const agent = createAgent({ prompts: false });
|
|
27
|
+
expect(isCommandSupported(agent, "help", { name: "help", aliases: ["h"] })).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -38,6 +38,7 @@ var import_ink = require("ink");
|
|
|
38
38
|
var import_core = require("@dexto/core");
|
|
39
39
|
var import_llm_provider_display = require("../utils/llm-provider-display.js");
|
|
40
40
|
var import_chatgpt_rate_limit = require("../utils/chatgpt-rate-limit.js");
|
|
41
|
+
var import_agent_backend = require("../agent-backend.js");
|
|
41
42
|
function Footer({
|
|
42
43
|
agent,
|
|
43
44
|
sessionId,
|
|
@@ -65,6 +66,10 @@ function Footer({
|
|
|
65
66
|
const chatGPTRateLimitHint = showChatGPTRateLimitHint && chatgptRateLimitStatus ? (0, import_chatgpt_rate_limit.getChatGPTRateLimitHint)(chatgptRateLimitStatus) : null;
|
|
66
67
|
const chatGPTRateLimitColor = chatgptRateLimitStatus?.exceeded ? "redBright" : (chatgptRateLimitStatus?.usedPercent ?? 0) >= 90 ? "yellowBright" : "yellow";
|
|
67
68
|
(0, import_react.useEffect)(() => {
|
|
69
|
+
if (!(0, import_agent_backend.supportsContextStats)(agent)) {
|
|
70
|
+
setContextLeft(null);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
68
73
|
if (!sessionId) {
|
|
69
74
|
setContextLeft(null);
|
|
70
75
|
return;
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Footer Component
|
|
3
3
|
* Status line at the bottom showing CWD, branch, and model info.
|
|
4
4
|
*/
|
|
5
|
-
import { type CodexRateLimitSnapshot
|
|
5
|
+
import { type CodexRateLimitSnapshot } from '@dexto/core';
|
|
6
|
+
import { type TuiAgentBackend } from '../agent-backend.js';
|
|
6
7
|
interface FooterProps {
|
|
7
|
-
agent:
|
|
8
|
+
agent: TuiAgentBackend;
|
|
8
9
|
sessionId: string | null;
|
|
9
10
|
modelName: string;
|
|
10
11
|
cwd?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAIH,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAIH,KAAK,sBAAsB,EAC9B,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjF,UAAU,WAAW;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EACnB,KAAK,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,sBAAsB,GACzB,EAAE,WAAW,2CA8Kb"}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
getChatGPTRateLimitHint,
|
|
13
13
|
shouldShowChatGPTRateLimitHint
|
|
14
14
|
} from "../utils/chatgpt-rate-limit.js";
|
|
15
|
+
import { supportsContextStats } from "../agent-backend.js";
|
|
15
16
|
function Footer({
|
|
16
17
|
agent,
|
|
17
18
|
sessionId,
|
|
@@ -39,6 +40,10 @@ function Footer({
|
|
|
39
40
|
const chatGPTRateLimitHint = showChatGPTRateLimitHint && chatgptRateLimitStatus ? getChatGPTRateLimitHint(chatgptRateLimitStatus) : null;
|
|
40
41
|
const chatGPTRateLimitColor = chatgptRateLimitStatus?.exceeded ? "redBright" : (chatgptRateLimitStatus?.usedPercent ?? 0) >= 90 ? "yellowBright" : "yellow";
|
|
41
42
|
useEffect(() => {
|
|
43
|
+
if (!supportsContextStats(agent)) {
|
|
44
|
+
setContextLeft(null);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
42
47
|
if (!sessionId) {
|
|
43
48
|
setContextLeft(null);
|
|
44
49
|
return;
|
|
@@ -38,6 +38,7 @@ var import_path = __toESM(require("path"), 1);
|
|
|
38
38
|
var import_messageFormatting = require("../utils/messageFormatting.js");
|
|
39
39
|
var import_useTerminalSize = require("../hooks/useTerminalSize.js");
|
|
40
40
|
var import_overlaySizing = require("../utils/overlaySizing.js");
|
|
41
|
+
var import_agent_backend = require("../agent-backend.js");
|
|
41
42
|
function getResourceMatchScore(resource, query) {
|
|
42
43
|
if (!query) return 3;
|
|
43
44
|
const lowerQuery = query.toLowerCase();
|
|
@@ -118,6 +119,13 @@ const ResourceAutocompleteInner = (0, import_react.forwardRef)(
|
|
|
118
119
|
setIsLoading(true);
|
|
119
120
|
const fetchResources = async () => {
|
|
120
121
|
try {
|
|
122
|
+
if (!(0, import_agent_backend.supportsResources)(agent)) {
|
|
123
|
+
if (!cancelled) {
|
|
124
|
+
setResources([]);
|
|
125
|
+
setIsLoading(false);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
121
129
|
const resourceSet = await agent.listResources();
|
|
122
130
|
const resourceList = Object.values(resourceSet);
|
|
123
131
|
if (!cancelled) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Key } from '../hooks/useInputOrchestrator.js';
|
|
3
3
|
import type { ResourceMetadata } from '@dexto/core';
|
|
4
|
-
import type
|
|
4
|
+
import { type TuiAgentBackend } from '../agent-backend.js';
|
|
5
5
|
export interface ResourceAutocompleteHandle {
|
|
6
6
|
handleInput: (input: string, key: Key) => boolean;
|
|
7
7
|
}
|
|
@@ -11,7 +11,7 @@ interface ResourceAutocompleteProps {
|
|
|
11
11
|
onSelectResource: (resource: ResourceMetadata) => void;
|
|
12
12
|
onLoadIntoInput?: (text: string) => void;
|
|
13
13
|
onClose: () => void;
|
|
14
|
-
agent:
|
|
14
|
+
agent: TuiAgentBackend;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Inner component - wrapped with React.memo below
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceAutocomplete.d.ts","sourceRoot":"","sources":["../../src/components/ResourceAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ResourceAutocomplete.d.ts","sourceRoot":"","sources":["../../src/components/ResourceAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;CAC1B;AAsFD;;GAEG;AACH,QAAA,MAAM,yBAAyB,8GAmY9B,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,oBAAoB,EAErB,OAAO,yBAAyB,CAAC;AAEtC,eAAe,oBAAoB,CAAC"}
|
|
@@ -13,6 +13,7 @@ import path from "path";
|
|
|
13
13
|
import { centerTruncatePath } from "../utils/messageFormatting.js";
|
|
14
14
|
import { useTerminalSize } from "../hooks/useTerminalSize.js";
|
|
15
15
|
import { getMaxVisibleItemsForTerminalRows } from "../utils/overlaySizing.js";
|
|
16
|
+
import { supportsResources } from "../agent-backend.js";
|
|
16
17
|
function getResourceMatchScore(resource, query) {
|
|
17
18
|
if (!query) return 3;
|
|
18
19
|
const lowerQuery = query.toLowerCase();
|
|
@@ -93,6 +94,13 @@ const ResourceAutocompleteInner = forwardRef(
|
|
|
93
94
|
setIsLoading(true);
|
|
94
95
|
const fetchResources = async () => {
|
|
95
96
|
try {
|
|
97
|
+
if (!supportsResources(agent)) {
|
|
98
|
+
if (!cancelled) {
|
|
99
|
+
setResources([]);
|
|
100
|
+
setIsLoading(false);
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
96
104
|
const resourceSet = await agent.listResources();
|
|
97
105
|
const resourceList = Object.values(resourceSet);
|
|
98
106
|
if (!cancelled) {
|
|
@@ -37,6 +37,7 @@ var import_ink = require("ink");
|
|
|
37
37
|
var import_commands = require("../interactive-commands/commands.js");
|
|
38
38
|
var import_useTerminalSize = require("../hooks/useTerminalSize.js");
|
|
39
39
|
var import_overlaySizing = require("../utils/overlaySizing.js");
|
|
40
|
+
var import_agent_backend = require("../agent-backend.js");
|
|
40
41
|
function getPromptMatchScore(prompt, query) {
|
|
41
42
|
if (!query) return 3;
|
|
42
43
|
const lowerQuery = query.toLowerCase();
|
|
@@ -132,12 +133,11 @@ const SlashCommandAutocompleteInner = (0, import_react.forwardRef)(function Slas
|
|
|
132
133
|
setIsLoading(true);
|
|
133
134
|
const fetchCommands = async () => {
|
|
134
135
|
try {
|
|
135
|
-
const
|
|
136
|
-
const promptList = Object.values(promptSet).map((p) => ({
|
|
136
|
+
const promptList = (0, import_agent_backend.supportsPrompts)(agent) ? Object.values(await agent.listPrompts()).map((p) => ({
|
|
137
137
|
...p,
|
|
138
138
|
kind: "prompt"
|
|
139
|
-
}));
|
|
140
|
-
const allCommands = (0, import_commands.
|
|
139
|
+
})) : [];
|
|
140
|
+
const allCommands = (0, import_commands.getAvailableCommands)(agent);
|
|
141
141
|
const commandList = allCommands.map((cmd) => ({
|
|
142
142
|
kind: "system",
|
|
143
143
|
name: cmd.name,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Key } from '../hooks/useInputOrchestrator.js';
|
|
3
3
|
import type { PromptInfo } from '@dexto/core';
|
|
4
|
-
import type
|
|
4
|
+
import { type TuiAgentBackend } from '../agent-backend.js';
|
|
5
5
|
export interface SlashCommandAutocompleteHandle {
|
|
6
6
|
handleInput: (input: string, key: Key) => boolean;
|
|
7
7
|
}
|
|
@@ -13,7 +13,7 @@ interface SlashCommandAutocompleteProps {
|
|
|
13
13
|
onLoadIntoInput?: (command: string) => void;
|
|
14
14
|
onSubmitRaw?: ((text: string) => Promise<void> | void) | undefined;
|
|
15
15
|
onClose: () => void;
|
|
16
|
-
agent:
|
|
16
|
+
agent: TuiAgentBackend;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Inner component - wrapped with React.memo below
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlashCommandAutocomplete.d.ts","sourceRoot":"","sources":["../../src/components/SlashCommandAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SlashCommandAutocomplete.d.ts","sourceRoot":"","sources":["../../src/components/SlashCommandAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,WAAW,8BAA8B;IAC3C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,6BAA6B;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACnE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;CAC1B;AAmGD;;GAEG;AACH,QAAA,MAAM,6BAA6B,sHA6bjC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAEhC,OAAO,6BAA6B,CAAC"}
|
|
@@ -9,9 +9,10 @@ import React, {
|
|
|
9
9
|
useImperativeHandle
|
|
10
10
|
} from "react";
|
|
11
11
|
import { Box, Text } from "ink";
|
|
12
|
-
import {
|
|
12
|
+
import { getAvailableCommands } from "../interactive-commands/commands.js";
|
|
13
13
|
import { useTerminalSize } from "../hooks/useTerminalSize.js";
|
|
14
14
|
import { getMaxVisibleItemsForTerminalRows } from "../utils/overlaySizing.js";
|
|
15
|
+
import { supportsPrompts } from "../agent-backend.js";
|
|
15
16
|
function getPromptMatchScore(prompt, query) {
|
|
16
17
|
if (!query) return 3;
|
|
17
18
|
const lowerQuery = query.toLowerCase();
|
|
@@ -107,12 +108,11 @@ const SlashCommandAutocompleteInner = forwardRef(function SlashCommandAutocomple
|
|
|
107
108
|
setIsLoading(true);
|
|
108
109
|
const fetchCommands = async () => {
|
|
109
110
|
try {
|
|
110
|
-
const
|
|
111
|
-
const promptList = Object.values(promptSet).map((p) => ({
|
|
111
|
+
const promptList = supportsPrompts(agent) ? Object.values(await agent.listPrompts()).map((p) => ({
|
|
112
112
|
...p,
|
|
113
113
|
kind: "prompt"
|
|
114
|
-
}));
|
|
115
|
-
const allCommands =
|
|
114
|
+
})) : [];
|
|
115
|
+
const allCommands = getAvailableCommands(agent);
|
|
116
116
|
const commandList = allCommands.map((cmd) => ({
|
|
117
117
|
kind: "system",
|
|
118
118
|
name: cmd.name,
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* - Line 2: Meta info (time, tokens, cancel hint)
|
|
8
8
|
* This 2-line layout prevents truncation on any terminal width.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { TuiAgentBackend } from '../agent-backend.js';
|
|
11
11
|
interface StatusBarProps {
|
|
12
|
-
agent:
|
|
12
|
+
agent: TuiAgentBackend;
|
|
13
13
|
isProcessing: boolean;
|
|
14
14
|
isThinking: boolean;
|
|
15
15
|
isCompacting: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,UAAU,cAAc;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wCAAwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAuB,EACvB,kBAA0B,EAC1B,YAAmB,EACnB,QAAgB,EAChB,cAAsB,EACtB,gBAAwB,EACxB,sBAA0B,GAC7B,EAAE,cAAc,kDAwIhB"}
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* - Copy mode toggle (Ctrl+S)
|
|
10
10
|
* - Selection hint when user tries to drag without Option key
|
|
11
11
|
*/
|
|
12
|
-
import type {
|
|
12
|
+
import type { TuiAgentBackend } from '../../agent-backend.js';
|
|
13
13
|
import type { StartupInfo } from '../../state/types.js';
|
|
14
14
|
interface AlternateBufferCLIProps {
|
|
15
|
-
agent:
|
|
15
|
+
agent: TuiAgentBackend;
|
|
16
16
|
initialSessionId: string | null;
|
|
17
17
|
initialPrompt?: string | undefined;
|
|
18
18
|
startupInfo: StartupInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlternateBufferCLI.d.ts","sourceRoot":"","sources":["../../../src/components/modes/AlternateBufferCLI.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"AlternateBufferCLI.d.ts","sourceRoot":"","sources":["../../../src/components/modes/AlternateBufferCLI.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA+BjE,UAAU,uBAAuB;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,cAAc,EACd,wBAAgC,EAChC,kBAAkB,EAClB,YAAmB,GACtB,EAAE,uBAAuB,2CAkXzB"}
|