@ai-zen/agents-host 0.0.0-stage → 0.1.0-alpha.1
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/CHANGELOG.md +39 -0
- package/LICENSE +21 -0
- package/README.md +759 -2
- package/dist/app.d.ts +384 -0
- package/dist/app.js +1148 -0
- package/dist/cli.d.ts +22 -0
- package/dist/cli.js +354 -0
- package/dist/config.d.ts +97 -0
- package/dist/config.js +171 -0
- package/dist/handlers/agentHandlers.d.ts +18 -0
- package/dist/handlers/agentHandlers.js +20 -0
- package/dist/handlers/assetHandlers.d.ts +29 -0
- package/dist/handlers/assetHandlers.js +35 -0
- package/dist/handlers/capabilities.d.ts +26 -0
- package/dist/handlers/capabilities.js +138 -0
- package/dist/handlers/completionHandlers.d.ts +18 -0
- package/dist/handlers/completionHandlers.js +13 -0
- package/dist/handlers/configHandlers.d.ts +31 -0
- package/dist/handlers/configHandlers.js +59 -0
- package/dist/handlers/conversationHandlers.d.ts +118 -0
- package/dist/handlers/conversationHandlers.js +314 -0
- package/dist/handlers/handoffHandlers.d.ts +17 -0
- package/dist/handlers/handoffHandlers.js +14 -0
- package/dist/handlers/hostHandlers.d.ts +39 -0
- package/dist/handlers/hostHandlers.js +56 -0
- package/dist/handlers/index.d.ts +128 -0
- package/dist/handlers/index.js +92 -0
- package/dist/handlers/messageHandlers.d.ts +11 -0
- package/dist/handlers/messageHandlers.js +10 -0
- package/dist/handlers/modelHandlers.d.ts +17 -0
- package/dist/handlers/modelHandlers.js +19 -0
- package/dist/handlers/noticeHandlers.d.ts +24 -0
- package/dist/handlers/noticeHandlers.js +24 -0
- package/dist/handlers/questionHandlers.d.ts +16 -0
- package/dist/handlers/questionHandlers.js +16 -0
- package/dist/handlers/searchHandlers.d.ts +12 -0
- package/dist/handlers/searchHandlers.js +12 -0
- package/dist/handlers/workspaceHandlers.d.ts +29 -0
- package/dist/handlers/workspaceHandlers.js +47 -0
- package/dist/i18n/en.d.ts +243 -0
- package/dist/i18n/en.js +270 -0
- package/dist/i18n/index.d.ts +43 -0
- package/dist/i18n/index.js +72 -0
- package/dist/i18n/zh.d.ts +240 -0
- package/dist/i18n/zh.js +257 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +15 -0
- package/dist/net/UploadReceiver.d.ts +186 -0
- package/dist/net/UploadReceiver.js +494 -0
- package/dist/net/WsHub.d.ts +231 -0
- package/dist/net/WsHub.js +689 -0
- package/dist/net/auth.d.ts +73 -0
- package/dist/net/auth.js +74 -0
- package/dist/net/discovery.d.ts +72 -0
- package/dist/net/discovery.js +171 -0
- package/dist/net/index.d.ts +14 -0
- package/dist/net/index.js +10 -0
- package/dist/runtime/ChatRunner.d.ts +374 -0
- package/dist/runtime/ChatRunner.js +1204 -0
- package/dist/runtime/ConversationDrafts.d.ts +43 -0
- package/dist/runtime/ConversationDrafts.js +47 -0
- package/dist/runtime/RunRegistry.d.ts +79 -0
- package/dist/runtime/RunRegistry.js +108 -0
- package/dist/runtime/ScopeRegistry.d.ts +153 -0
- package/dist/runtime/ScopeRegistry.js +259 -0
- package/dist/runtime/TransientRunner.d.ts +90 -0
- package/dist/runtime/TransientRunner.js +179 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.js +10 -0
- package/dist/services/AgentService.d.ts +150 -0
- package/dist/services/AgentService.js +718 -0
- package/dist/services/AssetService.d.ts +338 -0
- package/dist/services/AssetService.js +739 -0
- package/dist/services/AutoNaming.d.ts +92 -0
- package/dist/services/AutoNaming.js +235 -0
- package/dist/services/CompletionService.d.ts +122 -0
- package/dist/services/CompletionService.js +442 -0
- package/dist/services/ConfigService.d.ts +171 -0
- package/dist/services/ConfigService.js +695 -0
- package/dist/services/ConversationService.d.ts +274 -0
- package/dist/services/ConversationService.js +902 -0
- package/dist/services/CredentialService.d.ts +33 -0
- package/dist/services/CredentialService.js +86 -0
- package/dist/services/DiscoveryService.d.ts +182 -0
- package/dist/services/DiscoveryService.js +998 -0
- package/dist/services/HandoffService.d.ts +189 -0
- package/dist/services/HandoffService.js +414 -0
- package/dist/services/Logger.d.ts +130 -0
- package/dist/services/Logger.js +256 -0
- package/dist/services/MessageService.d.ts +88 -0
- package/dist/services/MessageService.js +280 -0
- package/dist/services/ModelService.d.ts +89 -0
- package/dist/services/ModelService.js +489 -0
- package/dist/services/NoticeService.d.ts +93 -0
- package/dist/services/NoticeService.js +217 -0
- package/dist/services/QuestionService.d.ts +184 -0
- package/dist/services/QuestionService.js +457 -0
- package/dist/services/SearchService.d.ts +54 -0
- package/dist/services/SearchService.js +117 -0
- package/dist/services/WorkspaceService.d.ts +96 -0
- package/dist/services/WorkspaceService.js +213 -0
- package/dist/services/imageSize.d.ts +41 -0
- package/dist/services/imageSize.js +146 -0
- package/dist/services/index.d.ts +20 -0
- package/dist/services/index.js +15 -0
- package/dist/services/secretMask.d.ts +24 -0
- package/dist/services/secretMask.js +34 -0
- package/dist/storage/AssetRepository.d.ts +87 -0
- package/dist/storage/AssetRepository.js +180 -0
- package/dist/storage/ConversationRepository.d.ts +55 -0
- package/dist/storage/ConversationRepository.js +128 -0
- package/dist/storage/CredentialRepository.d.ts +28 -0
- package/dist/storage/CredentialRepository.js +47 -0
- package/dist/storage/Database.d.ts +95 -0
- package/dist/storage/Database.js +180 -0
- package/dist/storage/MessageRepository.d.ts +104 -0
- package/dist/storage/MessageRepository.js +323 -0
- package/dist/storage/MetaRepository.d.ts +21 -0
- package/dist/storage/MetaRepository.js +33 -0
- package/dist/storage/NoticeRepository.d.ts +31 -0
- package/dist/storage/NoticeRepository.js +89 -0
- package/dist/storage/QuestionRepository.d.ts +34 -0
- package/dist/storage/QuestionRepository.js +96 -0
- package/dist/storage/WorkspaceRepository.d.ts +25 -0
- package/dist/storage/WorkspaceRepository.js +44 -0
- package/dist/storage/dbWorker.d.ts +10 -0
- package/dist/storage/dbWorker.js +132 -0
- package/dist/storage/index.d.ts +20 -0
- package/dist/storage/index.js +16 -0
- package/dist/storage/migrations.d.ts +26 -0
- package/dist/storage/migrations.js +207 -0
- package/dist/storage/types.d.ts +298 -0
- package/dist/storage/types.js +14 -0
- package/dist/wire/errors.d.ts +105 -0
- package/dist/wire/errors.js +143 -0
- package/dist/wire/events.d.ts +102 -0
- package/dist/wire/events.js +13 -0
- package/dist/wire/frames.d.ts +106 -0
- package/dist/wire/frames.js +156 -0
- package/dist/wire/index.d.ts +31 -0
- package/dist/wire/index.js +31 -0
- package/dist/wire/methods.d.ts +1896 -0
- package/dist/wire/methods.js +99 -0
- package/dist/wire/states.d.ts +487 -0
- package/dist/wire/states.js +61 -0
- package/package.json +63 -3
package/dist/i18n/en.js
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 英文文案表 —— 键的真相源(key 的集合以本文件为准,`zh` 与它逐键对应,类型层面拦住漂移)。
|
|
3
|
+
*
|
|
4
|
+
* 写作口径(PRD §1「它说人话」):一句能直接摆在用户面前的话,说「发生了什么」以及
|
|
5
|
+
* 「用户可以怎么做」,不写 `Error: undefined`、不写 `E_XXX` 这类机器码,也不写
|
|
6
|
+
* 「请求失败」这种没有信息量的话。占位符用 `{name}` 形式,值与含义在键旁的注释里。
|
|
7
|
+
*
|
|
8
|
+
* 文案只描述事实,不做取舍判断(例如目录不存在时只说「目录已不存在」,是否只读由客户端定,
|
|
9
|
+
* PRD D12);凡是「宿主给事实、客户端给表现」的地方,事实都在结构化字段里,文案只是给人看的那一层。
|
|
10
|
+
*/
|
|
11
|
+
export const en = {
|
|
12
|
+
// ---- 业务码对应的兜底文案(每个 BizCode 至少一条,见 wire/errors.ts)----
|
|
13
|
+
"error.unauthorized": "That access key wasn't accepted. Check the key and try again.",
|
|
14
|
+
"error.invalidParams": "Part of this request doesn't look right: {field}.",
|
|
15
|
+
"error.notFound": "There's no {entity} with that id.",
|
|
16
|
+
"error.busy": "This conversation is still working on the previous turn. Stop it or wait for it to finish.",
|
|
17
|
+
"error.payloadTooLarge": "That file is {size}, which is over the {limit} limit.",
|
|
18
|
+
"error.unsupported": "The host can't handle {what}.",
|
|
19
|
+
"error.internal": "Something broke on the host. The log has the details.",
|
|
20
|
+
"error.configInvalid": "The settings aren't usable yet: {reason}.",
|
|
21
|
+
// 端口写得不对(D25 的三档来源里,显式给出的那个值不合法;裁定 R67)
|
|
22
|
+
"error.portInvalid": "That port number can't be used: {value} (from {source}). It has to be a whole number from 1 to 65535 — 0 means \"let the system pick one\" and only works on the command line.",
|
|
23
|
+
// 助手没有可用模型(`conversation.create` 借 `config_invalid` 这个码,结构化原因在 `detail` 里)
|
|
24
|
+
"error.modelUnresolved": "No model could be resolved for this assistant — pick a model for it, or set a default model in the settings.",
|
|
25
|
+
// 恢复出厂时这次编辑的模型在出厂清单里没有对应定义(没有可用来替换的那一条)
|
|
26
|
+
"error.notFactoryModel": "\"{id}\" isn't part of the factory model list, so there's no factory version to restore.",
|
|
27
|
+
"error.mcpUnavailable": "{name} isn't answering, so its tools are missing this turn. Everything else still works.",
|
|
28
|
+
"error.modelUnsupported": "{model} can't take the images already in this conversation, so the switch was refused.",
|
|
29
|
+
"error.handoffDeclined": "Handoff was declined, so this conversation carries on as it is.",
|
|
30
|
+
"error.questionPending": "There's an unanswered question ({question}). Answer it before sending something new.",
|
|
31
|
+
"error.contextGuard": "This conversation reached its {limit}-token limit at {used} tokens, so the request was stopped before it could fail.",
|
|
32
|
+
// ---- 通知:三档语气,`duration` 决定是否到点消失(PRD L3 / F-I8)----
|
|
33
|
+
"notice.settingsSaved": "Settings saved.",
|
|
34
|
+
"notice.settingsApplied": "Settings applied — no restart needed.",
|
|
35
|
+
"notice.conversationDeleted": "Conversation deleted.",
|
|
36
|
+
"notice.workspaceDeleted": "Project removed, along with its {count} conversation(s). The folder itself was left alone.",
|
|
37
|
+
"notice.assetsUploaded": "{count} image(s) uploaded.",
|
|
38
|
+
"notice.attachmentDropped": "{name} couldn't be sent and was left out of the message.",
|
|
39
|
+
"notice.upgradeRestarting": "Updated to {version}. Restarting now.",
|
|
40
|
+
"notice.logWarning": "Host warning: {summary}",
|
|
41
|
+
"notice.logError": "Host error: {summary}",
|
|
42
|
+
"notice.handoffWritten": "Handoff document written to {path}.",
|
|
43
|
+
"notice.autoNamed": "Named this conversation \"{name}\".",
|
|
44
|
+
"notice.languageChanged": "This connection now speaks {language}.",
|
|
45
|
+
"notice.hardLimitHit": "This turn stopped at the {limit}-token limit. Nothing was lost — the conversation is waiting for you.",
|
|
46
|
+
// ---- 生成六态(PRD L8 / F-I3):每一态一句人话,事实在 run.state 字段里 ----
|
|
47
|
+
"status.connected": "Connected",
|
|
48
|
+
"status.awaitingFirstToken": "Connected — waiting for the first word",
|
|
49
|
+
"status.thinking": "Thinking…",
|
|
50
|
+
"status.generating": "Writing…",
|
|
51
|
+
"status.assemblingToolCalls": "Putting together {count} tool call(s)…",
|
|
52
|
+
"status.awaitingTools": "Waiting on {tools}",
|
|
53
|
+
"status.idle": "Ready",
|
|
54
|
+
"status.done": "Finished",
|
|
55
|
+
"status.aborted": "Stopped",
|
|
56
|
+
"status.error": "Stopped by an error",
|
|
57
|
+
// ---- 问题对象(PRD D22 / F-I9)----
|
|
58
|
+
"question.handoff.prompt": "This conversation is at {percent}% of the context budget set for it. How should we continue?",
|
|
59
|
+
"question.handoff.self": "Let the assistant write the handoff itself",
|
|
60
|
+
"question.handoff.selfDetail": "Uses the full conversation and its tools — the best result, at the price of one more full input.",
|
|
61
|
+
"question.handoff.summary": "Summarise the history instead",
|
|
62
|
+
"question.handoff.summaryDetail": "Cheaper and predictable, but the document is less faithful.",
|
|
63
|
+
"question.handoff.decline": "Keep going in this conversation",
|
|
64
|
+
"question.confirm.prompt": "{action} can't be undone. Go ahead?",
|
|
65
|
+
"question.confirm.accept": "Yes, do it",
|
|
66
|
+
"question.confirm.decline": "Cancel",
|
|
67
|
+
"question.blocking": "This question is holding the conversation. Answer it to continue.",
|
|
68
|
+
// ---- 消息与状态的事实叙述(配结构化字段一起给出)----
|
|
69
|
+
"message.reverted": "Removed {count} message(s). The text is back in your input.",
|
|
70
|
+
"message.cwdMissing": "This project's folder no longer exists ({cwd}). The conversation and its history are still here.",
|
|
71
|
+
"message.injectedContext": "Sent by the host, not typed by you: {summary}",
|
|
72
|
+
// 会话创建时那条 hidden 消息里的那句事实(PRD F-D9:cwd 来自对话所属项目,不是宿主进程的目录)
|
|
73
|
+
"message.injectedContext.cwd": "the current folder is {cwd}",
|
|
74
|
+
"message.subagentFailed": "The helper agent {name} failed: {reason}",
|
|
75
|
+
"message.subagentFinished": "The helper agent {name} finished.",
|
|
76
|
+
"message.imageAsText": "{model} can't look at images, so {name} was described in text instead.",
|
|
77
|
+
"message.attachmentTooMany": "A message carries at most {limit} images. {name} was left out.",
|
|
78
|
+
// ---- 用量(PRD F-I5):三个数字分开给,句子只是给人看的拼装 ----
|
|
79
|
+
"usage.turn": "{value} tokens this turn",
|
|
80
|
+
"usage.total": "{value} tokens in total",
|
|
81
|
+
"usage.rate": "{value} tokens/s",
|
|
82
|
+
"usage.withSubAgents": "the total includes {value} from helper agents",
|
|
83
|
+
// ---- 状态栏各块的标签(PRD F-I6:宿主给块名,客户端排版)----
|
|
84
|
+
"label.agent": "Assistant",
|
|
85
|
+
"label.model": "Model",
|
|
86
|
+
"label.thinking": "Thinking",
|
|
87
|
+
"label.context": "Context",
|
|
88
|
+
"label.usage": "Usage",
|
|
89
|
+
"label.cwd": "Folder",
|
|
90
|
+
"label.tools": "Tools running",
|
|
91
|
+
"label.subagents": "Helper agents",
|
|
92
|
+
// ---- `@` 补全(PRD F-H5 / D7)----
|
|
93
|
+
"completion.scanning": "Still reading the project's file list — a few more characters and it will fill in.",
|
|
94
|
+
"completion.timedOut": "The file list took longer than {seconds}s to build, so it may be incomplete.",
|
|
95
|
+
"completion.unavailable": "The file list isn't available here: {reason}",
|
|
96
|
+
"completion.noFolder": "this project's folder isn't there anymore",
|
|
97
|
+
"completion.truncated": "Only the first {limit} files are listed; narrow what you type to see the rest.",
|
|
98
|
+
// ---- 配置、模型、交接、工作区的短句 ----
|
|
99
|
+
"config.referenced": "Still used by {count} item(s), so it can't be removed: {names}",
|
|
100
|
+
"config.fileBroken": "{path} can't be read as settings: {reason}",
|
|
101
|
+
// ---- 端点、模型、助手的可用性(PRD F-B5:用不了也要列出来并说明原因)----
|
|
102
|
+
"endpoint.missing": "{id} isn't in the endpoint list anymore, so this can't be reached.",
|
|
103
|
+
"endpoint.noKey": "{endpoint} has no access key yet, so its models can't answer.",
|
|
104
|
+
"model.endpointMissing": "{model} points to an endpoint ({id}) that isn't in the endpoint list anymore.",
|
|
105
|
+
"agent.modelMissing": "This assistant is bound to a model ({id}) that isn't in the model list anymore.",
|
|
106
|
+
"agent.fileBroken": "{name} can't be read as an assistant definition: {reason}",
|
|
107
|
+
// 恢复出厂时这个助手在出厂清单里没有对应定义(用户自建的那一份,没有可用来替换的出厂版)
|
|
108
|
+
"agent.notFactory": "\"{id}\" isn't part of the factory assistant list, so there's no factory version to restore.",
|
|
109
|
+
// ---- 配置检查(PRD F-A8:配错了要能当场修,问题指到具体字段)----
|
|
110
|
+
"config.issue.thresholdOrder": "{name} has its handoff line ({handoff} tokens) at or above its hard limit ({guard} tokens).",
|
|
111
|
+
"config.issue.defaultMissing": "{field} points to {id}, which isn't in that list anymore.",
|
|
112
|
+
"config.issue.defaultAgentMissing": "The default assistant ({id}) isn't among the assistant definitions anymore.",
|
|
113
|
+
// ---- 能力发现(PRD F-G2 / F-F6:坏掉的那一条也要看得见)----
|
|
114
|
+
"discovery.notADirectory": "{path} isn't a directory, so nothing was read from it.",
|
|
115
|
+
"discovery.shadowed": "This entry is overridden by the closer {path}.",
|
|
116
|
+
"discovery.mcpEntryInvalid": "{name} has neither a transport nor a command, so it can't be connected.",
|
|
117
|
+
"discovery.skillBroken": "{name} has a SKILL.md that can't be used as a skill: {reason}",
|
|
118
|
+
"discovery.toolUnloadable": "{name} couldn't be loaded as a tool: {reason}",
|
|
119
|
+
"discovery.subAgentBroken": "{name} isn't a usable sub-agent definition: {reason}",
|
|
120
|
+
"model.unavailable": "{name} is listed but can't be used right now: {reason}",
|
|
121
|
+
"model.visionRequired": "{model} can't read images, and this conversation has some.",
|
|
122
|
+
"handoff.degraded": "The handoff fell back to {mode}: {reason}",
|
|
123
|
+
"handoff.declined": "No handoff this time.",
|
|
124
|
+
"handoff.noDocuments": "No handoff documents in this project yet.",
|
|
125
|
+
"workspace.removalCost": "This removes {conversations} conversation(s) and their {messages} message(s). The folder on disk stays.",
|
|
126
|
+
"attachment.tooLarge": "Each image can be at most {limit}; {name} is {size}.",
|
|
127
|
+
"attachment.tooMany": "A message carries at most {limit} images.",
|
|
128
|
+
// ---- 通知 / 问题 / 交接 / 自动命名 / 临时对话(W4-H)----
|
|
129
|
+
// 库里那条通知的码认不出来(配置被手改坏、旧版本写进去的码)时的兜底句
|
|
130
|
+
"notice.unknown": "A notice from the host ({code}).",
|
|
131
|
+
// 交接本身失败(写不出文档、摘要请求出错);用户取消不算失败,走 `error.handoffDeclined`
|
|
132
|
+
"error.handoffFailed": "The handoff didn't go through: {reason}",
|
|
133
|
+
// 临时对话(D3):一次请求跑一轮,失败时没有会话可回看,只能在这一句里说清
|
|
134
|
+
"error.transientFailed": "That one-off request didn't finish: {reason}",
|
|
135
|
+
// 交接之后新开的那段对话,开场带上交接文档的位置与摘要(D18)
|
|
136
|
+
"handoff.newConversationSummary": "This conversation continues an earlier one. The handoff document is at {path} — read it first, then carry on with the task.\n\nSummary of the handoff:\n{summary}",
|
|
137
|
+
// 降级的原因(`handoff.degraded` 的 {reason} 就是这句话)
|
|
138
|
+
"handoff.degradeReason.fallback": "the assistant couldn't write the document itself this time",
|
|
139
|
+
// 自动命名(D2):起不出名就保持原名,这句只在内部结果与日志里出现
|
|
140
|
+
"autoName.failed": "No name came out of it, so the original one stays: {reason}",
|
|
141
|
+
// ---- 能力清单:帮助页与指令菜单按它渲染(F-E5 / F-E6 / F-F9,裁定 R6)----
|
|
142
|
+
// 每个方法一条标题(`capability.<方法名>`)加一句说明(`.detail`);
|
|
143
|
+
// 编号与阻塞 / 不可撤销属性见 `handlers/capabilities.ts`
|
|
144
|
+
"capability.host.hello": "Connect to the host",
|
|
145
|
+
"capability.host.hello.detail": "Opens a connection with an access key and fixes the language this connection speaks.",
|
|
146
|
+
"capability.host.version": "Show the host version",
|
|
147
|
+
"capability.host.version.detail": "The running version and the protocol version, so an upgrade can be checked.",
|
|
148
|
+
"capability.host.upgrade": "Restart into a newer version",
|
|
149
|
+
"capability.host.upgrade.detail": "Compares the version on disk with the running one and restarts when the update has really landed.",
|
|
150
|
+
"capability.host.shutdown": "Shut the host down",
|
|
151
|
+
"capability.host.shutdown.detail": "Stops serving once nothing is left running — open connections are closed.",
|
|
152
|
+
"capability.host.capabilities": "List what the host can do",
|
|
153
|
+
"capability.host.capabilities.detail": "The list this help page is drawn from: what each ability does and whether it blocks or can't be undone.",
|
|
154
|
+
"capability.host.reload": "Reload from disk",
|
|
155
|
+
"capability.host.reload.detail": "Re-read configuration, assistants, tools, skills or MCP entries: affected projects rebuild their capabilities, nothing restarts.",
|
|
156
|
+
"capability.host.setLanguage": "Switch language for this connection",
|
|
157
|
+
"capability.host.setLanguage.detail": "Every message on this connection is rendered in the chosen language; a reconnect forgets it.",
|
|
158
|
+
"capability.workspace.list": "List projects",
|
|
159
|
+
"capability.workspace.list.detail": "Every project on this machine, including the ones whose folder is gone.",
|
|
160
|
+
"capability.workspace.create": "Add a project",
|
|
161
|
+
"capability.workspace.create.detail": "Registers a folder as a project; the same folder can only be added once.",
|
|
162
|
+
"capability.workspace.get": "Show a project",
|
|
163
|
+
"capability.workspace.get.detail": "One project by id, with whether its folder still exists.",
|
|
164
|
+
"capability.workspace.rename": "Rename a project",
|
|
165
|
+
"capability.workspace.rename.detail": "Changes the display name only; the folder path never changes.",
|
|
166
|
+
"capability.workspace.remove": "Remove a project",
|
|
167
|
+
"capability.workspace.remove.detail": "Deletes the project and every conversation in it; the folder on disk is left alone.",
|
|
168
|
+
"capability.conversation.list": "List conversations",
|
|
169
|
+
"capability.conversation.list.detail": "Newest first, pinned ones on top; can be narrowed to one project.",
|
|
170
|
+
"capability.conversation.create": "Start a conversation",
|
|
171
|
+
"capability.conversation.create.detail": "Fixes the project, the assistant and the model for this conversation up front.",
|
|
172
|
+
"capability.conversation.get": "Open a conversation",
|
|
173
|
+
"capability.conversation.get.detail": "One conversation by id — how you pick up where you left off.",
|
|
174
|
+
"capability.conversation.state": "Show what is happening right now",
|
|
175
|
+
"capability.conversation.state.detail": "The six-state run, context thresholds, pending questions and usage in one snapshot.",
|
|
176
|
+
"capability.conversation.rename": "Rename a conversation",
|
|
177
|
+
"capability.conversation.rename.detail": "Changes the name only; identity and order stay as they were.",
|
|
178
|
+
"capability.conversation.pin": "Pin a conversation",
|
|
179
|
+
"capability.conversation.pin.detail": "Keeps it at the top of the sidebar without changing anything else.",
|
|
180
|
+
"capability.conversation.delete": "Delete a conversation",
|
|
181
|
+
"capability.conversation.delete.detail": "Removes the conversation and its messages for good, and cleans up its images.",
|
|
182
|
+
"capability.conversation.send": "Send a message",
|
|
183
|
+
"capability.conversation.send.detail": "Starts one turn: you get the message ids back at once, the answer streams in after.",
|
|
184
|
+
"capability.conversation.abort": "Stop the current turn",
|
|
185
|
+
"capability.conversation.abort.detail": "Stops the answer that is being written; what was written so far stays.",
|
|
186
|
+
"capability.conversation.revert": "Take back messages",
|
|
187
|
+
"capability.conversation.revert.detail": "Deletes everything after a chosen message and puts that text back in your input.",
|
|
188
|
+
"capability.conversation.setModel": "Switch model for this conversation",
|
|
189
|
+
"capability.conversation.setModel.detail": "Without touching the assistant's default and without restarting the conversation.",
|
|
190
|
+
"capability.conversation.setThinking": "Set how hard the model thinks",
|
|
191
|
+
"capability.conversation.setThinking.detail": "Turns a thinking level into request parameters for this conversation only.",
|
|
192
|
+
"capability.conversation.transient": "Ask once without a conversation",
|
|
193
|
+
"capability.conversation.transient.detail": "One request, one answer, nothing saved and no conversation created.",
|
|
194
|
+
"capability.message.list": "Show messages",
|
|
195
|
+
"capability.message.list.detail": "The whole history of a conversation, or everything from a given message on, helper agents included.",
|
|
196
|
+
"capability.question.list": "Show open questions",
|
|
197
|
+
"capability.question.list.detail": "Questions waiting for an answer; every window sees the same ones.",
|
|
198
|
+
"capability.question.answer": "Answer a question",
|
|
199
|
+
"capability.question.answer.detail": "Records the answer and carries on: a handoff question starts the handoff by itself.",
|
|
200
|
+
"capability.notice.list": "Show notices",
|
|
201
|
+
"capability.notice.list.detail": "The notices still on screen — separate from the message stream.",
|
|
202
|
+
"capability.notice.dismiss": "Dismiss a notice",
|
|
203
|
+
"capability.notice.dismiss.detail": "Clears one notice; timed notices go away on their own.",
|
|
204
|
+
"capability.notice.clear": "Clear all notices",
|
|
205
|
+
"capability.notice.clear.detail": "Clears a batch at once, either the whole list or one conversation's.",
|
|
206
|
+
"capability.config.get": "Show settings",
|
|
207
|
+
"capability.config.get.detail": "Endpoints (keys masked), models, defaults and what is misconfigured, in one read.",
|
|
208
|
+
"capability.config.patch": "Change settings",
|
|
209
|
+
"capability.config.patch.detail": "Writes the change and applies it right away — no restart, no save button.",
|
|
210
|
+
"capability.config.setDefaults": "Set the defaults",
|
|
211
|
+
"capability.config.setDefaults.detail": "Default assistant, fallback model, migration model, image model and naming model.",
|
|
212
|
+
"capability.config.getDiscovery": "Show where abilities come from",
|
|
213
|
+
"capability.config.getDiscovery.detail": "The MCP layers, Skills, tools and helpers that are actually found, plus the files that can't be read.",
|
|
214
|
+
"capability.config.saveMcp": "Save an MCP server",
|
|
215
|
+
"capability.config.saveMcp.detail": "Creates it if the id is new, edits it otherwise — one entry at a time, with its transport and that transport's parameters; fields this version doesn't know are kept as they are.",
|
|
216
|
+
"capability.config.deleteMcp": "Delete an MCP server",
|
|
217
|
+
"capability.config.deleteMcp.detail": "Removes one entry from one of the two editable scopes; says so plainly when it wasn't there.",
|
|
218
|
+
"capability.config.saveEndpoint": "Save an endpoint",
|
|
219
|
+
"capability.config.saveEndpoint.detail": "Creates or edits an endpoint; leave the key out to keep the current one.",
|
|
220
|
+
"capability.config.deleteEndpoint": "Delete an endpoint",
|
|
221
|
+
"capability.config.deleteEndpoint.detail": "Refuses while models still point at it and lists who does.",
|
|
222
|
+
"capability.agent.list": "List assistants",
|
|
223
|
+
"capability.agent.list.detail": "Every assistant, including the ones that can't be used right now and why.",
|
|
224
|
+
"capability.agent.get": "Show an assistant",
|
|
225
|
+
"capability.agent.get.detail": "One assistant definition by id, straight from its file.",
|
|
226
|
+
"capability.agent.create": "Create an assistant",
|
|
227
|
+
"capability.agent.create.detail": "Writes a new definition file — one file per assistant, editable by hand.",
|
|
228
|
+
"capability.agent.update": "Edit an assistant",
|
|
229
|
+
"capability.agent.update.detail": "Changes the definition file; from then on it counts as your own, not the factory one.",
|
|
230
|
+
"capability.agent.delete": "Delete an assistant",
|
|
231
|
+
"capability.agent.delete.detail": "Removes the definition and says who else points at it first.",
|
|
232
|
+
"capability.agent.setModel": "Set an assistant's model",
|
|
233
|
+
"capability.agent.setModel.detail": "Changes the assistant's default model, which affects conversations started later.",
|
|
234
|
+
"capability.agent.setThinking": "Set an assistant's thinking level",
|
|
235
|
+
"capability.agent.setThinking.detail": "Writes the expanded request parameters into the assistant definition.",
|
|
236
|
+
"capability.agent.restoreFactory": "Restore an assistant to factory settings",
|
|
237
|
+
"capability.agent.restoreFactory.detail": "Puts the whole assistant definition — prompt, model, permissions and thinking settings — back to the one that shipped with the host. You can look at the result before it's written.",
|
|
238
|
+
"capability.model.list": "List models",
|
|
239
|
+
"capability.model.list.detail": "Factory-managed and custom models with thresholds, thinking presets and availability.",
|
|
240
|
+
"capability.model.listImages": "List image models",
|
|
241
|
+
"capability.model.listImages.detail": "The models used for image generation, plus which one is the default.",
|
|
242
|
+
"capability.model.create": "Create a model",
|
|
243
|
+
"capability.model.create.detail": "Adds a model bound to an endpoint; a new one counts as custom right away.",
|
|
244
|
+
"capability.model.update": "Edit a model",
|
|
245
|
+
"capability.model.update.detail": "Editing a factory model turns it into a custom one so later updates leave it alone.",
|
|
246
|
+
"capability.model.delete": "Delete a model",
|
|
247
|
+
"capability.model.delete.detail": "Refuses while an assistant still points at it, and fixes the defaults when it goes.",
|
|
248
|
+
"capability.model.restoreFactory": "Restore a model to factory settings",
|
|
249
|
+
"capability.model.restoreFactory.detail": "Replaces the whole model definition with the factory one in a single step.",
|
|
250
|
+
"capability.model.saveImage": "Create or edit an image model",
|
|
251
|
+
"capability.model.saveImage.detail": "Binds an image model to an endpoint with its default size and quality.",
|
|
252
|
+
"capability.model.deleteImage": "Delete an image model",
|
|
253
|
+
"capability.model.deleteImage.detail": "Refuses while it is the default image model.",
|
|
254
|
+
"capability.asset.begin": "Start an upload",
|
|
255
|
+
"capability.asset.begin.detail": "Declares the size and type of a file; anything over the limit is refused right here.",
|
|
256
|
+
"capability.asset.end": "Finish an upload",
|
|
257
|
+
"capability.asset.end.detail": "Checks length and digest, then turns the file into something a message can reference.",
|
|
258
|
+
"capability.asset.get": "Fetch an asset",
|
|
259
|
+
"capability.asset.get.detail": "Returns the stored bytes so any model can replay an image from history; the thumbnail variant currently equals the original.",
|
|
260
|
+
"capability.completion.files": "Complete file paths",
|
|
261
|
+
"capability.completion.files.detail": "The project's file list behind the `@` menu; says so when it is still reading.",
|
|
262
|
+
"capability.handoff.start": "Write a handoff document",
|
|
263
|
+
"capability.handoff.start.detail": "Writes the document and, if asked, opens the next conversation; the old one stays complete.",
|
|
264
|
+
"capability.handoff.listDocuments": "List handoff documents",
|
|
265
|
+
"capability.handoff.listDocuments.detail": "The documents already written in this project, ready to be refined again.",
|
|
266
|
+
"capability.search.conversations": "Search conversations by name",
|
|
267
|
+
"capability.search.conversations.detail": "Finds old conversations by what they are called, optionally within one project.",
|
|
268
|
+
"capability.search.messages": "Search inside conversations",
|
|
269
|
+
"capability.search.messages.detail": "Full-text search over what was said, with a snippet of each hit.",
|
|
270
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { en } from "./en.js";
|
|
2
|
+
import { zh } from "./zh.js";
|
|
3
|
+
/**
|
|
4
|
+
* 文案层:一个键 + 一组参数 → 一句当前语言的话。
|
|
5
|
+
*
|
|
6
|
+
* 语言挂在连接上(PRD D8):`hello` 带可选 `language`,断开即忘;缺省用配置里的默认语言。
|
|
7
|
+
* 所以这里只有「按语言渲染」这一件事,不持有任何进程级语言状态 —— 渲染由调用方把语言传进来。
|
|
8
|
+
*
|
|
9
|
+
* 需要落库的东西(通知、问题、消息上的失败说明)入库的是「码 + 参数」,读取时再按连接语言
|
|
10
|
+
* 渲染(architecture §6);本文件的 `render` 就是那一步。
|
|
11
|
+
*/
|
|
12
|
+
/** 文案键:集合以 `en.ts` 为准 */
|
|
13
|
+
export type MessageKey = keyof typeof en;
|
|
14
|
+
/** 支持的语言;增删语言只改这两处(`Language` 与 `DICTIONARIES`) */
|
|
15
|
+
export type Language = "en" | "zh";
|
|
16
|
+
/** 默认语言(PRD D8:缺省英文) */
|
|
17
|
+
export declare const DEFAULT_LANGUAGE: Language;
|
|
18
|
+
/** 全部受支持的语言,按展示顺序 */
|
|
19
|
+
export declare const LANGUAGES: readonly Language[];
|
|
20
|
+
/**
|
|
21
|
+
* 把外部给的值收敛成受支持的语言;认不出来就回落默认语言。
|
|
22
|
+
*
|
|
23
|
+
* `hello` 里的 `language` 来自客户端、可能缺失或写错,收敛点只有这一处,
|
|
24
|
+
* 免得「en-US」「zh-CN」「EN」在调用链上各被解释一次。
|
|
25
|
+
*/
|
|
26
|
+
export declare function normalizeLanguage(value: unknown): Language;
|
|
27
|
+
/** 运行时判断某个字符串是不是已知文案键(`hasMessage("error.busy")`) */
|
|
28
|
+
export declare function hasMessage(key: string): key is MessageKey;
|
|
29
|
+
/**
|
|
30
|
+
* 取原始模板;键不存在时返回 undefined。
|
|
31
|
+
*
|
|
32
|
+
* 供「按码取模板」的场合使用(例如把库里的旧码渲染出来),找不到时由调用方决定说什么。
|
|
33
|
+
*/
|
|
34
|
+
export declare function template(language: Language, key: MessageKey): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* 渲染一条文案:`render("zh", "error.notFound", { entity: "对话" })`。
|
|
37
|
+
*
|
|
38
|
+
* 占位符 `{name}` 从 `params` 里取。取不到值时**原样留下占位符**:把 `undefined` 拼进
|
|
39
|
+
* 句子会让界面出现「存在 undefined」这种更难解释的东西,留下 `{name}` 至少指明了缺什么。
|
|
40
|
+
* 非字符串的值按可读形式拼接(数字、布尔直出,其余 JSON 化)。
|
|
41
|
+
*/
|
|
42
|
+
export declare function render(language: Language, key: MessageKey, params?: Record<string, unknown>): string;
|
|
43
|
+
export { en, zh };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { en } from "./en.js";
|
|
2
|
+
import { zh } from "./zh.js";
|
|
3
|
+
/** 默认语言(PRD D8:缺省英文) */
|
|
4
|
+
export const DEFAULT_LANGUAGE = "en";
|
|
5
|
+
/** 全部受支持的语言,按展示顺序 */
|
|
6
|
+
export const LANGUAGES = ["en", "zh"];
|
|
7
|
+
const DICTIONARIES = { en, zh };
|
|
8
|
+
/**
|
|
9
|
+
* 把外部给的值收敛成受支持的语言;认不出来就回落默认语言。
|
|
10
|
+
*
|
|
11
|
+
* `hello` 里的 `language` 来自客户端、可能缺失或写错,收敛点只有这一处,
|
|
12
|
+
* 免得「en-US」「zh-CN」「EN」在调用链上各被解释一次。
|
|
13
|
+
*/
|
|
14
|
+
export function normalizeLanguage(value) {
|
|
15
|
+
if (typeof value !== "string")
|
|
16
|
+
return DEFAULT_LANGUAGE;
|
|
17
|
+
const lowered = value.trim().toLowerCase();
|
|
18
|
+
if (lowered === "")
|
|
19
|
+
return DEFAULT_LANGUAGE;
|
|
20
|
+
// 先认整串,再认 `zh-CN` / `en_US` 这类带地区的写法
|
|
21
|
+
const exact = LANGUAGES.find((language) => language === lowered);
|
|
22
|
+
if (exact)
|
|
23
|
+
return exact;
|
|
24
|
+
const base = lowered.split(/[-_]/)[0] ?? "";
|
|
25
|
+
const matched = LANGUAGES.find((language) => language === base);
|
|
26
|
+
return matched ?? DEFAULT_LANGUAGE;
|
|
27
|
+
}
|
|
28
|
+
/** 运行时判断某个字符串是不是已知文案键(`hasMessage("error.busy")`) */
|
|
29
|
+
export function hasMessage(key) {
|
|
30
|
+
return Object.prototype.hasOwnProperty.call(en, key);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 取原始模板;键不存在时返回 undefined。
|
|
34
|
+
*
|
|
35
|
+
* 供「按码取模板」的场合使用(例如把库里的旧码渲染出来),找不到时由调用方决定说什么。
|
|
36
|
+
*/
|
|
37
|
+
export function template(language, key) {
|
|
38
|
+
return DICTIONARIES[language][key];
|
|
39
|
+
}
|
|
40
|
+
const PLACEHOLDER = /\{(\w+)\}/g;
|
|
41
|
+
/**
|
|
42
|
+
* 渲染一条文案:`render("zh", "error.notFound", { entity: "对话" })`。
|
|
43
|
+
*
|
|
44
|
+
* 占位符 `{name}` 从 `params` 里取。取不到值时**原样留下占位符**:把 `undefined` 拼进
|
|
45
|
+
* 句子会让界面出现「存在 undefined」这种更难解释的东西,留下 `{name}` 至少指明了缺什么。
|
|
46
|
+
* 非字符串的值按可读形式拼接(数字、布尔直出,其余 JSON 化)。
|
|
47
|
+
*/
|
|
48
|
+
export function render(language, key, params) {
|
|
49
|
+
const source = DICTIONARIES[language][key];
|
|
50
|
+
if (params === undefined)
|
|
51
|
+
return source;
|
|
52
|
+
return source.replace(PLACEHOLDER, (whole, name) => {
|
|
53
|
+
if (!Object.prototype.hasOwnProperty.call(params, name))
|
|
54
|
+
return whole;
|
|
55
|
+
const value = params[name];
|
|
56
|
+
if (value === null)
|
|
57
|
+
return whole;
|
|
58
|
+
if (typeof value === "string")
|
|
59
|
+
return value;
|
|
60
|
+
if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
|
|
61
|
+
return String(value);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
return JSON.stringify(value);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// 循环引用之类无法序列化的值:不吞掉句子,退回占位符
|
|
68
|
+
return whole;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export { en, zh };
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 中文文案表。
|
|
3
|
+
*
|
|
4
|
+
* `satisfies Record<keyof typeof en, string>` 让「少一个键」「多一个键」都在编译期露馅:
|
|
5
|
+
* 键的集合唯一真相在 `en.ts`,本文件只负责把每一句换成中文。语气与英文版一致 ——
|
|
6
|
+
* 说清发生了什么、用户能做什么,判断留给客户端(PRD D12)。
|
|
7
|
+
*/
|
|
8
|
+
export declare const zh: {
|
|
9
|
+
"error.unauthorized": string;
|
|
10
|
+
"error.invalidParams": string;
|
|
11
|
+
"error.notFound": string;
|
|
12
|
+
"error.busy": string;
|
|
13
|
+
"error.payloadTooLarge": string;
|
|
14
|
+
"error.unsupported": string;
|
|
15
|
+
"error.internal": string;
|
|
16
|
+
"error.configInvalid": string;
|
|
17
|
+
"error.portInvalid": string;
|
|
18
|
+
"error.modelUnresolved": string;
|
|
19
|
+
"error.notFactoryModel": string;
|
|
20
|
+
"error.mcpUnavailable": string;
|
|
21
|
+
"error.modelUnsupported": string;
|
|
22
|
+
"error.handoffDeclined": string;
|
|
23
|
+
"error.questionPending": string;
|
|
24
|
+
"error.contextGuard": string;
|
|
25
|
+
"notice.settingsSaved": string;
|
|
26
|
+
"notice.settingsApplied": string;
|
|
27
|
+
"notice.conversationDeleted": string;
|
|
28
|
+
"notice.workspaceDeleted": string;
|
|
29
|
+
"notice.assetsUploaded": string;
|
|
30
|
+
"notice.attachmentDropped": string;
|
|
31
|
+
"notice.upgradeRestarting": string;
|
|
32
|
+
"notice.logWarning": string;
|
|
33
|
+
"notice.logError": string;
|
|
34
|
+
"notice.handoffWritten": string;
|
|
35
|
+
"notice.autoNamed": string;
|
|
36
|
+
"notice.languageChanged": string;
|
|
37
|
+
"notice.hardLimitHit": string;
|
|
38
|
+
"status.connected": string;
|
|
39
|
+
"status.awaitingFirstToken": string;
|
|
40
|
+
"status.thinking": string;
|
|
41
|
+
"status.generating": string;
|
|
42
|
+
"status.assemblingToolCalls": string;
|
|
43
|
+
"status.awaitingTools": string;
|
|
44
|
+
"status.idle": string;
|
|
45
|
+
"status.done": string;
|
|
46
|
+
"status.aborted": string;
|
|
47
|
+
"status.error": string;
|
|
48
|
+
"question.handoff.prompt": string;
|
|
49
|
+
"question.handoff.self": string;
|
|
50
|
+
"question.handoff.selfDetail": string;
|
|
51
|
+
"question.handoff.summary": string;
|
|
52
|
+
"question.handoff.summaryDetail": string;
|
|
53
|
+
"question.handoff.decline": string;
|
|
54
|
+
"question.confirm.prompt": string;
|
|
55
|
+
"question.confirm.accept": string;
|
|
56
|
+
"question.confirm.decline": string;
|
|
57
|
+
"question.blocking": string;
|
|
58
|
+
"message.reverted": string;
|
|
59
|
+
"message.cwdMissing": string;
|
|
60
|
+
"message.injectedContext": string;
|
|
61
|
+
"message.injectedContext.cwd": string;
|
|
62
|
+
"message.subagentFailed": string;
|
|
63
|
+
"message.subagentFinished": string;
|
|
64
|
+
"message.imageAsText": string;
|
|
65
|
+
"message.attachmentTooMany": string;
|
|
66
|
+
"usage.turn": string;
|
|
67
|
+
"usage.total": string;
|
|
68
|
+
"usage.rate": string;
|
|
69
|
+
"usage.withSubAgents": string;
|
|
70
|
+
"label.agent": string;
|
|
71
|
+
"label.model": string;
|
|
72
|
+
"label.thinking": string;
|
|
73
|
+
"label.context": string;
|
|
74
|
+
"label.usage": string;
|
|
75
|
+
"label.cwd": string;
|
|
76
|
+
"label.tools": string;
|
|
77
|
+
"label.subagents": string;
|
|
78
|
+
"completion.scanning": string;
|
|
79
|
+
"completion.timedOut": string;
|
|
80
|
+
"completion.unavailable": string;
|
|
81
|
+
"completion.noFolder": string;
|
|
82
|
+
"completion.truncated": string;
|
|
83
|
+
"config.referenced": string;
|
|
84
|
+
"config.fileBroken": string;
|
|
85
|
+
"endpoint.missing": string;
|
|
86
|
+
"endpoint.noKey": string;
|
|
87
|
+
"model.endpointMissing": string;
|
|
88
|
+
"agent.modelMissing": string;
|
|
89
|
+
"agent.fileBroken": string;
|
|
90
|
+
"agent.notFactory": string;
|
|
91
|
+
"config.issue.thresholdOrder": string;
|
|
92
|
+
"config.issue.defaultMissing": string;
|
|
93
|
+
"config.issue.defaultAgentMissing": string;
|
|
94
|
+
"discovery.notADirectory": string;
|
|
95
|
+
"discovery.shadowed": string;
|
|
96
|
+
"discovery.mcpEntryInvalid": string;
|
|
97
|
+
"discovery.skillBroken": string;
|
|
98
|
+
"discovery.toolUnloadable": string;
|
|
99
|
+
"discovery.subAgentBroken": string;
|
|
100
|
+
"model.unavailable": string;
|
|
101
|
+
"model.visionRequired": string;
|
|
102
|
+
"handoff.degraded": string;
|
|
103
|
+
"handoff.declined": string;
|
|
104
|
+
"handoff.noDocuments": string;
|
|
105
|
+
"workspace.removalCost": string;
|
|
106
|
+
"attachment.tooLarge": string;
|
|
107
|
+
"attachment.tooMany": string;
|
|
108
|
+
"notice.unknown": string;
|
|
109
|
+
"error.handoffFailed": string;
|
|
110
|
+
"error.transientFailed": string;
|
|
111
|
+
"handoff.newConversationSummary": string;
|
|
112
|
+
"handoff.degradeReason.fallback": string;
|
|
113
|
+
"autoName.failed": string;
|
|
114
|
+
"capability.host.hello": string;
|
|
115
|
+
"capability.host.hello.detail": string;
|
|
116
|
+
"capability.host.version": string;
|
|
117
|
+
"capability.host.version.detail": string;
|
|
118
|
+
"capability.host.upgrade": string;
|
|
119
|
+
"capability.host.upgrade.detail": string;
|
|
120
|
+
"capability.host.shutdown": string;
|
|
121
|
+
"capability.host.shutdown.detail": string;
|
|
122
|
+
"capability.host.capabilities": string;
|
|
123
|
+
"capability.host.capabilities.detail": string;
|
|
124
|
+
"capability.host.reload": string;
|
|
125
|
+
"capability.host.reload.detail": string;
|
|
126
|
+
"capability.host.setLanguage": string;
|
|
127
|
+
"capability.host.setLanguage.detail": string;
|
|
128
|
+
"capability.workspace.list": string;
|
|
129
|
+
"capability.workspace.list.detail": string;
|
|
130
|
+
"capability.workspace.create": string;
|
|
131
|
+
"capability.workspace.create.detail": string;
|
|
132
|
+
"capability.workspace.get": string;
|
|
133
|
+
"capability.workspace.get.detail": string;
|
|
134
|
+
"capability.workspace.rename": string;
|
|
135
|
+
"capability.workspace.rename.detail": string;
|
|
136
|
+
"capability.workspace.remove": string;
|
|
137
|
+
"capability.workspace.remove.detail": string;
|
|
138
|
+
"capability.conversation.list": string;
|
|
139
|
+
"capability.conversation.list.detail": string;
|
|
140
|
+
"capability.conversation.create": string;
|
|
141
|
+
"capability.conversation.create.detail": string;
|
|
142
|
+
"capability.conversation.get": string;
|
|
143
|
+
"capability.conversation.get.detail": string;
|
|
144
|
+
"capability.conversation.state": string;
|
|
145
|
+
"capability.conversation.state.detail": string;
|
|
146
|
+
"capability.conversation.rename": string;
|
|
147
|
+
"capability.conversation.rename.detail": string;
|
|
148
|
+
"capability.conversation.pin": string;
|
|
149
|
+
"capability.conversation.pin.detail": string;
|
|
150
|
+
"capability.conversation.delete": string;
|
|
151
|
+
"capability.conversation.delete.detail": string;
|
|
152
|
+
"capability.conversation.send": string;
|
|
153
|
+
"capability.conversation.send.detail": string;
|
|
154
|
+
"capability.conversation.abort": string;
|
|
155
|
+
"capability.conversation.abort.detail": string;
|
|
156
|
+
"capability.conversation.revert": string;
|
|
157
|
+
"capability.conversation.revert.detail": string;
|
|
158
|
+
"capability.conversation.setModel": string;
|
|
159
|
+
"capability.conversation.setModel.detail": string;
|
|
160
|
+
"capability.conversation.setThinking": string;
|
|
161
|
+
"capability.conversation.setThinking.detail": string;
|
|
162
|
+
"capability.conversation.transient": string;
|
|
163
|
+
"capability.conversation.transient.detail": string;
|
|
164
|
+
"capability.message.list": string;
|
|
165
|
+
"capability.message.list.detail": string;
|
|
166
|
+
"capability.question.list": string;
|
|
167
|
+
"capability.question.list.detail": string;
|
|
168
|
+
"capability.question.answer": string;
|
|
169
|
+
"capability.question.answer.detail": string;
|
|
170
|
+
"capability.notice.list": string;
|
|
171
|
+
"capability.notice.list.detail": string;
|
|
172
|
+
"capability.notice.dismiss": string;
|
|
173
|
+
"capability.notice.dismiss.detail": string;
|
|
174
|
+
"capability.notice.clear": string;
|
|
175
|
+
"capability.notice.clear.detail": string;
|
|
176
|
+
"capability.config.get": string;
|
|
177
|
+
"capability.config.get.detail": string;
|
|
178
|
+
"capability.config.patch": string;
|
|
179
|
+
"capability.config.patch.detail": string;
|
|
180
|
+
"capability.config.setDefaults": string;
|
|
181
|
+
"capability.config.setDefaults.detail": string;
|
|
182
|
+
"capability.config.getDiscovery": string;
|
|
183
|
+
"capability.config.getDiscovery.detail": string;
|
|
184
|
+
"capability.config.saveMcp": string;
|
|
185
|
+
"capability.config.saveMcp.detail": string;
|
|
186
|
+
"capability.config.deleteMcp": string;
|
|
187
|
+
"capability.config.deleteMcp.detail": string;
|
|
188
|
+
"capability.config.saveEndpoint": string;
|
|
189
|
+
"capability.config.saveEndpoint.detail": string;
|
|
190
|
+
"capability.config.deleteEndpoint": string;
|
|
191
|
+
"capability.config.deleteEndpoint.detail": string;
|
|
192
|
+
"capability.agent.list": string;
|
|
193
|
+
"capability.agent.list.detail": string;
|
|
194
|
+
"capability.agent.get": string;
|
|
195
|
+
"capability.agent.get.detail": string;
|
|
196
|
+
"capability.agent.create": string;
|
|
197
|
+
"capability.agent.create.detail": string;
|
|
198
|
+
"capability.agent.update": string;
|
|
199
|
+
"capability.agent.update.detail": string;
|
|
200
|
+
"capability.agent.delete": string;
|
|
201
|
+
"capability.agent.delete.detail": string;
|
|
202
|
+
"capability.agent.setModel": string;
|
|
203
|
+
"capability.agent.setModel.detail": string;
|
|
204
|
+
"capability.agent.setThinking": string;
|
|
205
|
+
"capability.agent.setThinking.detail": string;
|
|
206
|
+
"capability.agent.restoreFactory": string;
|
|
207
|
+
"capability.agent.restoreFactory.detail": string;
|
|
208
|
+
"capability.model.list": string;
|
|
209
|
+
"capability.model.list.detail": string;
|
|
210
|
+
"capability.model.listImages": string;
|
|
211
|
+
"capability.model.listImages.detail": string;
|
|
212
|
+
"capability.model.create": string;
|
|
213
|
+
"capability.model.create.detail": string;
|
|
214
|
+
"capability.model.update": string;
|
|
215
|
+
"capability.model.update.detail": string;
|
|
216
|
+
"capability.model.delete": string;
|
|
217
|
+
"capability.model.delete.detail": string;
|
|
218
|
+
"capability.model.restoreFactory": string;
|
|
219
|
+
"capability.model.restoreFactory.detail": string;
|
|
220
|
+
"capability.model.saveImage": string;
|
|
221
|
+
"capability.model.saveImage.detail": string;
|
|
222
|
+
"capability.model.deleteImage": string;
|
|
223
|
+
"capability.model.deleteImage.detail": string;
|
|
224
|
+
"capability.asset.begin": string;
|
|
225
|
+
"capability.asset.begin.detail": string;
|
|
226
|
+
"capability.asset.end": string;
|
|
227
|
+
"capability.asset.end.detail": string;
|
|
228
|
+
"capability.asset.get": string;
|
|
229
|
+
"capability.asset.get.detail": string;
|
|
230
|
+
"capability.completion.files": string;
|
|
231
|
+
"capability.completion.files.detail": string;
|
|
232
|
+
"capability.handoff.start": string;
|
|
233
|
+
"capability.handoff.start.detail": string;
|
|
234
|
+
"capability.handoff.listDocuments": string;
|
|
235
|
+
"capability.handoff.listDocuments.detail": string;
|
|
236
|
+
"capability.search.conversations": string;
|
|
237
|
+
"capability.search.conversations.detail": string;
|
|
238
|
+
"capability.search.messages": string;
|
|
239
|
+
"capability.search.messages.detail": string;
|
|
240
|
+
};
|