@lingxi-ai-cn/dsh-tui-runtime 0.1.0-rc.8
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/LICENSE +21 -0
- package/README.md +109 -0
- package/README.zh.md +109 -0
- package/lib/index.js +10552 -0
- package/lib/invariant.js +9 -0
- package/lib/types/agent-view.d.ts +40 -0
- package/lib/types/app.d.ts +121 -0
- package/lib/types/composer.d.ts +188 -0
- package/lib/types/detail.d.ts +24 -0
- package/lib/types/footer.d.ts +85 -0
- package/lib/types/history-search.d.ts +58 -0
- package/lib/types/host.d.ts +210 -0
- package/lib/types/index.d.ts +60 -0
- package/lib/types/invariant.d.ts +6 -0
- package/lib/types/keybindings.d.ts +165 -0
- package/lib/types/markdown.d.ts +9 -0
- package/lib/types/open-url.d.ts +9 -0
- package/lib/types/plugin-hub.d.ts +158 -0
- package/lib/types/resume.d.ts +66 -0
- package/lib/types/rewind.d.ts +37 -0
- package/lib/types/sanitize.d.ts +9 -0
- package/lib/types/session-export.d.ts +29 -0
- package/lib/types/session-lifecycle.d.ts +20 -0
- package/lib/types/startup-logo.d.ts +45 -0
- package/lib/types/store.d.ts +88 -0
- package/lib/types/suggestion.d.ts +99 -0
- package/lib/types/terminal-input.d.ts +69 -0
- package/lib/types/terminal-session.d.ts +129 -0
- package/lib/types/theme.d.ts +76 -0
- package/lib/types/todo-panel.d.ts +12 -0
- package/lib/types/tool-card.d.ts +24 -0
- package/lib/types/tool-group.d.ts +10 -0
- package/lib/types/transcript-search.d.ts +67 -0
- package/lib/types/transcript-view.d.ts +32 -0
- package/lib/types/transcript.d.ts +159 -0
- package/lib/types/viewport.d.ts +211 -0
- package/lib/types/work-panel.d.ts +28 -0
- package/lib/types/work.d.ts +100 -0
- package/package.json +104 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/** Supported DeepSeek Harness imports and optional-host compatibility adapters. */
|
|
2
|
+
import type { FileSystem, FsTarget } from '@deepseek-ai/dsh-fs';
|
|
3
|
+
import type { CallId, ContentBlock as HostContentBlock, LlmRuntime } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import type { ApprovalRequest as HostApprovalRequest } from '@deepseek-ai/dsh-user-approval';
|
|
5
|
+
import type { SessionEvent, SessionId as HostSessionId } from '@deepseek-ai/dsh-session';
|
|
6
|
+
import type { SubagentRunId, SubagentStopReason } from '@deepseek-ai/dsh-subagent';
|
|
7
|
+
import { settingsNamespace as hostSettingsNamespace } from '@deepseek-ai/dsh-settings';
|
|
8
|
+
/**
|
|
9
|
+
* Additive event shapes emitted by newer compatible Hosts. Official rc.8 can
|
|
10
|
+
* replay logs without them, while the TUI remains ready to project them when
|
|
11
|
+
* a Host provides the enhanced scheduler and delegation lifecycle.
|
|
12
|
+
*/
|
|
13
|
+
declare module '@deepseek-ai/dsh-session/types' {
|
|
14
|
+
interface SessionEventMap {
|
|
15
|
+
'tool/execution-group': {
|
|
16
|
+
turn: number;
|
|
17
|
+
step: number;
|
|
18
|
+
group: number;
|
|
19
|
+
mode: 'parallel' | 'exclusive';
|
|
20
|
+
members: {
|
|
21
|
+
callId: CallId;
|
|
22
|
+
name: string;
|
|
23
|
+
arguments: string;
|
|
24
|
+
}[];
|
|
25
|
+
closed: boolean;
|
|
26
|
+
};
|
|
27
|
+
'subagent/delegation-start': {
|
|
28
|
+
runId: SubagentRunId;
|
|
29
|
+
callId: CallId;
|
|
30
|
+
childId: HostSessionId;
|
|
31
|
+
provider: string;
|
|
32
|
+
label?: string;
|
|
33
|
+
local: boolean;
|
|
34
|
+
};
|
|
35
|
+
'subagent/delegation-end': {
|
|
36
|
+
runId: SubagentRunId;
|
|
37
|
+
stopReason: SubagentStopReason;
|
|
38
|
+
lastAssistantMessage?: HostContentBlock[];
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export type { Context } from '@deepseek-ai/cordis';
|
|
43
|
+
export type { InvariantInstaller } from '@deepseek-ai/dsh-invariants';
|
|
44
|
+
export { default as z } from '@deepseek-ai/schemastery';
|
|
45
|
+
export { installModelSelection, } from '@deepseek-ai/dsh-agent';
|
|
46
|
+
export type { Agent, AgentHandle, AgentStatus, ModelSelection, ModelSelectionRef, } from '@deepseek-ai/dsh-agent';
|
|
47
|
+
export { resolveSessionPreset } from '@deepseek-ai/dsh-agent-presets';
|
|
48
|
+
export type { CommandDescriptor, CommandInvocation, CommandResult } from '@deepseek-ai/dsh-commands';
|
|
49
|
+
export { JobId } from '@deepseek-ai/dsh-jobs';
|
|
50
|
+
export type { JobSnapshot, JobStatus } from '@deepseek-ai/dsh-jobs';
|
|
51
|
+
export { createUserMessage, errorChain } from '@deepseek-ai/dsh-llm';
|
|
52
|
+
export type { ContentBlock, StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
53
|
+
export { runNativeCommand } from '@deepseek-ai/dsh-native-command';
|
|
54
|
+
export type { PermissionSelect } from '@deepseek-ai/dsh-permission-presets';
|
|
55
|
+
export { isAppendSurfaceEvent, } from '@deepseek-ai/dsh-session/surface';
|
|
56
|
+
export { SESSION_FORMAT_VERSION, SessionId, } from '@deepseek-ai/dsh-session';
|
|
57
|
+
export type { SessionEvent, SessionId as SessionIdType, TodoItem } from '@deepseek-ai/dsh-session';
|
|
58
|
+
export type { SessionProjectionCache } from '@deepseek-ai/dsh-session-projection-cache';
|
|
59
|
+
export type { SessionRecord } from '@deepseek-ai/dsh-session-query';
|
|
60
|
+
export { installSettingsSection } from '@deepseek-ai/dsh-settings';
|
|
61
|
+
/** Validate one TUI-owned settings namespace through the supported Host API. */
|
|
62
|
+
export declare const settingsNamespace: typeof hostSettingsNamespace;
|
|
63
|
+
export type { SubagentDescendantListEntry, SubagentRunEndInfo, SubagentRunInfo, SubagentTimingProjection, } from '@deepseek-ai/dsh-subagent';
|
|
64
|
+
export type { ContextPressureProjection } from '@deepseek-ai/dsh-token-meter';
|
|
65
|
+
export type { ToolCallView, ToolDefinition, ToolResultView } from '@deepseek-ai/dsh-tools';
|
|
66
|
+
export { UserQuestionError } from '@deepseek-ai/dsh-user-questions';
|
|
67
|
+
export type { AskUserQuestionAnswer, AskUserQuestionAnswerItem, AskUserQuestionItem, AskUserQuestionRequest, } from '@deepseek-ai/dsh-user-questions';
|
|
68
|
+
export type { ApprovalOutcome } from '@deepseek-ai/dsh-user-approval';
|
|
69
|
+
/** Why a fresh TUI Agent exists; older supported Hosts ignore this additive field. */
|
|
70
|
+
export type AgentCreateSource = 'startup' | 'clear' | 'compact' | 'rewind';
|
|
71
|
+
/** Bounded path-completion result available on newer Hosts. */
|
|
72
|
+
export interface FsPathCompletionResult {
|
|
73
|
+
/** Stable workspace-relative matches. */
|
|
74
|
+
readonly entries: readonly {
|
|
75
|
+
readonly path: string;
|
|
76
|
+
readonly type: 'file' | 'directory';
|
|
77
|
+
}[];
|
|
78
|
+
/** Whether a provider bound truncated the result. */
|
|
79
|
+
readonly truncated: boolean;
|
|
80
|
+
}
|
|
81
|
+
/** One optional provider-owned authentication prompt. */
|
|
82
|
+
export type LlmAuthenticationPrompt = {
|
|
83
|
+
readonly signal?: AbortSignal;
|
|
84
|
+
} & ({
|
|
85
|
+
readonly type: 'text' | 'secret' | 'manual-code';
|
|
86
|
+
readonly message: string;
|
|
87
|
+
readonly placeholder?: string;
|
|
88
|
+
} | {
|
|
89
|
+
readonly type: 'select';
|
|
90
|
+
readonly message: string;
|
|
91
|
+
readonly options: readonly {
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly label: string;
|
|
94
|
+
readonly description?: string;
|
|
95
|
+
}[];
|
|
96
|
+
});
|
|
97
|
+
/** One optional provider-owned authentication progress event. */
|
|
98
|
+
export type LlmAuthenticationEvent = {
|
|
99
|
+
readonly type: 'info' | 'progress';
|
|
100
|
+
readonly message: string;
|
|
101
|
+
} | {
|
|
102
|
+
readonly type: 'auth-url';
|
|
103
|
+
readonly url: string;
|
|
104
|
+
readonly instructions?: string;
|
|
105
|
+
} | {
|
|
106
|
+
readonly type: 'device-code';
|
|
107
|
+
readonly userCode: string;
|
|
108
|
+
readonly verificationUri: string;
|
|
109
|
+
readonly intervalSeconds?: number;
|
|
110
|
+
readonly expiresInSeconds?: number;
|
|
111
|
+
};
|
|
112
|
+
/** Callbacks borrowed by an optional provider-owned authentication flow. */
|
|
113
|
+
export interface LlmAuthenticationInteraction {
|
|
114
|
+
readonly signal?: AbortSignal;
|
|
115
|
+
prompt(prompt: LlmAuthenticationPrompt): Promise<string>;
|
|
116
|
+
notify(event: LlmAuthenticationEvent): void;
|
|
117
|
+
}
|
|
118
|
+
/** Non-secret authentication state projected by a newer Host. */
|
|
119
|
+
export interface LlmAuthenticationInfo {
|
|
120
|
+
readonly configured: boolean;
|
|
121
|
+
readonly source?: string;
|
|
122
|
+
readonly methods: readonly {
|
|
123
|
+
readonly id: string;
|
|
124
|
+
readonly name: string;
|
|
125
|
+
}[];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Read provider authentication when the Host exposes that optional seam.
|
|
129
|
+
* Older Hosts treat registered routes as already configured and offer no login action.
|
|
130
|
+
* @param llm - active Host LLM runtime.
|
|
131
|
+
* @param provider - registered provider route.
|
|
132
|
+
* @returns provider authentication projection or the legacy configured fallback.
|
|
133
|
+
*/
|
|
134
|
+
export declare function hostAuthentication(llm: LlmRuntime, provider: string): Promise<LlmAuthenticationInfo>;
|
|
135
|
+
/**
|
|
136
|
+
* Run an authentication method previously returned by {@link hostAuthentication}.
|
|
137
|
+
* @param llm - active Host LLM runtime.
|
|
138
|
+
* @param provider - registered provider route.
|
|
139
|
+
* @param method - provider-owned method id.
|
|
140
|
+
* @param interaction - borrowed TUI callbacks.
|
|
141
|
+
*/
|
|
142
|
+
export declare function hostLogin(llm: LlmRuntime, provider: string, method: string, interaction: LlmAuthenticationInteraction): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Complete workspace paths when the Host exposes bounded completion.
|
|
145
|
+
* Older Hosts return no suggestions while ordinary path submission remains available.
|
|
146
|
+
* @param fs - active Host filesystem service.
|
|
147
|
+
* @param root - resolved workspace root.
|
|
148
|
+
* @param query - workspace-relative query.
|
|
149
|
+
* @param options - complete traversal and result bounds.
|
|
150
|
+
* @returns bounded matches, or an empty legacy result.
|
|
151
|
+
*/
|
|
152
|
+
export declare function hostCompletePaths(fs: FileSystem, root: FsTarget, query: string, options: {
|
|
153
|
+
readonly maxDepth: number;
|
|
154
|
+
readonly maxItems: number;
|
|
155
|
+
readonly maxScannedEntries: number;
|
|
156
|
+
readonly signal?: AbortSignal;
|
|
157
|
+
}): Promise<FsPathCompletionResult>;
|
|
158
|
+
/** One provider-neutral approval presentation projected by newer Hosts. */
|
|
159
|
+
export type ApprovalPresentation = {
|
|
160
|
+
readonly kind: 'terminal';
|
|
161
|
+
readonly command: string;
|
|
162
|
+
readonly cwd?: string;
|
|
163
|
+
readonly policy?: string;
|
|
164
|
+
} | {
|
|
165
|
+
readonly kind: 'diff';
|
|
166
|
+
readonly files: readonly {
|
|
167
|
+
readonly path: string;
|
|
168
|
+
readonly additions: number;
|
|
169
|
+
readonly deletions: number;
|
|
170
|
+
readonly preview?: readonly string[];
|
|
171
|
+
}[];
|
|
172
|
+
} | {
|
|
173
|
+
readonly kind: 'filesystem';
|
|
174
|
+
readonly path: string;
|
|
175
|
+
readonly operation: 'read' | 'write' | 'edit' | 'delete' | 'move' | 'other';
|
|
176
|
+
readonly workspaceRoot?: string;
|
|
177
|
+
} | {
|
|
178
|
+
readonly kind: 'web';
|
|
179
|
+
readonly url: string;
|
|
180
|
+
readonly host: string;
|
|
181
|
+
readonly method?: string;
|
|
182
|
+
readonly purpose?: string;
|
|
183
|
+
} | {
|
|
184
|
+
readonly kind: 'generic';
|
|
185
|
+
readonly toolName: string;
|
|
186
|
+
readonly args?: unknown;
|
|
187
|
+
};
|
|
188
|
+
/** Approval request accepted from either the legacy Host or its presentation-aware successor. */
|
|
189
|
+
export type ApprovalRequest = HostApprovalRequest & {
|
|
190
|
+
readonly presentation?: ApprovalPresentation;
|
|
191
|
+
};
|
|
192
|
+
/** Why a Session event anchor cannot select a complete turn. */
|
|
193
|
+
type SessionForkAnchorUnavailableReason = 'no-completed-turn' | 'anchored-turn-open';
|
|
194
|
+
/** Result of selecting a complete, between-turn Session seed prefix. */
|
|
195
|
+
export type SessionForkAnchorResolution = {
|
|
196
|
+
readonly kind: 'selected';
|
|
197
|
+
readonly boundarySeq: number;
|
|
198
|
+
readonly seedLength: number;
|
|
199
|
+
} | {
|
|
200
|
+
readonly kind: 'unavailable';
|
|
201
|
+
readonly reason: SessionForkAnchorUnavailableReason;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Map a human event anchor to the complete turn prefix retained by a rewind.
|
|
205
|
+
* @param events - contiguous durable Session log.
|
|
206
|
+
* @param atSeq - optional event sequence inside the turn to retain.
|
|
207
|
+
* @returns safe seed boundary or why no completed turn is available.
|
|
208
|
+
*/
|
|
209
|
+
export declare function resolveSessionForkAnchor(events: readonly SessionEvent[], atSeq?: number): SessionForkAnchorResolution;
|
|
210
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@lingxi-ai-cn/dsh-tui-runtime` — one full-screen terminal frontend over an owned,
|
|
3
|
+
* in-process Agent and its durable Session log.
|
|
4
|
+
*/
|
|
5
|
+
import { z, type Context } from './host.ts';
|
|
6
|
+
export declare const name = "tui";
|
|
7
|
+
export declare const inject: string[];
|
|
8
|
+
/** TUI application configuration resolved from its startup provider. */
|
|
9
|
+
export interface Config {
|
|
10
|
+
/** Persisted TUI Session to resume; absent creates a new Session. */
|
|
11
|
+
resume?: string;
|
|
12
|
+
/** Maximum Session rows mounted in the resume picker. */
|
|
13
|
+
maxResumeOptions?: number;
|
|
14
|
+
/** Maximum concurrent metadata reads in one resume scan. */
|
|
15
|
+
resumeScanConcurrency?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const Config: z<Config>;
|
|
18
|
+
/** Mount one TUI application lifecycle. */
|
|
19
|
+
export declare function apply(ctx: Context, config: Config): void;
|
|
20
|
+
export type { TranscriptCompactionNode, TranscriptNode, TranscriptTextNode, TranscriptTodoNode, TranscriptToolGroupNode, TranscriptToolNode, } from './transcript.ts';
|
|
21
|
+
export { foldTranscript, TuiTranscriptProjectionCache } from './transcript.ts';
|
|
22
|
+
export { TuiTranscriptDetailCache, tuiTranscriptDetailText } from './detail.ts';
|
|
23
|
+
export { createComposerState, deleteComposerText, insertComposerPasteReference, insertComposerText, isLargeComposerPaste, layoutComposer, materializeComposerText, moveComposerCursor, redoComposerEdit, replaceComposerText, restoreTuiComposerDraft, toggleTuiComposerStash, traverseComposerHistory, tuiComposerDraft, undoComposerEdit, } from './composer.ts';
|
|
24
|
+
export { DEFAULT_TUI_SETTINGS, resolveTuiTheme, TUI_SETTINGS_NAMESPACE, TUI_SETTINGS_SCHEMA, TUI_THEME_PREFERENCES, TuiThemeProvider, useTuiTheme, } from './theme.tsx';
|
|
25
|
+
export type { TuiSemanticThemeTokens, TuiSettings, TuiTheme, TuiThemePreference, } from './theme.tsx';
|
|
26
|
+
export type { TuiComposerDraft, TuiComposerEditHistory, TuiComposerEditKind, TuiComposerPasteReference, TuiComposerSnapshot, TuiComposerStashTransition, } from './composer.ts';
|
|
27
|
+
export { cancelTuiHistorySearch, nextTuiHistorySearchMatch, startTuiHistorySearch, tuiHistorySearchResult, updateTuiHistorySearchQuery, } from './history-search.ts';
|
|
28
|
+
export type { TuiHistorySearchResult, TuiHistorySearchState } from './history-search.ts';
|
|
29
|
+
export { normalizeTuiTranscriptSearchText, resolveTuiTranscriptSearchHit, TuiTranscriptSearchIndex, tuiTranscriptSearchSegments, } from './transcript-search.ts';
|
|
30
|
+
export type { TuiTranscriptSearchDocument, TuiTranscriptSearchHit, TuiTranscriptSearchSegment, } from './transcript-search.ts';
|
|
31
|
+
export { moveTuiFooterSelection, tuiFooterItems, tuiFooterStatusLine, tuiSelectedFooterLine, visibleTuiFooterItems, } from './footer.ts';
|
|
32
|
+
export type { TuiFooterItemDescriptor, TuiFooterItemId, TuiFooterSources, TuiFooterTranscriptPosition, } from './footer.ts';
|
|
33
|
+
export { terminalMarkdownText } from './markdown.ts';
|
|
34
|
+
export { terminalSafe } from './sanitize.ts';
|
|
35
|
+
export { filterTuiResumeCandidates, formatTuiRelativeTime, sortTuiResumeCandidates, summarizeTuiResumeCandidate, } from './resume.ts';
|
|
36
|
+
export type { TuiResumeCandidate, TuiResumeDialogSnapshot, TuiResumeScope, } from './resume.ts';
|
|
37
|
+
export { resolveTuiSessionExportDirectory } from './session-export.ts';
|
|
38
|
+
export type { TuiSessionExportDialogSnapshot, TuiSessionExportPhase } from './session-export.ts';
|
|
39
|
+
export { tuiRewindCandidates } from './rewind.ts';
|
|
40
|
+
export type { TuiRewindCandidate, TuiRewindDialogSnapshot } from './rewind.ts';
|
|
41
|
+
export { acceptTuiSuggestion, commandSuggestionState, moveTuiSuggestion, pathSuggestionQuery, pathSuggestionState, visibleTuiSuggestions, } from './suggestion.ts';
|
|
42
|
+
export type { TuiPathSuggestionQuery, TuiSuggestionAcceptance, TuiSuggestionItem, TuiSuggestionKind, TuiSuggestionState, TuiSuggestionStatus, } from './suggestion.ts';
|
|
43
|
+
export { effectiveTuiInteractionDescriptors, matchTuiInteractionAction, resolveTuiInteractionContext, resolveTuiInteractionRegistry, TUI_INTERACTION_ACTION_IDS, TUI_INTERACTION_CONTEXT_PRIORITY, TUI_INTERACTION_REGISTRY, TUI_KEYBINDING_OVERRIDES_SCHEMA, tuiInteractionHelpLines, validateTuiKeybindingOverrides, } from './keybindings.ts';
|
|
44
|
+
export type { TuiInteractionActionId, TuiInteractionBinding, TuiInteractionCapabilities, TuiInteractionContext, TuiInteractionDescriptor, TuiInteractionHelpLine, TuiInteractionModeState, TuiKeybindingOverrides, TuiKeypress, } from './keybindings.ts';
|
|
45
|
+
export { formatTuiPluginHubRelativeTime, formatTuiPluginHubStars, tuiPluginHubCardHeight, tuiPluginHubCardLayout, tuiPluginHubDetailLines, tuiPluginHubInstalledRows, tuiPluginHubNextSort, tuiPluginHubCategoryLabel, tuiPluginHubNextCategory, tuiPluginHubPlanLines, tuiPluginHubRows, tuiPluginHubSortLabel, } from './plugin-hub.ts';
|
|
46
|
+
export type { TuiPluginHubCard, TuiPluginHubCardLayout, TuiPluginHubDetailLine, TuiPluginHubDialogSnapshot, TuiPluginHubLineTone, TuiPluginHubRow, } from './plugin-hub.ts';
|
|
47
|
+
export { InteractionStore, SessionEventStore } from './store.ts';
|
|
48
|
+
export { TerminalSession } from './terminal-session.ts';
|
|
49
|
+
export { applyTuiTerminalReply, DEFAULT_TUI_TERMINAL_CAPABILITIES, } from './terminal-session.ts';
|
|
50
|
+
export type { TuiClipboardResult, TuiTerminalCapabilities, TuiTerminalColorDepth, TuiTerminalKeyboardProtocol, TuiTerminalNegotiationOptions, } from './terminal-session.ts';
|
|
51
|
+
export { TuiAgentViewStateCache } from './agent-view.ts';
|
|
52
|
+
export type { TuiAgentViewDescriptor } from './agent-view.ts';
|
|
53
|
+
export { EMPTY_TUI_WORK_SNAPSHOT, projectTuiWork } from './work.ts';
|
|
54
|
+
export type { TuiObservedSubagentRun, TuiWorkAgentSnapshot, TuiWorkItemState, TuiWorkItemView, TuiWorkProjectionInput, TuiWorkSnapshot, TuiWorkSummary, } from './work.ts';
|
|
55
|
+
export { formatTuiWorkElapsed, formatTuiWorkOwner } from './work-panel.tsx';
|
|
56
|
+
export { previousTranscriptPageAnchor, selectTranscriptPage, selectTranscriptWindow, terminalWrappedLines, TuiTranscriptScrollController, TuiTranscriptViewportIndex, } from './viewport.ts';
|
|
57
|
+
export type { TuiTranscriptViewportAnchor, TuiTranscriptViewportStats, TuiTranscriptVirtualWindow, } from './viewport.ts';
|
|
58
|
+
export { TuiTerminalInputDecoder } from './terminal-input.ts';
|
|
59
|
+
export type { TuiTerminalInputEvent, TuiTerminalInputWait, } from './terminal-input.ts';
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Package-owned invariant companion for `@lingxi-ai-cn/dsh-tui-runtime`. */
|
|
2
|
+
import type { Context } from './host.ts';
|
|
3
|
+
export declare const name = "tui-invariant";
|
|
4
|
+
export declare const inject: string[];
|
|
5
|
+
export declare const apply: (ctx: Context) => Promise<() => void>;
|
|
6
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/** Native-TUI interaction actions, contexts, defaults, and settings overrides. */
|
|
2
|
+
import { z } from './host.ts';
|
|
3
|
+
/** Input ownership contexts supported by the native TUI. */
|
|
4
|
+
export type TuiInteractionContext = 'Global' | 'Composer' | 'Suggestion' | 'HistorySearch' | 'TranscriptSearch' | 'Transcript' | 'Detail' | 'PluginHub' | 'Dialog' | 'Work' | 'Footer' | 'Approval';
|
|
5
|
+
/** Stable action identifiers consumed by input dispatch and help rendering. */
|
|
6
|
+
export type TuiInteractionActionId = 'app.interrupt' | 'view.root' | 'composer.submit' | 'composer.newline' | 'composer.historyPrevious' | 'composer.historyNext' | 'composer.historySearch' | 'composer.transcriptSearch' | 'composer.stash' | 'composer.undo' | 'composer.redo' | 'composer.openModels' | 'composer.openResume' | 'composer.openFooter' | 'composer.cancel' | 'composer.transcriptPreviousPage' | 'composer.transcriptNextPage' | 'composer.transcriptOldest' | 'composer.transcriptLatest' | 'suggestion.previous' | 'suggestion.next' | 'suggestion.accept' | 'suggestion.dismiss' | 'historySearch.next' | 'historySearch.accept' | 'historySearch.cancel' | 'transcriptSearch.next' | 'transcriptSearch.previous' | 'transcriptSearch.accept' | 'transcriptSearch.cancel' | 'transcript.open' | 'transcript.previous' | 'transcript.next' | 'transcript.inspect' | 'transcript.copy' | 'transcript.close' | 'detail.previousPage' | 'detail.nextPage' | 'detail.copy' | 'detail.close' | 'pluginHub.close' | 'pluginHub.previous' | 'pluginHub.next' | 'pluginHub.previousPage' | 'pluginHub.nextPage' | 'pluginHub.accept' | 'pluginHub.toggleView' | 'pluginHub.search' | 'pluginHub.refresh' | 'pluginHub.sort' | 'pluginHub.category' | 'dialog.previous' | 'dialog.next' | 'dialog.accept' | 'dialog.cancel' | 'dialog.previousPage' | 'dialog.nextPage' | 'work.previous' | 'work.next' | 'work.cancel' | 'work.inspect' | 'work.close' | 'footer.previous' | 'footer.next' | 'footer.activate' | 'footer.close' | 'approval.previous' | 'approval.next' | 'approval.previousPage' | 'approval.nextPage' | 'approval.allowOnce' | 'approval.reject' | 'help.open';
|
|
7
|
+
/** One normalized key or command gesture attached to an interaction action. */
|
|
8
|
+
export interface TuiInteractionBinding {
|
|
9
|
+
/** Stable lowercase sequence used by input matching. */
|
|
10
|
+
readonly sequence: string;
|
|
11
|
+
/** User-facing sequence that preserves familiar key spelling. */
|
|
12
|
+
readonly label: string;
|
|
13
|
+
/** Whether input dispatch or the command registry owns the gesture. */
|
|
14
|
+
readonly kind: 'key' | 'command';
|
|
15
|
+
}
|
|
16
|
+
/** One immutable action shown by the interaction help panel. */
|
|
17
|
+
export interface TuiInteractionDescriptor {
|
|
18
|
+
/** Stable package-owned action identifier. */
|
|
19
|
+
readonly id: TuiInteractionActionId;
|
|
20
|
+
/** Input context that owns the action. */
|
|
21
|
+
readonly context: TuiInteractionContext;
|
|
22
|
+
/** Concise user-facing action name. */
|
|
23
|
+
readonly description: string;
|
|
24
|
+
/** Key and command gestures in this built-in or resolved descriptor. */
|
|
25
|
+
readonly bindings: readonly TuiInteractionBinding[];
|
|
26
|
+
/** Optional runtime capability required before help exposes the action. */
|
|
27
|
+
readonly requires?: 'modelPicker' | 'resumePicker' | 'approval' | 'childView';
|
|
28
|
+
}
|
|
29
|
+
/** Ink key flags used by the pure keybinding matcher. */
|
|
30
|
+
export interface TuiKeypress {
|
|
31
|
+
/** Ctrl modifier. */
|
|
32
|
+
readonly ctrl?: boolean;
|
|
33
|
+
/** Shift modifier. */
|
|
34
|
+
readonly shift?: boolean;
|
|
35
|
+
/** Alt/Meta modifier. */
|
|
36
|
+
readonly meta?: boolean;
|
|
37
|
+
/** Return key. */
|
|
38
|
+
readonly return?: boolean;
|
|
39
|
+
/** Escape key. */
|
|
40
|
+
readonly escape?: boolean;
|
|
41
|
+
/** Tab key. */
|
|
42
|
+
readonly tab?: boolean;
|
|
43
|
+
/** Up arrow. */
|
|
44
|
+
readonly upArrow?: boolean;
|
|
45
|
+
/** Down arrow. */
|
|
46
|
+
readonly downArrow?: boolean;
|
|
47
|
+
/** Left arrow. */
|
|
48
|
+
readonly leftArrow?: boolean;
|
|
49
|
+
/** Right arrow. */
|
|
50
|
+
readonly rightArrow?: boolean;
|
|
51
|
+
/** Page Up key. */
|
|
52
|
+
readonly pageUp?: boolean;
|
|
53
|
+
/** Page Down key. */
|
|
54
|
+
readonly pageDown?: boolean;
|
|
55
|
+
/** Home key. */
|
|
56
|
+
readonly home?: boolean;
|
|
57
|
+
/** End key. */
|
|
58
|
+
readonly end?: boolean;
|
|
59
|
+
/** Backspace key. */
|
|
60
|
+
readonly backspace?: boolean;
|
|
61
|
+
/** Forward Delete key. */
|
|
62
|
+
readonly delete?: boolean;
|
|
63
|
+
/** Bracketed-paste payload rather than a shortcut key. */
|
|
64
|
+
readonly paste?: boolean;
|
|
65
|
+
/** Super or Command modifier reported by an enhanced keyboard protocol. */
|
|
66
|
+
readonly super?: boolean;
|
|
67
|
+
/** Hyper modifier reported by an enhanced keyboard protocol. */
|
|
68
|
+
readonly hyper?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/** Runtime facts that select the one non-global input owner. */
|
|
71
|
+
export interface TuiInteractionModeState {
|
|
72
|
+
/** Approval currently owns input. */
|
|
73
|
+
readonly approval: boolean;
|
|
74
|
+
/** Help or structured-question dialog currently owns input. */
|
|
75
|
+
readonly dialog: boolean;
|
|
76
|
+
/** Background-work panel currently owns input. */
|
|
77
|
+
readonly work: boolean;
|
|
78
|
+
/** A bounded transcript detail is open. */
|
|
79
|
+
readonly detail: boolean;
|
|
80
|
+
/** The read-only Plugin Hub panel owns input. */
|
|
81
|
+
readonly pluginHub?: boolean;
|
|
82
|
+
/** Transcript browse mode is active. */
|
|
83
|
+
readonly transcript: boolean;
|
|
84
|
+
/** Complete-transcript search is active. */
|
|
85
|
+
readonly transcriptSearch: boolean;
|
|
86
|
+
/** Submitted-history search is active. */
|
|
87
|
+
readonly historySearch: boolean;
|
|
88
|
+
/** A suggestion query is active. */
|
|
89
|
+
readonly suggestion: boolean;
|
|
90
|
+
/** Actionable footer navigation is active. */
|
|
91
|
+
readonly footer: boolean;
|
|
92
|
+
}
|
|
93
|
+
/** Capabilities used to remove unavailable actions from interaction help. */
|
|
94
|
+
export interface TuiInteractionCapabilities {
|
|
95
|
+
/** The effective command registry provides the model picker. */
|
|
96
|
+
readonly modelPicker: boolean;
|
|
97
|
+
/** The effective command registry provides the Session picker. */
|
|
98
|
+
readonly resumePicker: boolean;
|
|
99
|
+
/** The TUI composition provides approval interaction. */
|
|
100
|
+
readonly approval: boolean;
|
|
101
|
+
/** A child Agent transcript is the active view. */
|
|
102
|
+
readonly childView: boolean;
|
|
103
|
+
}
|
|
104
|
+
/** One preformatted physical row in the bounded interaction help panel. */
|
|
105
|
+
export interface TuiInteractionHelpLine {
|
|
106
|
+
/** Stable React key. */
|
|
107
|
+
readonly key: string;
|
|
108
|
+
/** One terminal row of help text. */
|
|
109
|
+
readonly text: string;
|
|
110
|
+
/** Visual role used by the renderer. */
|
|
111
|
+
readonly kind: 'heading' | 'binding' | 'description';
|
|
112
|
+
}
|
|
113
|
+
/** Fixed input-priority order; Global escape actions are checked before the active modal context. */
|
|
114
|
+
export declare const TUI_INTERACTION_CONTEXT_PRIORITY: readonly TuiInteractionContext[];
|
|
115
|
+
/** Built-in bindings used by dispatch and help when settings do not override an action. */
|
|
116
|
+
export declare const TUI_INTERACTION_REGISTRY: readonly TuiInteractionDescriptor[];
|
|
117
|
+
/** Per-action key replacements; command gestures remain attached to their action. */
|
|
118
|
+
export type TuiKeybindingOverrides = Readonly<Partial<Record<TuiInteractionActionId, readonly string[]>>>;
|
|
119
|
+
/** Stable action ids accepted as keys in {@link TuiKeybindingOverrides}. */
|
|
120
|
+
export declare const TUI_INTERACTION_ACTION_IDS: readonly TuiInteractionActionId[];
|
|
121
|
+
/** Schema for canonical lowercase key sequences keyed by known action id. */
|
|
122
|
+
export declare const TUI_KEYBINDING_OVERRIDES_SCHEMA: z<TuiKeybindingOverrides>;
|
|
123
|
+
/**
|
|
124
|
+
* Reject ambiguous or unsafe effective bindings that the structural schema cannot express.
|
|
125
|
+
* @param overrides - schema-validated per-action key replacements.
|
|
126
|
+
* @throws when one action repeats a key, two actions in one context share a key, or Ctrl+C could be removed.
|
|
127
|
+
*/
|
|
128
|
+
export declare function validateTuiKeybindingOverrides(overrides: TuiKeybindingOverrides): void;
|
|
129
|
+
/**
|
|
130
|
+
* Replace configured key gestures while retaining command gestures and descriptor metadata.
|
|
131
|
+
* @param overrides - schema-validated per-action key replacements.
|
|
132
|
+
* @returns one deeply immutable registry consumed by both dispatch and help.
|
|
133
|
+
* @throws when the effective registry is ambiguous or removes the Ctrl+C safety path.
|
|
134
|
+
*/
|
|
135
|
+
export declare function resolveTuiInteractionRegistry(overrides: TuiKeybindingOverrides): readonly TuiInteractionDescriptor[];
|
|
136
|
+
/**
|
|
137
|
+
* Resolve the highest-priority non-global input owner.
|
|
138
|
+
* @param state - active local and modal modes.
|
|
139
|
+
* @returns the one context allowed to consume ordinary input.
|
|
140
|
+
*/
|
|
141
|
+
export declare function resolveTuiInteractionContext(state: TuiInteractionModeState): Exclude<TuiInteractionContext, 'Global'>;
|
|
142
|
+
/**
|
|
143
|
+
* Match an Ink key event against one effective registry for one context.
|
|
144
|
+
* @param context - current input owner.
|
|
145
|
+
* @param input - Ink input text or terminal control sequence.
|
|
146
|
+
* @param keypress - Ink key flags.
|
|
147
|
+
* @param registry - effective bindings; defaults to the built-in registry.
|
|
148
|
+
* @returns the matching action id, or `undefined` for ordinary text and unbound keys.
|
|
149
|
+
*/
|
|
150
|
+
export declare function matchTuiInteractionAction(context: TuiInteractionContext, input: string, keypress: TuiKeypress, registry?: readonly TuiInteractionDescriptor[]): TuiInteractionActionId | undefined;
|
|
151
|
+
/**
|
|
152
|
+
* Filter interaction help to actions supported by the current composition.
|
|
153
|
+
* @param capabilities - effective model-picker, Session-picker, and approval availability.
|
|
154
|
+
* @param registry - effective bindings; defaults to the built-in registry.
|
|
155
|
+
* @returns immutable descriptors in stable context and registry order.
|
|
156
|
+
*/
|
|
157
|
+
export declare function effectiveTuiInteractionDescriptors(capabilities: TuiInteractionCapabilities, registry?: readonly TuiInteractionDescriptor[]): readonly TuiInteractionDescriptor[];
|
|
158
|
+
/**
|
|
159
|
+
* Project effective descriptors into fixed physical rows for a bounded panel.
|
|
160
|
+
* @param descriptors - effective immutable action descriptors.
|
|
161
|
+
* @param columns - available panel columns.
|
|
162
|
+
* @returns stable heading, binding, and description rows.
|
|
163
|
+
*/
|
|
164
|
+
export declare function tuiInteractionHelpLines(descriptors: readonly TuiInteractionDescriptor[], columns: number): readonly TuiInteractionHelpLine[];
|
|
165
|
+
//# sourceMappingURL=keybindings.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Host-only GFM projection for readable terminal text. */
|
|
2
|
+
/**
|
|
3
|
+
* Remove Markdown presentation syntax while retaining readable block structure.
|
|
4
|
+
* @param markdown - untrusted GFM source.
|
|
5
|
+
* @param width - available terminal cells used for narrow table projection.
|
|
6
|
+
* @returns terminal-safe text with readable block structure and no raw HTML or resource targets.
|
|
7
|
+
*/
|
|
8
|
+
export declare function terminalMarkdownText(markdown: string, width?: number): string;
|
|
9
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Cross-platform default-browser hand-off without invoking a shell. */
|
|
2
|
+
/**
|
|
3
|
+
* Open one HTTP(S) URL with the operating system's default browser.
|
|
4
|
+
* @param value - provider-issued authentication URL.
|
|
5
|
+
* @param signal - authentication lifetime.
|
|
6
|
+
* @returns fulfillment after the native launcher accepts the URL.
|
|
7
|
+
*/
|
|
8
|
+
export declare function openExternalUrl(value: string, signal: AbortSignal): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=open-url.d.ts.map
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/** Pure Plugin Hub panel state and bounded text projections for the native TUI. */
|
|
2
|
+
import type { InstalledPluginSnapshot, PluginCatalogSort, PluginChangePlan, PluginCategory, PluginDetail, PluginHubProgress, PluginHubStatus, PluginSearchPage, PluginVerification } from '@lingxi-ai-cn/dsh-plugin-hub';
|
|
3
|
+
import type { InputCursorTarget } from './terminal-session.ts';
|
|
4
|
+
/** Plugin Hub panel snapshot across remote discovery and local profile lifecycle views. */
|
|
5
|
+
export interface TuiPluginHubDialogSnapshot {
|
|
6
|
+
readonly generation: number;
|
|
7
|
+
/** False when profile changes must be performed by the external DSH CLI. */
|
|
8
|
+
readonly profileMutations?: boolean | undefined;
|
|
9
|
+
readonly phase: 'loading' | 'browse' | 'detail-loading' | 'detail' | 'planning' | 'confirm' | 'staging' | 'handoff' | 'error';
|
|
10
|
+
readonly view: 'discover' | 'installed';
|
|
11
|
+
readonly initialQuery: string;
|
|
12
|
+
readonly sort: PluginCatalogSort;
|
|
13
|
+
readonly category?: PluginCategory | undefined;
|
|
14
|
+
readonly page?: PluginSearchPage | undefined;
|
|
15
|
+
readonly installed?: InstalledPluginSnapshot | undefined;
|
|
16
|
+
readonly detail?: PluginDetail | undefined;
|
|
17
|
+
readonly plan?: PluginChangePlan | undefined;
|
|
18
|
+
readonly status?: PluginHubStatus | undefined;
|
|
19
|
+
readonly progress?: PluginHubProgress | undefined;
|
|
20
|
+
readonly loadingMore?: boolean | undefined;
|
|
21
|
+
readonly error?: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format one provider-neutral catalog ordering for the TUI status line.
|
|
25
|
+
* @param sort - catalog ordering to label.
|
|
26
|
+
* @returns human-readable ordering label.
|
|
27
|
+
*/
|
|
28
|
+
export declare function tuiPluginHubSortLabel(sort: PluginCatalogSort): string;
|
|
29
|
+
/**
|
|
30
|
+
* Advance the catalog ordering without exposing provider cursor internals.
|
|
31
|
+
* @param sort - current catalog ordering.
|
|
32
|
+
* @returns next ordering in the stable TUI cycle.
|
|
33
|
+
*/
|
|
34
|
+
export declare function tuiPluginHubNextSort(sort: PluginCatalogSort): PluginCatalogSort;
|
|
35
|
+
/**
|
|
36
|
+
* Format the selected Registry-owned category for the TUI status line.
|
|
37
|
+
* @param category - selected Registry category, or undefined for all categories.
|
|
38
|
+
* @returns user-facing category label.
|
|
39
|
+
*/
|
|
40
|
+
export declare function tuiPluginHubCategoryLabel(category: PluginCategory | undefined): string;
|
|
41
|
+
/**
|
|
42
|
+
* Advance the category filter, returning null to clear it after the final category.
|
|
43
|
+
* @param category - current category, or undefined for all categories.
|
|
44
|
+
* @returns next category, or null when the filter should be cleared.
|
|
45
|
+
*/
|
|
46
|
+
export declare function tuiPluginHubNextCategory(category: PluginCategory | undefined): PluginCategory | null;
|
|
47
|
+
/**
|
|
48
|
+
* Project catalog freshness without hiding a stale search fallback behind a failed status request.
|
|
49
|
+
* @param snapshot - current controller-owned panel state.
|
|
50
|
+
* @returns sanitized one-line catalog status.
|
|
51
|
+
*/
|
|
52
|
+
export declare function tuiPluginHubCatalogLine(snapshot: TuiPluginHubDialogSnapshot): string;
|
|
53
|
+
/** One sanitized structured Plugin Hub card projected for Ink. */
|
|
54
|
+
export interface TuiPluginHubCard {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly kind: 'catalog' | 'installed';
|
|
57
|
+
readonly displayName: string;
|
|
58
|
+
readonly packageName: string;
|
|
59
|
+
readonly summary: string;
|
|
60
|
+
readonly version?: string | undefined;
|
|
61
|
+
readonly categories: readonly string[];
|
|
62
|
+
readonly categorySource?: string | undefined;
|
|
63
|
+
readonly packageKind?: string | undefined;
|
|
64
|
+
readonly kindSource?: string | undefined;
|
|
65
|
+
readonly primaryLanguage?: string | undefined;
|
|
66
|
+
readonly surfaces: readonly string[];
|
|
67
|
+
readonly stars?: number | undefined;
|
|
68
|
+
readonly updatedAt?: string | undefined;
|
|
69
|
+
readonly installable: boolean;
|
|
70
|
+
readonly verificationLevel: PluginVerification['level'];
|
|
71
|
+
readonly selected: boolean;
|
|
72
|
+
}
|
|
73
|
+
/** Backward-compatible export name for the structured card. */
|
|
74
|
+
export type TuiPluginHubRow = TuiPluginHubCard;
|
|
75
|
+
/** Responsive strings consumed by the Ink card renderer. */
|
|
76
|
+
export interface TuiPluginHubCardLayout {
|
|
77
|
+
readonly height: 2 | 3;
|
|
78
|
+
readonly displayName: string;
|
|
79
|
+
readonly badges: string;
|
|
80
|
+
readonly summary: string;
|
|
81
|
+
readonly metadata?: string | undefined;
|
|
82
|
+
readonly physicalLines: readonly string[];
|
|
83
|
+
}
|
|
84
|
+
/** Semantic tone used by one bounded Plugin Hub detail physical line. */
|
|
85
|
+
export type TuiPluginHubLineTone = 'default' | 'muted' | 'accent' | 'success' | 'warning' | 'error';
|
|
86
|
+
/** One physical line projected from a semantic Plugin Hub detail or confirmation entry. */
|
|
87
|
+
export interface TuiPluginHubDetailLine {
|
|
88
|
+
readonly kind: 'title' | 'summary' | 'section' | 'field' | 'warning' | 'body' | 'blank';
|
|
89
|
+
readonly tone: TuiPluginHubLineTone;
|
|
90
|
+
readonly text: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Resolve the fixed physical height shared by catalog windowing and rendering.
|
|
94
|
+
* @param columns - active terminal columns.
|
|
95
|
+
* @returns three rows for wide terminals and two rows otherwise.
|
|
96
|
+
*/
|
|
97
|
+
export declare function tuiPluginHubCardHeight(columns: number): 2 | 3;
|
|
98
|
+
/**
|
|
99
|
+
* Format a finite non-negative Star count for compact catalog display.
|
|
100
|
+
* @param stars - Registry Star count.
|
|
101
|
+
* @returns compact count, or undefined for unusable input.
|
|
102
|
+
*/
|
|
103
|
+
export declare function formatTuiPluginHubStars(stars: number | undefined): string | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* Format catalog activity relative to a fixed caller clock.
|
|
106
|
+
* @param value - Registry timestamp.
|
|
107
|
+
* @param now - comparison clock in milliseconds.
|
|
108
|
+
* @returns bounded relative label, or undefined for invalid/future values.
|
|
109
|
+
*/
|
|
110
|
+
export declare function formatTuiPluginHubRelativeTime(value: string | undefined, now?: number): string | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Resolve the real terminal cursor cell for the fixed-height Discover query editor.
|
|
113
|
+
* @param query - append-only process-local search query.
|
|
114
|
+
* @param columns - active terminal columns.
|
|
115
|
+
* @returns one-based terminal cell after the visible query suffix.
|
|
116
|
+
*/
|
|
117
|
+
export declare function tuiPluginHubQueryCursor(query: string, columns: number): InputCursorTarget;
|
|
118
|
+
/**
|
|
119
|
+
* Project catalog rows without allowing third-party control sequences through.
|
|
120
|
+
* @param page - current provider page.
|
|
121
|
+
* @param selectedIndex - zero-based selected row.
|
|
122
|
+
* @param columns - available terminal columns.
|
|
123
|
+
* @returns immutable fixed-height rows.
|
|
124
|
+
*/
|
|
125
|
+
export declare function tuiPluginHubRows(page: PluginSearchPage | undefined, selectedIndex: number, columns: number): readonly TuiPluginHubRow[];
|
|
126
|
+
/**
|
|
127
|
+
* Project active-profile installed truth into fixed-height terminal rows.
|
|
128
|
+
* @param snapshot - active profile manifest, lockfile, resolved package, bundle, and receipt truth.
|
|
129
|
+
* @param selectedIndex - zero-based selected package.
|
|
130
|
+
* @param columns - available terminal columns.
|
|
131
|
+
* @returns immutable installed rows.
|
|
132
|
+
*/
|
|
133
|
+
export declare function tuiPluginHubInstalledRows(snapshot: InstalledPluginSnapshot | undefined, selectedIndex: number, columns: number): readonly TuiPluginHubRow[];
|
|
134
|
+
/**
|
|
135
|
+
* Resolve bounded card strings for one terminal width.
|
|
136
|
+
* @param card - sanitized structured card.
|
|
137
|
+
* @param columns - active terminal columns.
|
|
138
|
+
* @param now - fixed activity clock used by deterministic callers.
|
|
139
|
+
* @returns fixed-height strings and renderer fields.
|
|
140
|
+
*/
|
|
141
|
+
export declare function tuiPluginHubCardLayout(card: TuiPluginHubCard, columns: number, now?: number): TuiPluginHubCardLayout;
|
|
142
|
+
/**
|
|
143
|
+
* Project one exact trusted mutation plan into bounded confirmation lines.
|
|
144
|
+
* @param plan - detached plan produced from active-profile truth and a verified descriptor.
|
|
145
|
+
* @param detail - optional catalog detail retained only for advisory and verification display.
|
|
146
|
+
* @param columns - available terminal columns.
|
|
147
|
+
* @returns sanitized confirmation lines.
|
|
148
|
+
*/
|
|
149
|
+
export declare function tuiPluginHubPlanLines(plan: PluginChangePlan | undefined, detail: PluginDetail | undefined, columns: number): readonly TuiPluginHubDetailLine[];
|
|
150
|
+
/**
|
|
151
|
+
* Project one detail page into bounded sanitized terminal lines.
|
|
152
|
+
* @param detail - current provider detail.
|
|
153
|
+
* @param columns - available terminal columns.
|
|
154
|
+
* @param now - fixed comparison clock for relative activity labels.
|
|
155
|
+
* @returns bounded sanitized physical lines.
|
|
156
|
+
*/
|
|
157
|
+
export declare function tuiPluginHubDetailLines(detail: PluginDetail | undefined, columns: number, now?: number): readonly TuiPluginHubDetailLine[];
|
|
158
|
+
//# sourceMappingURL=plugin-hub.d.ts.map
|