@yancyyu/openhermit 1.6.30 → 1.6.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-renderer/assets/{ProjectEditorOverlay-DsQt4FHy.js → ProjectEditorOverlay-DkXfi2pg.js} +1 -1
- package/dist-renderer/assets/{TeamGraphOverlay-BjZC53xf.js → TeamGraphOverlay-CHNNVraw.js} +1 -1
- package/dist-renderer/assets/{_basePickBy-CrWocIjq.js → _basePickBy-Do-Ff83V.js} +1 -1
- package/dist-renderer/assets/{_baseUniq-B6d8ysWi.js → _baseUniq-nDLhSuJI.js} +1 -1
- package/dist-renderer/assets/{arc-DAIYCFP8.js → arc-Bp7fA6sx.js} +1 -1
- package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-B3UudXJh.js → architectureDiagram-VXUJARFQ-CPC1HdGy.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-VD42YOAC-DbptKQ4W.js → blockDiagram-VD42YOAC-DTVKyNTO.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-YG6GDRKO-C4WQuZpV.js → c4Diagram-YG6GDRKO-XVu-AN00.js} +1 -1
- package/dist-renderer/assets/channel-CIwbNcUO.js +1 -0
- package/dist-renderer/assets/{chunk-4BX2VUAB-Dp7fVpI_.js → chunk-4BX2VUAB-BcWmVyA-.js} +1 -1
- package/dist-renderer/assets/{chunk-55IACEB6-B8KGfbAy.js → chunk-55IACEB6-Co4Z2jsE.js} +1 -1
- package/dist-renderer/assets/{chunk-B4BG7PRW-BG1oJrjA.js → chunk-B4BG7PRW-C8q9gfDT.js} +1 -1
- package/dist-renderer/assets/{chunk-DI55MBZ5-DRmxNjht.js → chunk-DI55MBZ5-qDgb1gxO.js} +1 -1
- package/dist-renderer/assets/{chunk-FMBD7UC4-D6VLvy16.js → chunk-FMBD7UC4-Cm8Gu2gu.js} +1 -1
- package/dist-renderer/assets/{chunk-QN33PNHL-DZou1667.js → chunk-QN33PNHL-DYji1BRS.js} +1 -1
- package/dist-renderer/assets/{chunk-QZHKN3VN-CghmasSh.js → chunk-QZHKN3VN-DWAS568H.js} +1 -1
- package/dist-renderer/assets/{chunk-TZMSLE5B-B7apcMPK.js → chunk-TZMSLE5B-CLFzXLA8.js} +1 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-04A-pvql.js +1 -0
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-04A-pvql.js +1 -0
- package/dist-renderer/assets/clone-DQnvTIEM.js +1 -0
- package/dist-renderer/assets/{cose-bilkent-S5V4N54A-05e5uQDp.js → cose-bilkent-S5V4N54A-CZdGhX_3.js} +1 -1
- package/dist-renderer/assets/{dagre-6UL2VRFP-B06bRykF.js → dagre-6UL2VRFP-BVY-G6nO.js} +1 -1
- package/dist-renderer/assets/{diagram-PSM6KHXK-CY7VYQ7c.js → diagram-PSM6KHXK-CUACvAwG.js} +1 -1
- package/dist-renderer/assets/{diagram-QEK2KX5R-BjKEH7dD.js → diagram-QEK2KX5R-3SfnesSG.js} +1 -1
- package/dist-renderer/assets/{diagram-S2PKOQOG-Bf4ELS1_.js → diagram-S2PKOQOG-E3ksXClJ.js} +1 -1
- package/dist-renderer/assets/{erDiagram-Q2GNP2WA-DJ753_L9.js → erDiagram-Q2GNP2WA-aYjGXss7.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-NV44I4VS-B71S-lC-.js → flowDiagram-NV44I4VS-JMHrrTQs.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-JELNMOA3-C_U42mSZ.js → ganttDiagram-JELNMOA3-CVQ-R5rN.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-DKUJU4Ns.js → gitGraphDiagram-V2S2FVAM-OLn9jq61.js} +1 -1
- package/dist-renderer/assets/{graph-DY3qbzqj.js → graph-BAb2J0l8.js} +1 -1
- package/dist-renderer/assets/{index-Dhsk3_DD.js → index-BSoCjBWn.js} +1 -1
- package/dist-renderer/assets/{index-Bs27J5gB.js → index-BtG3HbqP.js} +1 -1
- package/dist-renderer/assets/{index-BlOrAXp3.js → index-CH8e7g1f.js} +569 -569
- package/dist-renderer/assets/index-CSt8DTcn.css +1 -0
- package/dist-renderer/assets/{index-C8B_nKOF.js → index-Ca4iNkRA.js} +1 -1
- package/dist-renderer/assets/{index-GpUvV2xs.js → index-DU9PGgZJ.js} +1 -1
- package/dist-renderer/assets/{index-DLKyDr4T.js → index-DtMzIS9o.js} +1 -1
- package/dist-renderer/assets/{infoDiagram-HS3SLOUP-BNs0y3IG.js → infoDiagram-HS3SLOUP-CY_ptQNL.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-CqPnw4UV.js → journeyDiagram-XKPGCS4Q-C2vuHEo_.js} +1 -1
- package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-SLlzcUJ2.js → kanban-definition-3W4ZIXB7-mbdNfu8h.js} +1 -1
- package/dist-renderer/assets/{layout-BZLlNmbr.js → layout-Do_ArEB1.js} +1 -1
- package/dist-renderer/assets/{linear-qz6v45xy.js → linear-BMlMKyiq.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-B1-kmEWV.js → mindmap-definition-VGOIOE7T-Dfntn-o2.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-ADFJNKIX-B8a02iNx.js → pieDiagram-ADFJNKIX-LiWHsGMV.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-BKv1Xfou.js → quadrantDiagram-AYHSOK5B-D87St8AF.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-B3DUpZi2.js → requirementDiagram-UZGBJVZJ-DAa6lHBx.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-DmPzuTsy.js → sankeyDiagram-TZEHDZUN-VOUngars.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-Bo7RelRb.js → sequenceDiagram-WL72ISMW-BzwzmFr2.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-1epX98gV.js → stateDiagram-FKZM4ZOC-BjAQEJ52.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-03Ym9PTr.js → stateDiagram-v2-4FDKWEC3-BDwy4GJm.js} +1 -1
- package/dist-renderer/assets/{timeline-definition-IT6M3QCI-r6isC62H.js → timeline-definition-IT6M3QCI-Y5XBZt3W.js} +1 -1
- package/dist-renderer/assets/{treemap-GDKQZRPO-CGKpOUF2.js → treemap-GDKQZRPO-DzkdUEow.js} +1 -1
- package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-t4-rwdAw.js → xychartDiagram-PRI3JC2R-D-zbvJOv.js} +1 -1
- package/dist-renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/renderer/components/extensions/ExtensionStoreView.tsx +4 -1
- package/src/renderer/components/extensions/mcp/McpServerDetailDialog.tsx +100 -15
- package/src/renderer/components/team/TeamDetailView.tsx +55 -139
- package/src/renderer/components/team/TeamListFilterPopover.tsx +0 -16
- package/src/renderer/components/team/TeamListView.tsx +7 -32
- package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +283 -409
- package/src/renderer/components/team/dialogs/useTeamEditForm.ts +283 -0
- package/src/renderer/utils/multimodelProviderVisibility.ts +17 -0
- package/src/renderer/utils/openCodeRuntimeDeliveryDiagnostics.ts +29 -9
- package/dist-renderer/assets/channel-DbjZvWii.js +0 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-D_FGxxsl.js +0 -1
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-D_FGxxsl.js +0 -1
- package/dist-renderer/assets/clone-CJ1kxO2J.js +0 -1
- package/dist-renderer/assets/index-CmZPUEhS.css +0 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { api } from '@renderer/api';
|
|
4
|
+
import { useStore } from '@renderer/store';
|
|
5
|
+
import { isTeamProvisioningActive } from '@renderer/store/slices/teamSlice';
|
|
6
|
+
import { useShallow } from 'zustand/react/shallow';
|
|
7
|
+
|
|
8
|
+
import type { GlobalProvider } from '@shared/types';
|
|
9
|
+
import type { CcAgentType } from '@shared/types/ccConnect';
|
|
10
|
+
|
|
11
|
+
type SavePhase = 'idle' | 'saving' | 'restarting' | 'done';
|
|
12
|
+
|
|
13
|
+
export interface UseTeamEditFormReturn {
|
|
14
|
+
loading: boolean;
|
|
15
|
+
isProvisioning: boolean;
|
|
16
|
+
name: string;
|
|
17
|
+
setName: (v: string) => void;
|
|
18
|
+
description: string;
|
|
19
|
+
setDescription: (v: string) => void;
|
|
20
|
+
agentType: string;
|
|
21
|
+
setAgentType: (v: string) => void;
|
|
22
|
+
permissionMode: string;
|
|
23
|
+
setPermissionMode: (v: string) => void;
|
|
24
|
+
workDir: string;
|
|
25
|
+
setWorkDir: (v: string) => void;
|
|
26
|
+
language: string;
|
|
27
|
+
setLanguage: (v: string) => void;
|
|
28
|
+
managedSources: string;
|
|
29
|
+
setManagedSources: (v: string) => void;
|
|
30
|
+
feishuAllowFrom: string;
|
|
31
|
+
setFeishuAllowFrom: (v: string) => void;
|
|
32
|
+
disabledCommandsInput: string;
|
|
33
|
+
setDisabledCommandsInput: (v: string) => void;
|
|
34
|
+
providerRef: string;
|
|
35
|
+
setProviderRef: (v: string) => void;
|
|
36
|
+
showContextIndicator: boolean;
|
|
37
|
+
setShowContextIndicator: (v: boolean) => void;
|
|
38
|
+
replyFooter: boolean;
|
|
39
|
+
setReplyFooter: (v: boolean) => void;
|
|
40
|
+
injectSender: boolean;
|
|
41
|
+
setInjectSender: (v: boolean) => void;
|
|
42
|
+
color: string;
|
|
43
|
+
compatibleProviders: GlobalProvider[];
|
|
44
|
+
canDelete: boolean;
|
|
45
|
+
/** Current phase of the save+restart lifecycle */
|
|
46
|
+
savePhase: SavePhase;
|
|
47
|
+
/** true while saving or restarting (button spinner / disable) */
|
|
48
|
+
saving: boolean;
|
|
49
|
+
error: string | null;
|
|
50
|
+
clearError: () => void;
|
|
51
|
+
handleSave: () => void;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const PERMISSION_MODE_OPTIONS = [
|
|
55
|
+
{ value: 'default', label: '默认' },
|
|
56
|
+
{ value: 'acceptEdits', label: '自动接受编辑' },
|
|
57
|
+
{ value: 'bypassPermissions', label: '跳过权限确认' },
|
|
58
|
+
{ value: 'plan', label: '计划模式' },
|
|
59
|
+
] as const;
|
|
60
|
+
|
|
61
|
+
export { PERMISSION_MODE_OPTIONS };
|
|
62
|
+
|
|
63
|
+
export function useTeamEditForm(teamName: string, open: boolean): UseTeamEditFormReturn {
|
|
64
|
+
// ── Store reads ──────────────────────────────────────────────
|
|
65
|
+
const { data, fetchTeams, selectTeam } = useStore(
|
|
66
|
+
useShallow((s) => ({
|
|
67
|
+
data: s.selectedTeamName === teamName ? s.selectedTeamData : null,
|
|
68
|
+
fetchTeams: s.fetchTeams,
|
|
69
|
+
selectTeam: s.selectTeam,
|
|
70
|
+
}))
|
|
71
|
+
);
|
|
72
|
+
const isProvisioning = useStore((s) => isTeamProvisioningActive(s, teamName));
|
|
73
|
+
|
|
74
|
+
// ── Derived defaults ─────────────────────────────────────────
|
|
75
|
+
const rawSettings = useMemo(
|
|
76
|
+
() => (data?.settings ?? {}) as Record<string, unknown>,
|
|
77
|
+
[data?.settings]
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const defaults = useMemo(() => {
|
|
81
|
+
const cfg = data?.config;
|
|
82
|
+
const d = data as Record<string, unknown> | null;
|
|
83
|
+
return {
|
|
84
|
+
name: cfg?.name ?? '',
|
|
85
|
+
description: cfg?.description ?? '',
|
|
86
|
+
color: cfg?.color ?? '',
|
|
87
|
+
agentType: cfg?.agentType ?? (d?.harness as string | undefined) ?? 'cursor',
|
|
88
|
+
workDir: (d?.workDir as string | undefined) ?? cfg?.projectPath ?? '',
|
|
89
|
+
permissionMode: cfg?.permissionMode ?? (d?.permissionMode as string | undefined) ?? 'default',
|
|
90
|
+
language:
|
|
91
|
+
cfg?.language ?? (typeof rawSettings.language === 'string' ? rawSettings.language : 'zh'),
|
|
92
|
+
managedSources:
|
|
93
|
+
cfg?.managedSources ??
|
|
94
|
+
(typeof rawSettings.admin_from === 'string' ? rawSettings.admin_from : '*'),
|
|
95
|
+
disabledCommands: Array.isArray(cfg?.disabledCommands)
|
|
96
|
+
? cfg.disabledCommands
|
|
97
|
+
: Array.isArray(rawSettings.disabled_commands)
|
|
98
|
+
? (rawSettings.disabled_commands as unknown[]).filter(
|
|
99
|
+
(entry): entry is string => typeof entry === 'string' && entry.trim().length > 0
|
|
100
|
+
)
|
|
101
|
+
: [],
|
|
102
|
+
platformAllowFrom:
|
|
103
|
+
cfg?.platformAllowFrom ??
|
|
104
|
+
(typeof rawSettings.platform_allow_from === 'object' &&
|
|
105
|
+
rawSettings.platform_allow_from !== null &&
|
|
106
|
+
!Array.isArray(rawSettings.platform_allow_from)
|
|
107
|
+
? (rawSettings.platform_allow_from as Record<string, string>)
|
|
108
|
+
: {}),
|
|
109
|
+
providerRefs: data?.providerRefs ?? [],
|
|
110
|
+
globalProviders: data?.globalProviders ?? [],
|
|
111
|
+
showContextIndicator:
|
|
112
|
+
cfg?.showContextIndicator ??
|
|
113
|
+
(typeof rawSettings.show_context_indicator === 'boolean'
|
|
114
|
+
? rawSettings.show_context_indicator
|
|
115
|
+
: true),
|
|
116
|
+
replyFooter:
|
|
117
|
+
cfg?.replyFooter ??
|
|
118
|
+
(typeof rawSettings.reply_footer === 'boolean' ? rawSettings.reply_footer : true),
|
|
119
|
+
injectSender:
|
|
120
|
+
cfg?.injectSender ??
|
|
121
|
+
(typeof rawSettings.inject_sender === 'boolean' ? rawSettings.inject_sender : false),
|
|
122
|
+
};
|
|
123
|
+
}, [data, rawSettings]);
|
|
124
|
+
|
|
125
|
+
// ── Local form state ─────────────────────────────────────────
|
|
126
|
+
const [name, setName] = useState(defaults.name);
|
|
127
|
+
const [description, setDescription] = useState(defaults.description);
|
|
128
|
+
const [agentType, setAgentType] = useState(defaults.agentType);
|
|
129
|
+
const [permissionMode, setPermissionMode] = useState(defaults.permissionMode);
|
|
130
|
+
const [workDir, setWorkDir] = useState(defaults.workDir);
|
|
131
|
+
const [language, setLanguage] = useState(defaults.language);
|
|
132
|
+
const [managedSources, setManagedSources] = useState(defaults.managedSources);
|
|
133
|
+
const [disabledCommandsInput, setDisabledCommandsInput] = useState(
|
|
134
|
+
defaults.disabledCommands.join(', ')
|
|
135
|
+
);
|
|
136
|
+
const [feishuAllowFrom, setFeishuAllowFrom] = useState(defaults.platformAllowFrom.feishu ?? '*');
|
|
137
|
+
const [providerRef, setProviderRef] = useState(defaults.providerRefs[0] ?? '');
|
|
138
|
+
const [showContextIndicator, setShowContextIndicator] = useState(defaults.showContextIndicator);
|
|
139
|
+
const [replyFooter, setReplyFooter] = useState(defaults.replyFooter);
|
|
140
|
+
const [injectSender, setInjectSender] = useState(defaults.injectSender);
|
|
141
|
+
|
|
142
|
+
// ── Single async lifecycle state ─────────────────────────────
|
|
143
|
+
const [savePhase, setSavePhase] = useState<SavePhase>('idle');
|
|
144
|
+
const [error, setError] = useState<string | null>(null);
|
|
145
|
+
const saving = savePhase === 'saving' || savePhase === 'restarting';
|
|
146
|
+
|
|
147
|
+
// ── Refs ─────────────────────────────────────────────────────
|
|
148
|
+
const defaultsRef = useRef(defaults);
|
|
149
|
+
if (defaults.name) {
|
|
150
|
+
defaultsRef.current = defaults;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ── Reset form when dialog opens ─────────────────────────────
|
|
154
|
+
const prevOpenRef = useRef(false);
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (!open || prevOpenRef.current) {
|
|
157
|
+
prevOpenRef.current = open;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
prevOpenRef.current = true;
|
|
161
|
+
const d = defaultsRef.current;
|
|
162
|
+
setSavePhase('idle');
|
|
163
|
+
setError(null);
|
|
164
|
+
setName(d.name);
|
|
165
|
+
setDescription(d.description);
|
|
166
|
+
setAgentType(d.agentType);
|
|
167
|
+
setPermissionMode(d.permissionMode);
|
|
168
|
+
setWorkDir(d.workDir);
|
|
169
|
+
setLanguage(d.language);
|
|
170
|
+
setManagedSources(d.managedSources);
|
|
171
|
+
setDisabledCommandsInput(d.disabledCommands.join(', '));
|
|
172
|
+
setFeishuAllowFrom(d.platformAllowFrom.feishu ?? '*');
|
|
173
|
+
setProviderRef(d.providerRefs[0] ?? '');
|
|
174
|
+
setShowContextIndicator(d.showContextIndicator);
|
|
175
|
+
setReplyFooter(d.replyFooter);
|
|
176
|
+
setInjectSender(d.injectSender);
|
|
177
|
+
}, [open]);
|
|
178
|
+
|
|
179
|
+
// ── Computed values ──────────────────────────────────────────
|
|
180
|
+
const compatibleProviders = useMemo(
|
|
181
|
+
() =>
|
|
182
|
+
defaults.globalProviders.filter(
|
|
183
|
+
(p) =>
|
|
184
|
+
!p.agent_types ||
|
|
185
|
+
p.agent_types.length === 0 ||
|
|
186
|
+
(p.agent_types as string[]).includes(agentType)
|
|
187
|
+
),
|
|
188
|
+
[defaults.globalProviders, agentType]
|
|
189
|
+
);
|
|
190
|
+
const canDelete = teamName !== 'default' && teamName !== 'my-project';
|
|
191
|
+
|
|
192
|
+
// ── Actions ──────────────────────────────────────────────────
|
|
193
|
+
const clearError = (): void => setError(null);
|
|
194
|
+
|
|
195
|
+
const handleSave = (): void => {
|
|
196
|
+
if (!name.trim()) {
|
|
197
|
+
setError('团队名称不能为空');
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (savePhase !== 'idle') return;
|
|
201
|
+
|
|
202
|
+
const disabledCommands = disabledCommandsInput
|
|
203
|
+
.split(',')
|
|
204
|
+
.map((e) => e.trim())
|
|
205
|
+
.filter((e) => e.length > 0);
|
|
206
|
+
const feishu = feishuAllowFrom.trim();
|
|
207
|
+
|
|
208
|
+
setSavePhase('saving');
|
|
209
|
+
setError(null);
|
|
210
|
+
|
|
211
|
+
void (async () => {
|
|
212
|
+
try {
|
|
213
|
+
await api.teams.updateConfig(teamName, {
|
|
214
|
+
name: name.trim(),
|
|
215
|
+
description: description.trim(),
|
|
216
|
+
color: defaultsRef.current.color,
|
|
217
|
+
agentType: agentType.trim() || undefined,
|
|
218
|
+
workDir: workDir.trim() || undefined,
|
|
219
|
+
permissionMode: permissionMode.trim() || undefined,
|
|
220
|
+
showContextIndicator,
|
|
221
|
+
replyFooter,
|
|
222
|
+
injectSender,
|
|
223
|
+
language: language.trim() || undefined,
|
|
224
|
+
managedSources: managedSources.trim() || undefined,
|
|
225
|
+
disabledCommands,
|
|
226
|
+
platformAllowFrom: feishu ? { feishu } : {},
|
|
227
|
+
providerRefs: providerRef ? [providerRef] : [],
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
setSavePhase('restarting');
|
|
231
|
+
await api.ccSettings.restart();
|
|
232
|
+
|
|
233
|
+
// Small grace period so the user sees "restarting" feedback
|
|
234
|
+
await new Promise((r) => setTimeout(r, 800));
|
|
235
|
+
|
|
236
|
+
await Promise.all([fetchTeams(), selectTeam(teamName)]);
|
|
237
|
+
setSavePhase('done');
|
|
238
|
+
} catch (err) {
|
|
239
|
+
setError(err instanceof Error ? err.message : '保存失败');
|
|
240
|
+
setSavePhase('idle');
|
|
241
|
+
}
|
|
242
|
+
})();
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
loading: !data,
|
|
247
|
+
isProvisioning,
|
|
248
|
+
name,
|
|
249
|
+
setName,
|
|
250
|
+
description,
|
|
251
|
+
setDescription,
|
|
252
|
+
agentType,
|
|
253
|
+
setAgentType,
|
|
254
|
+
permissionMode,
|
|
255
|
+
setPermissionMode,
|
|
256
|
+
workDir,
|
|
257
|
+
setWorkDir,
|
|
258
|
+
language,
|
|
259
|
+
setLanguage,
|
|
260
|
+
managedSources,
|
|
261
|
+
setManagedSources,
|
|
262
|
+
feishuAllowFrom,
|
|
263
|
+
setFeishuAllowFrom,
|
|
264
|
+
disabledCommandsInput,
|
|
265
|
+
setDisabledCommandsInput,
|
|
266
|
+
providerRef,
|
|
267
|
+
setProviderRef,
|
|
268
|
+
showContextIndicator,
|
|
269
|
+
setShowContextIndicator,
|
|
270
|
+
replyFooter,
|
|
271
|
+
setReplyFooter,
|
|
272
|
+
injectSender,
|
|
273
|
+
setInjectSender,
|
|
274
|
+
color: defaults.color,
|
|
275
|
+
compatibleProviders,
|
|
276
|
+
canDelete,
|
|
277
|
+
savePhase,
|
|
278
|
+
saving,
|
|
279
|
+
error,
|
|
280
|
+
clearError,
|
|
281
|
+
handleSave,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
@@ -12,6 +12,23 @@ export function getVisibleMultimodelProviders(
|
|
|
12
12
|
return filterMainScreenCliProviders(providers);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Further filters the visible providers to those the Extension Store can actually manage.
|
|
17
|
+
* Providers where ALL extension capabilities are 'provider-scoped' own their own config
|
|
18
|
+
* and cannot be managed via the Extension Store UI, so they are excluded from capability cards.
|
|
19
|
+
*/
|
|
20
|
+
export function filterExtensionStoreProviders(providers: CliProviderStatus[]): CliProviderStatus[] {
|
|
21
|
+
return providers.filter((p) => {
|
|
22
|
+
const ext = p.capabilities?.extensions;
|
|
23
|
+
if (!ext) return false;
|
|
24
|
+
return (
|
|
25
|
+
ext.plugins.ownership !== 'provider-scoped' ||
|
|
26
|
+
ext.mcp.ownership !== 'provider-scoped' ||
|
|
27
|
+
ext.skills.ownership !== 'provider-scoped'
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
15
32
|
export function isMultimodelRuntimeStatus(
|
|
16
33
|
cliStatus: Pick<CliInstallationStatus, 'flavor' | 'providers'> | null | undefined
|
|
17
34
|
): boolean {
|
|
@@ -19,8 +19,6 @@ interface OpenCodeRuntimeDeliveryDiagnostics {
|
|
|
19
19
|
|
|
20
20
|
const PENDING_WARNING =
|
|
21
21
|
'OpenCode runtime delivery is still being checked. Message was saved and will be retried if needed.';
|
|
22
|
-
const FAILED_WARNING =
|
|
23
|
-
'OpenCode runtime delivery failed. Message was saved to inbox, but live delivery did not complete.';
|
|
24
22
|
|
|
25
23
|
export function buildOpenCodeRuntimeDeliveryDiagnostics(
|
|
26
24
|
result: SendMessageResult
|
|
@@ -30,22 +28,44 @@ export function buildOpenCodeRuntimeDeliveryDiagnostics(
|
|
|
30
28
|
return { warning: null, debugDetails: null };
|
|
31
29
|
}
|
|
32
30
|
|
|
31
|
+
// Delivery failed but message is safely in inbox — will be picked up on restart.
|
|
32
|
+
// No user-facing warning needed; keep debug details for development only.
|
|
33
33
|
const isFailed = runtimeDelivery.delivered === false;
|
|
34
|
+
if (isFailed) {
|
|
35
|
+
return {
|
|
36
|
+
warning: null,
|
|
37
|
+
debugDetails: {
|
|
38
|
+
messageId: result.messageId,
|
|
39
|
+
providerId: runtimeDelivery.providerId,
|
|
40
|
+
delivered: false,
|
|
41
|
+
responsePending:
|
|
42
|
+
typeof runtimeDelivery.responsePending === 'boolean'
|
|
43
|
+
? runtimeDelivery.responsePending
|
|
44
|
+
: null,
|
|
45
|
+
responseState: runtimeDelivery.responseState ?? null,
|
|
46
|
+
ledgerStatus: runtimeDelivery.ledgerStatus ?? null,
|
|
47
|
+
acceptanceUnknown:
|
|
48
|
+
typeof runtimeDelivery.acceptanceUnknown === 'boolean'
|
|
49
|
+
? runtimeDelivery.acceptanceUnknown
|
|
50
|
+
: null,
|
|
51
|
+
reason: runtimeDelivery.reason ?? null,
|
|
52
|
+
diagnostics: runtimeDelivery.diagnostics ?? [],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
34
57
|
const isPending = runtimeDelivery.responsePending === true;
|
|
35
|
-
if (!
|
|
58
|
+
if (!isPending) {
|
|
36
59
|
return { warning: null, debugDetails: null };
|
|
37
60
|
}
|
|
38
61
|
|
|
39
62
|
return {
|
|
40
|
-
warning:
|
|
63
|
+
warning: PENDING_WARNING,
|
|
41
64
|
debugDetails: {
|
|
42
65
|
messageId: result.messageId,
|
|
43
66
|
providerId: runtimeDelivery.providerId,
|
|
44
|
-
delivered:
|
|
45
|
-
responsePending:
|
|
46
|
-
typeof runtimeDelivery.responsePending === 'boolean'
|
|
47
|
-
? runtimeDelivery.responsePending
|
|
48
|
-
: null,
|
|
67
|
+
delivered: null,
|
|
68
|
+
responsePending: true,
|
|
49
69
|
responseState: runtimeDelivery.responseState ?? null,
|
|
50
70
|
ledgerStatus: runtimeDelivery.ledgerStatus ?? null,
|
|
51
71
|
acceptanceUnknown:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a6 as o,a7 as n}from"./index-BlOrAXp3.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-BG1oJrjA.js";import{_ as i}from"./index-BlOrAXp3.js";import"./chunk-FMBD7UC4-D6VLvy16.js";import"./chunk-55IACEB6-B8KGfbAy.js";import"./chunk-QN33PNHL-DZou1667.js";import"./splashScene-C8lWNnm4.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-BG1oJrjA.js";import{_ as i}from"./index-BlOrAXp3.js";import"./chunk-FMBD7UC4-D6VLvy16.js";import"./chunk-55IACEB6-B8KGfbAy.js";import"./chunk-QN33PNHL-DZou1667.js";import"./splashScene-C8lWNnm4.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as r}from"./_baseUniq-B6d8ysWi.js";var e=4;function a(o){return r(o,e)}export{a as c};
|