@geminilight/mindos 0.6.23 → 0.6.27
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/README.md +19 -3
- package/README_zh.md +19 -3
- package/app/app/.well-known/agent-card.json/route.ts +34 -0
- package/app/app/api/a2a/discover/route.ts +23 -0
- package/app/app/api/a2a/route.ts +100 -0
- package/app/components/Backlinks.tsx +2 -2
- package/app/components/Breadcrumb.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +1 -0
- package/app/components/CsvView.tsx +41 -19
- package/app/components/DirView.tsx +2 -2
- package/app/components/GuideCard.tsx +6 -2
- package/app/components/HomeContent.tsx +1 -1
- package/app/components/ImportModal.tsx +3 -0
- package/app/components/OnboardingView.tsx +1 -0
- package/app/components/RightAskPanel.tsx +4 -2
- package/app/components/SearchModal.tsx +3 -3
- package/app/components/SidebarLayout.tsx +11 -2
- package/app/components/SyncStatusBar.tsx +2 -2
- package/app/components/agents/DiscoverAgentModal.tsx +149 -0
- package/app/components/ask/AskContent.tsx +22 -10
- package/app/components/ask/MentionPopover.tsx +2 -2
- package/app/components/ask/SessionTabBar.tsx +70 -0
- package/app/components/ask/SlashCommandPopover.tsx +1 -1
- package/app/components/echo/EchoInsightCollapsible.tsx +4 -0
- package/app/components/explore/UseCaseCard.tsx +2 -2
- package/app/components/help/HelpContent.tsx +6 -1
- package/app/components/panels/AgentsPanel.tsx +25 -2
- package/app/components/panels/AgentsPanelAgentDetail.tsx +2 -2
- package/app/components/panels/DiscoverPanel.tsx +3 -3
- package/app/components/panels/PanelNavRow.tsx +2 -2
- package/app/components/panels/PluginsPanel.tsx +1 -1
- package/app/components/panels/SearchPanel.tsx +3 -3
- package/app/components/renderers/summary/SummaryRenderer.tsx +1 -1
- package/app/components/renderers/workflow/WorkflowRenderer.tsx +5 -0
- package/app/components/settings/AiTab.tsx +5 -4
- package/app/components/settings/KnowledgeTab.tsx +3 -1
- package/app/components/settings/McpTab.tsx +22 -4
- package/app/components/settings/SyncTab.tsx +2 -0
- package/app/components/settings/UpdateTab.tsx +1 -1
- package/app/components/setup/StepDots.tsx +5 -1
- package/app/components/setup/index.tsx +9 -3
- package/app/components/walkthrough/WalkthroughProvider.tsx +2 -2
- package/app/data/skills/mindos/SKILL.md +186 -0
- package/app/data/skills/mindos-zh/SKILL.md +185 -0
- package/app/hooks/useA2aRegistry.ts +53 -0
- package/app/hooks/useAskSession.ts +44 -25
- package/app/lib/a2a/a2a-tools.ts +212 -0
- package/app/lib/a2a/agent-card.ts +107 -0
- package/app/lib/a2a/client.ts +207 -0
- package/app/lib/a2a/index.ts +31 -0
- package/app/lib/a2a/orchestrator.ts +255 -0
- package/app/lib/a2a/task-handler.ts +228 -0
- package/app/lib/a2a/types.ts +212 -0
- package/app/lib/agent/tools.ts +6 -4
- package/app/lib/i18n-en.ts +52 -0
- package/app/lib/i18n-zh.ts +52 -0
- package/app/next-env.d.ts +1 -1
- package/bin/cli.js +183 -164
- package/bin/commands/agent.js +110 -0
- package/bin/commands/api.js +60 -0
- package/bin/commands/ask.js +3 -3
- package/bin/commands/file.js +13 -13
- package/bin/commands/search.js +51 -0
- package/bin/commands/space.js +64 -10
- package/bin/lib/command.js +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Protocol v1.0 — Core Types for MindOS Agent Card & Task handling.
|
|
3
|
+
* Subset of the full spec: only what's needed for Phase 1 (Server mode).
|
|
4
|
+
* Reference: https://a2a-protocol.org/latest/specification/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* ── Agent Card ────────────────────────────────────────────────────────── */
|
|
8
|
+
|
|
9
|
+
export interface AgentCard {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
version: string;
|
|
13
|
+
provider: {
|
|
14
|
+
organization: string;
|
|
15
|
+
url: string;
|
|
16
|
+
};
|
|
17
|
+
supportedInterfaces: AgentInterface[];
|
|
18
|
+
capabilities: AgentCapabilities;
|
|
19
|
+
defaultInputModes: string[];
|
|
20
|
+
defaultOutputModes: string[];
|
|
21
|
+
skills: AgentSkill[];
|
|
22
|
+
securitySchemes?: Record<string, SecurityScheme>;
|
|
23
|
+
securityRequirements?: Record<string, string[]>[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface AgentInterface {
|
|
27
|
+
url: string;
|
|
28
|
+
protocolBinding: 'JSONRPC' | 'GRPC' | 'HTTP_JSON';
|
|
29
|
+
protocolVersion: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface AgentCapabilities {
|
|
33
|
+
streaming: boolean;
|
|
34
|
+
pushNotifications: boolean;
|
|
35
|
+
stateTransitionHistory: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface AgentSkill {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
tags?: string[];
|
|
43
|
+
examples?: string[];
|
|
44
|
+
inputModes?: string[];
|
|
45
|
+
outputModes?: string[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface SecurityScheme {
|
|
49
|
+
httpAuthSecurityScheme?: {
|
|
50
|
+
scheme: string;
|
|
51
|
+
bearerFormat?: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* ── JSON-RPC ──────────────────────────────────────────────────────────── */
|
|
56
|
+
|
|
57
|
+
export interface JsonRpcRequest {
|
|
58
|
+
jsonrpc: '2.0';
|
|
59
|
+
id: string | number;
|
|
60
|
+
method: string;
|
|
61
|
+
params?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface JsonRpcResponse {
|
|
65
|
+
jsonrpc: '2.0';
|
|
66
|
+
id: string | number | null;
|
|
67
|
+
result?: unknown;
|
|
68
|
+
error?: JsonRpcError;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface JsonRpcError {
|
|
72
|
+
code: number;
|
|
73
|
+
message: string;
|
|
74
|
+
data?: unknown;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ── A2A Messages & Tasks ──────────────────────────────────────────────── */
|
|
78
|
+
|
|
79
|
+
export type TaskState =
|
|
80
|
+
| 'TASK_STATE_SUBMITTED'
|
|
81
|
+
| 'TASK_STATE_WORKING'
|
|
82
|
+
| 'TASK_STATE_INPUT_REQUIRED'
|
|
83
|
+
| 'TASK_STATE_COMPLETED'
|
|
84
|
+
| 'TASK_STATE_FAILED'
|
|
85
|
+
| 'TASK_STATE_CANCELED'
|
|
86
|
+
| 'TASK_STATE_REJECTED';
|
|
87
|
+
|
|
88
|
+
export type MessageRole = 'ROLE_USER' | 'ROLE_AGENT';
|
|
89
|
+
|
|
90
|
+
export interface MessagePart {
|
|
91
|
+
text?: string;
|
|
92
|
+
data?: unknown;
|
|
93
|
+
mediaType?: string;
|
|
94
|
+
metadata?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface A2AMessage {
|
|
98
|
+
role: MessageRole;
|
|
99
|
+
parts: MessagePart[];
|
|
100
|
+
metadata?: Record<string, unknown>;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface TaskStatus {
|
|
104
|
+
state: TaskState;
|
|
105
|
+
message?: A2AMessage;
|
|
106
|
+
timestamp: string;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface TaskArtifact {
|
|
110
|
+
artifactId: string;
|
|
111
|
+
name?: string;
|
|
112
|
+
description?: string;
|
|
113
|
+
parts: MessagePart[];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface A2ATask {
|
|
117
|
+
id: string;
|
|
118
|
+
contextId?: string;
|
|
119
|
+
status: TaskStatus;
|
|
120
|
+
artifacts?: TaskArtifact[];
|
|
121
|
+
history?: A2AMessage[];
|
|
122
|
+
metadata?: Record<string, unknown>;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* ── A2A Method Params ─────────────────────────────────────────────────── */
|
|
126
|
+
|
|
127
|
+
export interface SendMessageParams {
|
|
128
|
+
message: A2AMessage;
|
|
129
|
+
configuration?: {
|
|
130
|
+
acceptedOutputModes?: string[];
|
|
131
|
+
blocking?: boolean;
|
|
132
|
+
historyLength?: number;
|
|
133
|
+
};
|
|
134
|
+
metadata?: Record<string, unknown>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface GetTaskParams {
|
|
138
|
+
id: string;
|
|
139
|
+
historyLength?: number;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface CancelTaskParams {
|
|
143
|
+
id: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* ── Error Codes ───────────────────────────────────────────────────────── */
|
|
147
|
+
|
|
148
|
+
export const A2A_ERRORS = {
|
|
149
|
+
TASK_NOT_FOUND: { code: -32001, message: 'Task not found' },
|
|
150
|
+
TASK_NOT_CANCELABLE: { code: -32002, message: 'Task not cancelable' },
|
|
151
|
+
UNSUPPORTED_OPERATION: { code: -32004, message: 'Unsupported operation' },
|
|
152
|
+
CONTENT_TYPE_NOT_SUPPORTED: { code: -32005, message: 'Content type not supported' },
|
|
153
|
+
PARSE_ERROR: { code: -32700, message: 'Parse error' },
|
|
154
|
+
INVALID_REQUEST: { code: -32600, message: 'Invalid request' },
|
|
155
|
+
METHOD_NOT_FOUND: { code: -32601, message: 'Method not found' },
|
|
156
|
+
INVALID_PARAMS: { code: -32602, message: 'Invalid params' },
|
|
157
|
+
INTERNAL_ERROR: { code: -32603, message: 'Internal error' },
|
|
158
|
+
} as const;
|
|
159
|
+
|
|
160
|
+
/* ── A2A Client Types (Phase 2) ────────────────────────────────────────── */
|
|
161
|
+
|
|
162
|
+
/** A discovered remote agent with its card and endpoint */
|
|
163
|
+
export interface RemoteAgent {
|
|
164
|
+
/** Unique identifier (derived from agent card URL) */
|
|
165
|
+
id: string;
|
|
166
|
+
/** The agent's card metadata */
|
|
167
|
+
card: AgentCard;
|
|
168
|
+
/** The JSON-RPC endpoint URL */
|
|
169
|
+
endpoint: string;
|
|
170
|
+
/** When this card was last fetched */
|
|
171
|
+
discoveredAt: string;
|
|
172
|
+
/** Whether the agent is currently reachable */
|
|
173
|
+
reachable: boolean;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* ── Orchestration Types (Phase 3) ─────────────────────────────────────── */
|
|
177
|
+
|
|
178
|
+
/** A sub-task decomposed from a user request */
|
|
179
|
+
export interface SubTask {
|
|
180
|
+
id: string;
|
|
181
|
+
description: string;
|
|
182
|
+
assignedAgentId: string | null;
|
|
183
|
+
matchedSkillId: string | null;
|
|
184
|
+
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
185
|
+
result: string | null;
|
|
186
|
+
error: string | null;
|
|
187
|
+
dependsOn: string[];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** Execution strategy for sub-tasks */
|
|
191
|
+
export type ExecutionStrategy = 'parallel' | 'sequential' | 'dependency';
|
|
192
|
+
|
|
193
|
+
/** An orchestration plan produced by the decomposer */
|
|
194
|
+
export interface OrchestrationPlan {
|
|
195
|
+
id: string;
|
|
196
|
+
originalRequest: string;
|
|
197
|
+
strategy: ExecutionStrategy;
|
|
198
|
+
subtasks: SubTask[];
|
|
199
|
+
createdAt: string;
|
|
200
|
+
completedAt: string | null;
|
|
201
|
+
status: 'planning' | 'executing' | 'completed' | 'failed';
|
|
202
|
+
aggregatedResult: string | null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/** Result of matching a sub-task to an agent skill */
|
|
206
|
+
export interface SkillMatch {
|
|
207
|
+
agentId: string;
|
|
208
|
+
agentName: string;
|
|
209
|
+
skillId: string;
|
|
210
|
+
skillName: string;
|
|
211
|
+
confidence: number;
|
|
212
|
+
}
|
package/app/lib/agent/tools.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from '@/lib/fs';
|
|
10
10
|
import { readSkillContentByName, scanSkillDirs } from '@/lib/pi-integration/skills';
|
|
11
11
|
import { callMcporterTool, createMcporterAgentTools, listMcporterServers, listMcporterTools } from '@/lib/pi-integration/mcporter';
|
|
12
|
+
import { a2aTools } from '@/lib/a2a/a2a-tools';
|
|
12
13
|
|
|
13
14
|
// Max chars per file to avoid token overflow (~100k chars ≈ ~25k tokens)
|
|
14
15
|
const MAX_FILE_CHARS = 20_000;
|
|
@@ -186,10 +187,11 @@ export function getOrganizeTools(): AgentTool<any>[] {
|
|
|
186
187
|
}
|
|
187
188
|
|
|
188
189
|
export async function getRequestScopedTools(): Promise<AgentTool<any>[]> {
|
|
190
|
+
const baseTools = [...knowledgeBaseTools, ...a2aTools];
|
|
189
191
|
try {
|
|
190
192
|
const result = await listMcporterServers();
|
|
191
193
|
const okServers = (result.servers ?? []).filter((server) => server.status === 'ok');
|
|
192
|
-
if (okServers.length === 0) return
|
|
194
|
+
if (okServers.length === 0) return baseTools;
|
|
193
195
|
|
|
194
196
|
const detailedServers = await Promise.all(okServers.map(async (server) => {
|
|
195
197
|
try {
|
|
@@ -200,10 +202,10 @@ export async function getRequestScopedTools(): Promise<AgentTool<any>[]> {
|
|
|
200
202
|
}));
|
|
201
203
|
|
|
202
204
|
const dynamicMcpTools = createMcporterAgentTools(detailedServers);
|
|
203
|
-
if (dynamicMcpTools.length === 0) return
|
|
204
|
-
return [...
|
|
205
|
+
if (dynamicMcpTools.length === 0) return baseTools;
|
|
206
|
+
return [...baseTools, ...dynamicMcpTools];
|
|
205
207
|
} catch {
|
|
206
|
-
return
|
|
208
|
+
return baseTools;
|
|
207
209
|
}
|
|
208
210
|
}
|
|
209
211
|
|
package/app/lib/i18n-en.ts
CHANGED
|
@@ -241,6 +241,27 @@ export const en = {
|
|
|
241
241
|
agentDetailPanelAria: 'Agent connection configuration',
|
|
242
242
|
agentDetailTransport: 'Transport',
|
|
243
243
|
agentDetailSnippet: 'Config snippet',
|
|
244
|
+
// A2A
|
|
245
|
+
a2aLabel: 'A2A',
|
|
246
|
+
a2aReady: 'A2A Ready',
|
|
247
|
+
a2aChecking: 'Checking A2A...',
|
|
248
|
+
a2aUnavailable: 'A2A Unavailable',
|
|
249
|
+
a2aRemote: 'Remote',
|
|
250
|
+
a2aDiscover: 'Discover Remote Agent',
|
|
251
|
+
a2aDiscoverHint: 'Connect to an external A2A agent by URL',
|
|
252
|
+
a2aDiscoverPlaceholder: 'https://agent.example.com',
|
|
253
|
+
a2aDiscovering: 'Discovering...',
|
|
254
|
+
a2aDiscoverSuccess: 'Agent discovered!',
|
|
255
|
+
a2aDiscoverFailed: 'No A2A agent found at this URL',
|
|
256
|
+
a2aDiscoverFailedHint: 'The server may not support the A2A protocol. Check the URL and try again.',
|
|
257
|
+
a2aSkills: 'Skills',
|
|
258
|
+
a2aEndpoint: 'Endpoint',
|
|
259
|
+
a2aVersion: 'Version',
|
|
260
|
+
a2aCapabilities: 'A2A Capabilities',
|
|
261
|
+
a2aStatus: 'Status',
|
|
262
|
+
a2aConnected: 'Connected & A2A Ready',
|
|
263
|
+
a2aNoRemote: 'No remote agents',
|
|
264
|
+
a2aNoRemoteHint: 'Discover remote agents to enable cross-agent delegation.',
|
|
244
265
|
},
|
|
245
266
|
plugins: {
|
|
246
267
|
title: 'Plugins',
|
|
@@ -1463,4 +1484,35 @@ prompt: "Here's my resume, read it and organize my info into MindOS.",
|
|
|
1463
1484
|
],
|
|
1464
1485
|
},
|
|
1465
1486
|
},
|
|
1487
|
+
|
|
1488
|
+
/** Disabled-state and contextual tooltip hints */
|
|
1489
|
+
hints: {
|
|
1490
|
+
noValidFiles: 'No valid files selected',
|
|
1491
|
+
aiOrganizing: 'AI is organizing',
|
|
1492
|
+
importInProgress: 'Import in progress',
|
|
1493
|
+
templateInitializing: 'Another template is being initialized',
|
|
1494
|
+
configureAiKey: 'Configure API key in Settings → AI',
|
|
1495
|
+
syncInProgress: 'Sync already in progress',
|
|
1496
|
+
toggleInProgress: 'Toggle operation in progress',
|
|
1497
|
+
typeMessage: 'Type a message',
|
|
1498
|
+
mentionInProgress: 'Mention or command in progress',
|
|
1499
|
+
cleanupInProgress: 'Cleanup already in progress',
|
|
1500
|
+
tokenResetInProgress: 'Token reset in progress',
|
|
1501
|
+
aiNotConfigured: 'AI not configured or generation in progress',
|
|
1502
|
+
generationInProgress: 'Generation in progress or AI not configured',
|
|
1503
|
+
cannotJumpForward: 'Cannot jump forward in setup',
|
|
1504
|
+
testInProgressOrNoKey: 'Test in progress or no API key',
|
|
1505
|
+
workflowStepRunning: 'Workflow step already running',
|
|
1506
|
+
workflowRunning: 'Workflow step is running',
|
|
1507
|
+
sessionHistory: 'Session history',
|
|
1508
|
+
newSession: 'New session',
|
|
1509
|
+
attachFile: 'Attach local file',
|
|
1510
|
+
maximizePanel: 'Maximize panel',
|
|
1511
|
+
restorePanel: 'Restore panel',
|
|
1512
|
+
dockToSide: 'Dock to side panel',
|
|
1513
|
+
openAsPopup: 'Open as popup',
|
|
1514
|
+
closePanel: 'Close',
|
|
1515
|
+
newChat: 'New chat',
|
|
1516
|
+
closeSession: 'Close session',
|
|
1517
|
+
},
|
|
1466
1518
|
} as const;
|
package/app/lib/i18n-zh.ts
CHANGED
|
@@ -265,6 +265,27 @@ export const zh = {
|
|
|
265
265
|
agentDetailPanelAria: '智能体连接配置',
|
|
266
266
|
agentDetailTransport: '传输方式',
|
|
267
267
|
agentDetailSnippet: '配置片段',
|
|
268
|
+
// A2A
|
|
269
|
+
a2aLabel: 'A2A',
|
|
270
|
+
a2aReady: 'A2A 就绪',
|
|
271
|
+
a2aChecking: '检测 A2A 中...',
|
|
272
|
+
a2aUnavailable: 'A2A 不可用',
|
|
273
|
+
a2aRemote: '远程',
|
|
274
|
+
a2aDiscover: '发现远程 Agent',
|
|
275
|
+
a2aDiscoverHint: '通过 URL 连接外部 A2A Agent',
|
|
276
|
+
a2aDiscoverPlaceholder: 'https://agent.example.com',
|
|
277
|
+
a2aDiscovering: '发现中...',
|
|
278
|
+
a2aDiscoverSuccess: 'Agent 已发现!',
|
|
279
|
+
a2aDiscoverFailed: '未在此 URL 找到 A2A Agent',
|
|
280
|
+
a2aDiscoverFailedHint: '该服务器可能不支持 A2A 协议,请检查 URL 后重试。',
|
|
281
|
+
a2aSkills: '技能',
|
|
282
|
+
a2aEndpoint: '端点',
|
|
283
|
+
a2aVersion: '版本',
|
|
284
|
+
a2aCapabilities: 'A2A 能力',
|
|
285
|
+
a2aStatus: '状态',
|
|
286
|
+
a2aConnected: '已连接,A2A 就绪',
|
|
287
|
+
a2aNoRemote: '无远程 Agent',
|
|
288
|
+
a2aNoRemoteHint: '发现远程 Agent 以启用跨 Agent 委派。',
|
|
268
289
|
},
|
|
269
290
|
plugins: {
|
|
270
291
|
title: '插件',
|
|
@@ -1487,4 +1508,35 @@ prompt: '这是我的简历,读一下,把我的信息整理到 MindOS 里。
|
|
|
1487
1508
|
],
|
|
1488
1509
|
},
|
|
1489
1510
|
},
|
|
1511
|
+
|
|
1512
|
+
/** 禁用态和上下文提示文案 */
|
|
1513
|
+
hints: {
|
|
1514
|
+
noValidFiles: '未选择有效文件',
|
|
1515
|
+
aiOrganizing: 'AI 正在整理中',
|
|
1516
|
+
importInProgress: '正在导入',
|
|
1517
|
+
templateInitializing: '正在初始化另一个模板',
|
|
1518
|
+
configureAiKey: '请在 设置 → AI 中配置 API 密钥',
|
|
1519
|
+
syncInProgress: '正在同步中',
|
|
1520
|
+
toggleInProgress: '正在切换中',
|
|
1521
|
+
typeMessage: '请输入消息',
|
|
1522
|
+
mentionInProgress: '正在输入提及或命令',
|
|
1523
|
+
cleanupInProgress: '正在清理中',
|
|
1524
|
+
tokenResetInProgress: '正在重置令牌',
|
|
1525
|
+
aiNotConfigured: 'AI 未配置或正在生成',
|
|
1526
|
+
generationInProgress: '正在生成或 AI 未配置',
|
|
1527
|
+
cannotJumpForward: '无法跳过前序步骤',
|
|
1528
|
+
testInProgressOrNoKey: '正在测试或未配置 API 密钥',
|
|
1529
|
+
workflowStepRunning: '工作流步骤正在运行',
|
|
1530
|
+
workflowRunning: '工作流步骤正在运行',
|
|
1531
|
+
sessionHistory: '会话历史',
|
|
1532
|
+
newSession: '新会话',
|
|
1533
|
+
attachFile: '附加本地文件',
|
|
1534
|
+
maximizePanel: '最大化面板',
|
|
1535
|
+
restorePanel: '还原面板',
|
|
1536
|
+
dockToSide: '停靠到侧边栏',
|
|
1537
|
+
openAsPopup: '弹窗模式',
|
|
1538
|
+
closePanel: '关闭',
|
|
1539
|
+
newChat: '新对话',
|
|
1540
|
+
closeSession: '关闭会话',
|
|
1541
|
+
},
|
|
1490
1542
|
} as const satisfies Widen<typeof en>;
|
package/app/next-env.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="next" />
|
|
2
2
|
/// <reference types="next/image-types/global" />
|
|
3
|
-
import "./.next/
|
|
3
|
+
import "./.next/types/routes.d.ts";
|
|
4
4
|
|
|
5
5
|
// NOTE: This file should not be edited
|
|
6
6
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|