pith-ui 0.1.4 → 0.2.0-app.2
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/AI.md +21 -7
- package/API.md +263 -262
- package/APP-API.md +2023 -0
- package/APP.md +141 -0
- package/README.md +35 -4
- package/dist/app/files.d.ts +68 -0
- package/dist/app/files.d.ts.map +1 -0
- package/dist/app/files.js +177 -0
- package/dist/app/files.js.map +1 -0
- package/dist/app/index.d.ts +57 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +300 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/internal.d.ts +31 -0
- package/dist/app/internal.d.ts.map +1 -0
- package/dist/app/internal.js +2 -0
- package/dist/app/internal.js.map +1 -0
- package/dist/app/resources.d.ts +89 -0
- package/dist/app/resources.d.ts.map +1 -0
- package/dist/app/resources.js +190 -0
- package/dist/app/resources.js.map +1 -0
- package/dist/app/session.d.ts +14 -0
- package/dist/app/session.d.ts.map +1 -0
- package/dist/app/session.js +12 -0
- package/dist/app/session.js.map +1 -0
- package/dist/app/settings.d.ts +109 -0
- package/dist/app/settings.d.ts.map +1 -0
- package/dist/app/settings.js +283 -0
- package/dist/app/settings.js.map +1 -0
- package/dist/app/workspace.d.ts +232 -0
- package/dist/app/workspace.d.ts.map +1 -0
- package/dist/app/workspace.js +413 -0
- package/dist/app/workspace.js.map +1 -0
- package/dist/forms/actions.d.ts +1 -0
- package/dist/forms/actions.d.ts.map +1 -1
- package/dist/forms/actions.js +3 -2
- package/dist/forms/actions.js.map +1 -1
- package/dist/styles.css +4 -1
- package/dist/tasks/runtime.js +2 -2
- package/dist/tasks/runtime.js.map +1 -1
- package/package.json +42 -8
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { Lifetime } from '../core.js';
|
|
2
|
+
import { createOperation } from '../operation.js';
|
|
3
|
+
import { adoptAction } from '../foundations.js';
|
|
4
|
+
import { createProviderActions } from '../forms/actions.js';
|
|
5
|
+
import { createSettingsPanel, createMCPConnectionsPanel, createMCPConnectionList, createModelPicker } from '../forms/panels.js';
|
|
6
|
+
import { createCustomConnectionEditor } from '../forms/custom-connection.js';
|
|
7
|
+
import { createProviderLoginPanel } from '../forms/provider-login.js';
|
|
8
|
+
import { createUpdatePanel } from '../files/systems.js';
|
|
9
|
+
import { createLoadingSession } from './session.js';
|
|
10
|
+
const unavailable = { ok: false, error: 'This action is unavailable.' };
|
|
11
|
+
const cloneCustom = (draft) => ({ ...draft, models: draft.models.map(model => ({ ...model, prices: { ...model.prices } })) });
|
|
12
|
+
const closedSurface = { isOpen: () => false, close() { }, destroy() { }, fail() { } };
|
|
13
|
+
/** Compose existing product blocks behind data-only application sessions. */
|
|
14
|
+
export function createSettingsScene(env) {
|
|
15
|
+
const surfaces = new Set();
|
|
16
|
+
let destroyed = false, sequence = 0;
|
|
17
|
+
let loading;
|
|
18
|
+
const prefix = (name) => `${env.idPrefix}${name}-${++sequence}-`;
|
|
19
|
+
const track = (open, content, onClose) => {
|
|
20
|
+
if (destroyed) {
|
|
21
|
+
content.destroy();
|
|
22
|
+
return closedSurface;
|
|
23
|
+
}
|
|
24
|
+
let surface;
|
|
25
|
+
surface = open(content, () => { if (surface)
|
|
26
|
+
surfaces.delete(surface); onClose?.(); });
|
|
27
|
+
if (surface.isOpen())
|
|
28
|
+
surfaces.add(surface);
|
|
29
|
+
if (destroyed)
|
|
30
|
+
surface.destroy();
|
|
31
|
+
return surface;
|
|
32
|
+
};
|
|
33
|
+
const submit = (callback, owner, closeOnSuccess, revision = () => 0) => async (value) => {
|
|
34
|
+
if (!owner()?.isOpen())
|
|
35
|
+
return unavailable;
|
|
36
|
+
const submittedRevision = revision();
|
|
37
|
+
const result = callback ? await callback(value) : unavailable;
|
|
38
|
+
if (result.ok && closeOnSuccess && submittedRevision === revision() && owner()?.isOpen())
|
|
39
|
+
owner().close();
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
openConnectionLoading(state, callbacks = {}) {
|
|
44
|
+
loading?.destroy();
|
|
45
|
+
loading = createLoadingSession(env, state.editing ? 'Edit model connection' : 'Add model connection', state, callbacks.onClose);
|
|
46
|
+
if (destroyed)
|
|
47
|
+
loading.destroy();
|
|
48
|
+
return loading;
|
|
49
|
+
},
|
|
50
|
+
openSettings(initial, callbacks = {}) {
|
|
51
|
+
let surface, disposed = false, current = initial, revision = 0;
|
|
52
|
+
let closed = { provider: '', baseUrl: initial.baseUrl, apiKey: '' };
|
|
53
|
+
let provider;
|
|
54
|
+
let providerState;
|
|
55
|
+
const life = new Lifetime(), auxiliary = new Map();
|
|
56
|
+
const active = () => !disposed && !destroyed && !!surface?.isOpen();
|
|
57
|
+
const run = (name, task) => {
|
|
58
|
+
let operation = auxiliary.get(name);
|
|
59
|
+
if (!operation) {
|
|
60
|
+
operation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
|
|
61
|
+
auxiliary.set(name, operation);
|
|
62
|
+
}
|
|
63
|
+
operation.run(task, result => { if (result && !result.ok)
|
|
64
|
+
surface?.fail(result.error); });
|
|
65
|
+
};
|
|
66
|
+
const block = createSettingsPanel(initial, { idPrefix: env.idPrefix,
|
|
67
|
+
onSubmit: submit(callbacks.onSubmit, () => surface, true, () => revision), onRemoveKey: submit(callbacks.onRemoveKey, () => surface, true, () => revision),
|
|
68
|
+
onTest: draft => { if (current.testing && callbacks.onCancelTest)
|
|
69
|
+
run('cancel-test', callbacks.onCancelTest);
|
|
70
|
+
else if (callbacks.onTest)
|
|
71
|
+
run('test', () => callbacks.onTest(draft)); },
|
|
72
|
+
onAppearanceChange: value => { if (callbacks.onAppearanceChange && (value === 'light' || value === 'dark' || value === 'system'))
|
|
73
|
+
run('appearance', () => callbacks.onAppearanceChange(value)); },
|
|
74
|
+
onProviderChange: id => { if (callbacks.onProviderChange)
|
|
75
|
+
run('provider', () => callbacks.onProviderChange(id)); },
|
|
76
|
+
onDraftChange: callbacks.onDraftChange, });
|
|
77
|
+
const addConnection = block.element.querySelector('button[data-sdk="custom"]');
|
|
78
|
+
life.listen(addConnection, 'click', event => event.stopPropagation());
|
|
79
|
+
const addAction = adoptAction(addConnection, { onAction: () => { if (active() && !current.disabled)
|
|
80
|
+
return callbacks.onCreateConnection?.(); }, onError: message => surface?.fail(message) });
|
|
81
|
+
addAction.update({ disabled: !!current.disabled });
|
|
82
|
+
let externalUpdatePending = false, localUpdatePending = false, updateKind = 'check';
|
|
83
|
+
const updateOperation = createOperation({ unavailable: () => !active(), onPending: value => { localUpdatePending = value; updates.setPending(externalUpdatePending || localUpdatePending); }, onError: message => updates.setError(message, { allowCheckRetry: updateKind === 'check' }) });
|
|
84
|
+
const updateAction = (action) => { if (callbacks.onUpdateAction)
|
|
85
|
+
updateOperation.run(() => { updateKind = action; updates.setError(''); return callbacks.onUpdateAction(action); }, result => { if (result && !result.ok)
|
|
86
|
+
updates.setError(result.error, { allowCheckRetry: action === 'check' }); }); };
|
|
87
|
+
const updates = createUpdatePanel({ container: block.updates, productName: env.productName, onCheck: () => updateAction('check'), onInstall: () => updateAction('install') });
|
|
88
|
+
life.listen(block.element, 'click', event => {
|
|
89
|
+
if (!active() || !(event.target instanceof Element))
|
|
90
|
+
return;
|
|
91
|
+
const button = event.target.closest('button');
|
|
92
|
+
if (!button || button.disabled)
|
|
93
|
+
return;
|
|
94
|
+
if (button.dataset.action === 'diagnostics') {
|
|
95
|
+
event.stopPropagation();
|
|
96
|
+
if (callbacks.onDiagnostics)
|
|
97
|
+
run('diagnostics', callbacks.onDiagnostics);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const content = { element: block.element, destroy() {
|
|
101
|
+
if (disposed)
|
|
102
|
+
return;
|
|
103
|
+
closed = { ...block.read(), apiKey: '' };
|
|
104
|
+
disposed = true;
|
|
105
|
+
life.destroy();
|
|
106
|
+
updateOperation.destroy();
|
|
107
|
+
for (const operation of auxiliary.values())
|
|
108
|
+
operation.destroy();
|
|
109
|
+
auxiliary.clear();
|
|
110
|
+
addAction.destroy();
|
|
111
|
+
provider?.destroy();
|
|
112
|
+
updates.destroy();
|
|
113
|
+
block.clearSecrets();
|
|
114
|
+
block.destroy();
|
|
115
|
+
} };
|
|
116
|
+
surface = track((content, onClose) => env.openDialog('settings', content, onClose), content, callbacks.onClose);
|
|
117
|
+
return {
|
|
118
|
+
update(state) { if (active()) {
|
|
119
|
+
current = state;
|
|
120
|
+
block.update(state);
|
|
121
|
+
addAction.update({ disabled: !!state.disabled });
|
|
122
|
+
if (providerState)
|
|
123
|
+
provider?.update({ ...providerState, disabled: !!state.disabled || !!providerState.disabled });
|
|
124
|
+
} },
|
|
125
|
+
read() { return active() ? { ...block.read() } : { ...closed }; },
|
|
126
|
+
setProviders(items, selected) { if (active())
|
|
127
|
+
block.setProviders(items, selected); },
|
|
128
|
+
resetProvider(value) { if (active()) {
|
|
129
|
+
revision++;
|
|
130
|
+
for (const operation of auxiliary.values())
|
|
131
|
+
operation.invalidate();
|
|
132
|
+
block.resetProvider(value);
|
|
133
|
+
} },
|
|
134
|
+
setCredential(view) {
|
|
135
|
+
if (!active())
|
|
136
|
+
return;
|
|
137
|
+
providerState = view.providerActions;
|
|
138
|
+
if (view.providerActions) {
|
|
139
|
+
const actions = { ...view.providerActions, disabled: !!current.disabled || !!view.providerActions.disabled };
|
|
140
|
+
if (provider)
|
|
141
|
+
provider.update(actions);
|
|
142
|
+
else
|
|
143
|
+
provider = createProviderActions(actions, { onProviderAction: (action, target) => { if (active() && !current.disabled)
|
|
144
|
+
return callbacks.onProviderAction?.(action, target); }, onError: message => surface?.fail(message) });
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
provider?.destroy();
|
|
148
|
+
provider = undefined;
|
|
149
|
+
}
|
|
150
|
+
const { providerActions: _, ...credential } = view;
|
|
151
|
+
block.setCredential({ ...credential, actions: provider?.element });
|
|
152
|
+
},
|
|
153
|
+
updateUpdates(state) { if (active())
|
|
154
|
+
updates.update(state); },
|
|
155
|
+
setUpdatePending(pending) { if (active()) {
|
|
156
|
+
externalUpdatePending = pending;
|
|
157
|
+
updates.setPending(externalUpdatePending || localUpdatePending);
|
|
158
|
+
} },
|
|
159
|
+
setUpdateError(message, options) { if (active())
|
|
160
|
+
updates.setError(message, options); },
|
|
161
|
+
clearSecrets() { if (active())
|
|
162
|
+
block.clearSecrets(); closed.apiKey = ''; },
|
|
163
|
+
fail(message) { if (active())
|
|
164
|
+
surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); },
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
openConnections(initial = {}, callbacks = {}) {
|
|
168
|
+
let surface, disposed = false, current = initial;
|
|
169
|
+
let entries = [];
|
|
170
|
+
let closed = { name: '', type: 'http', url: '', oauth: false, oauthClientId: '', oauthScope: '', command: '', args: '[]', enabled: true, bearerToken: '', clearBearerToken: false, env: '', clearEnv: false };
|
|
171
|
+
const life = new Lifetime(), active = () => !disposed && !destroyed && !!surface?.isOpen();
|
|
172
|
+
const operation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
|
|
173
|
+
const run = (task) => { if (task)
|
|
174
|
+
operation.run(task, result => { if (result && !result.ok)
|
|
175
|
+
surface?.fail(result.error); }); };
|
|
176
|
+
const block = createMCPConnectionsPanel(initial, { idPrefix: env.idPrefix, onSubmit: submit(callbacks.onSubmit, () => surface, false) });
|
|
177
|
+
const list = createMCPConnectionList({ entries: [], disabled: initial.disabled }, { onAction: (action, target) => callbacks.onConnectionAction?.(action, target) });
|
|
178
|
+
life.listen(block.element, 'click', event => {
|
|
179
|
+
if (!active() || !(event.target instanceof Element))
|
|
180
|
+
return;
|
|
181
|
+
const button = event.target.closest('button');
|
|
182
|
+
if (!button || button.disabled)
|
|
183
|
+
return;
|
|
184
|
+
if (button.dataset.action === 'refresh-mcp') {
|
|
185
|
+
event.stopPropagation();
|
|
186
|
+
run(callbacks.onRefresh);
|
|
187
|
+
}
|
|
188
|
+
if (button.dataset.action === 'new-mcp') {
|
|
189
|
+
event.stopPropagation();
|
|
190
|
+
block.edit();
|
|
191
|
+
run(callbacks.onNew);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const content = { element: block.element, destroy() { if (disposed)
|
|
195
|
+
return; closed = { ...block.read(), bearerToken: '', env: '' }; disposed = true; life.destroy(); operation.destroy(); list.destroy(); block.clearSecrets(); block.destroy(); } };
|
|
196
|
+
surface = track((content, onClose) => env.openDialog('connections', content, onClose), content, callbacks.onClose);
|
|
197
|
+
return {
|
|
198
|
+
update(state) { if (active()) {
|
|
199
|
+
current = state;
|
|
200
|
+
block.update(state);
|
|
201
|
+
list.update({ entries, disabled: state.disabled });
|
|
202
|
+
} },
|
|
203
|
+
read() { return active() ? { ...block.read() } : { ...closed }; },
|
|
204
|
+
edit(value) { if (active()) {
|
|
205
|
+
operation.invalidate();
|
|
206
|
+
block.edit(value);
|
|
207
|
+
} },
|
|
208
|
+
setConnections(values) { if (active()) {
|
|
209
|
+
entries = values;
|
|
210
|
+
if (list.element.parentNode !== block.list)
|
|
211
|
+
block.list.replaceChildren(list.element);
|
|
212
|
+
list.update({ entries, disabled: current.disabled });
|
|
213
|
+
} },
|
|
214
|
+
clearBearerToken() { if (active())
|
|
215
|
+
block.clearBearerToken(); closed.bearerToken = ''; },
|
|
216
|
+
clearSecrets() { if (active())
|
|
217
|
+
block.clearSecrets(); closed.bearerToken = ''; closed.env = ''; },
|
|
218
|
+
fail(message) { if (active())
|
|
219
|
+
surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); },
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
openModels(initial, callbacks = {}) {
|
|
223
|
+
let surface, disposed = false, revision = 0, closed = { ...(initial.editor?.selection ?? { provider: '', model: '', thinkingLevel: '' }) };
|
|
224
|
+
const active = () => !disposed && !destroyed && !!surface?.isOpen();
|
|
225
|
+
const block = createModelPicker(initial, { idPrefix: env.idPrefix, onSubmit: submit(callbacks.onSubmit, () => surface, true, () => revision) });
|
|
226
|
+
const content = { element: block.element, destroy() { if (disposed)
|
|
227
|
+
return; closed = { ...block.read() }; disposed = true; block.destroy(); } };
|
|
228
|
+
surface = track((content, onClose) => env.openDialog('model', content, onClose), content, callbacks.onClose);
|
|
229
|
+
return { update(state) { if (active())
|
|
230
|
+
block.update(state); }, read() { return active() ? { ...block.read() } : { ...closed }; }, reset(selection) { if (active()) {
|
|
231
|
+
revision++;
|
|
232
|
+
block.reset(selection);
|
|
233
|
+
} }, focus() { if (active())
|
|
234
|
+
block.focus(); }, fail(message) { if (active())
|
|
235
|
+
surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
|
|
236
|
+
},
|
|
237
|
+
openCustomConnection(initial, callbacks = {}) {
|
|
238
|
+
let surface, disposed = false;
|
|
239
|
+
let closed = { name: initial.name, baseUrl: initial.baseUrl, api: initial.api, apiKey: '', models: [] };
|
|
240
|
+
const active = () => !disposed && !destroyed && !!surface?.isOpen();
|
|
241
|
+
const block = createCustomConnectionEditor(initial, { idPrefix: prefix('custom'), onSubmit: submit(callbacks.onSubmit, () => surface, true) });
|
|
242
|
+
const clearSecrets = () => { for (const input of block.form.querySelectorAll('input[type="password"]'))
|
|
243
|
+
input.value = ''; closed.apiKey = ''; };
|
|
244
|
+
const content = { element: block.element, destroy() { if (disposed)
|
|
245
|
+
return; closed = { ...cloneCustom(block.read()), apiKey: '' }; disposed = true; clearSecrets(); block.destroy(); } };
|
|
246
|
+
surface = track((content, onClose) => env.openFeature(initial.editing ? 'Edit model connection' : 'Add model connection', content, onClose), content, callbacks.onClose);
|
|
247
|
+
return { update(state) { if (active())
|
|
248
|
+
block.update(state); }, read() { return cloneCustom(active() ? block.read() : closed); }, clearSecrets() { if (active())
|
|
249
|
+
clearSecrets(); }, fail(message) { if (active())
|
|
250
|
+
surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
|
|
251
|
+
},
|
|
252
|
+
openProviderLogin(initial, callbacks = {}) {
|
|
253
|
+
let surface, disposed = false;
|
|
254
|
+
const life = new Lifetime(), active = () => !disposed && !destroyed && !!surface?.isOpen();
|
|
255
|
+
const external = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
|
|
256
|
+
const cancellation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
|
|
257
|
+
const block = createProviderLoginPanel(initial, { idPrefix: prefix('login'), onAnswer: answer => callbacks.onAnswer?.(answer),
|
|
258
|
+
onCancel() { cancellation.run(() => callbacks.onCancel?.()); surface?.close(); }, onClose: () => surface?.close(),
|
|
259
|
+
});
|
|
260
|
+
life.listen(block.element, 'click', event => {
|
|
261
|
+
if (!active() || !(event.target instanceof Element))
|
|
262
|
+
return;
|
|
263
|
+
const link = event.target.closest('a[href]');
|
|
264
|
+
if (!link || !block.element.contains(link))
|
|
265
|
+
return;
|
|
266
|
+
event.preventDefault();
|
|
267
|
+
event.stopPropagation();
|
|
268
|
+
external.run(() => env.openExternal(link.href), result => { if (!result.ok)
|
|
269
|
+
surface?.fail(result.error); });
|
|
270
|
+
});
|
|
271
|
+
const content = { element: block.element, destroy() { if (disposed)
|
|
272
|
+
return; disposed = true; external.destroy(); cancellation.destroy(); life.destroy(); block.destroy(); } };
|
|
273
|
+
surface = track((content, onClose) => env.openOAuth('Provider sign-in', content, onClose), content, callbacks.onClose);
|
|
274
|
+
return { update(state) { if (active())
|
|
275
|
+
block.update(state); }, fail(message) { if (active())
|
|
276
|
+
surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
|
|
277
|
+
},
|
|
278
|
+
destroy() { if (destroyed)
|
|
279
|
+
return; destroyed = true; loading?.destroy(); for (const surface of [...surfaces])
|
|
280
|
+
surface.destroy(); surfaces.clear(); },
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/app/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import {Lifetime,type ActionResult} from '../core.js';\nimport {createOperation} from '../operation.js';\nimport {adoptAction} from '../foundations.js';\nimport {createProviderActions,type ProviderAction,type ProviderActionsState,type ProviderActionTarget} from '../forms/actions.js';\nimport {createSettingsPanel,createMCPConnectionsPanel,createMCPConnectionList,createModelPicker} from '../forms/panels.js';\nimport type {SettingsPanelState,SettingsDraft,SettingsProviderOption,SettingsCredentialView,MCPConnectionsState,MCPConnectionDraft,MCPEditorValue,MCPConnectionItem,MCPConnectionAction,MCPConnectionTarget,ModelPickerState} from '../forms/panels.js';\nimport {createCustomConnectionEditor,type CustomConnectionState,type CustomConnectionDraft} from '../forms/custom-connection.js';\nimport {createProviderLoginPanel,type ProviderLoginState} from '../forms/provider-login.js';\nimport type {ModelSelection} from '../forms/model-editor.js';\nimport {createUpdatePanel,type UpdatePanelState} from '../files/systems.js';\nimport type {Appearance} from '../theme.js';\nimport type {AppEnvironment,HostResult,OwnedContent,OwnedSurface} from './internal.js';\nimport {createLoadingSession,type LoadingState,type LoadingSession} from './session.js';\n\nexport type {SettingsPanelState,SettingsDraft,SettingsProviderOption,MCPConnectionsState,MCPConnectionDraft,MCPEditorValue,MCPConnectionItem,ModelPickerState,ModelSelection,CustomConnectionState,CustomConnectionDraft,ProviderLoginState,UpdatePanelState,ProviderAction,ProviderActionsState,ProviderActionTarget,MCPConnectionAction,MCPConnectionTarget};\ntype Submission<Value>=(value:Value)=>ActionResult|Promise<ActionResult>;\n\n/** Session methods address one owned opening, never a later use of its window. */\nexport interface SettingsViewSession<State> {\n update(state:Readonly<State>):void;\n fail(message:string):void;\n close():void;\n isOpen():boolean;\n destroy():void;\n}\nexport interface SettingsCredential extends Omit<SettingsCredentialView,'actions'> {providerActions?:Readonly<ProviderActionsState>}\nexport type UpdateAction='check'|'install';\nexport interface SettingsCallbacks {\n onSubmit?:Submission<SettingsDraft>;\n onRemoveKey?:Submission<SettingsDraft>;\n onTest?:(draft:SettingsDraft)=>HostResult;\n onCancelTest?:()=>HostResult;\n onAppearanceChange?:(appearance:Appearance)=>HostResult;\n onProviderChange?:(provider:string)=>HostResult;\n onDraftChange?:(draft:SettingsDraft)=>void;\n onProviderAction?:(action:ProviderAction,target:ProviderActionTarget)=>HostResult;\n onUpdateAction?:(action:UpdateAction)=>HostResult;\n onCreateConnection?:()=>HostResult;\n onDiagnostics?:()=>HostResult;\n onClose?:()=>void;\n}\nexport interface SettingsSession extends SettingsViewSession<SettingsPanelState> {\n read():SettingsDraft;\n setProviders(providers:readonly SettingsProviderOption[],selected?:string):void;\n resetProvider(value:{provider:string;baseUrl:string;clearKey?:boolean;collapseAdvanced?:boolean}):void;\n setCredential(view:Readonly<SettingsCredential>):void;\n updateUpdates(state:Readonly<UpdatePanelState>):void;\n setUpdatePending(pending:boolean):void;\n setUpdateError(message:string,options?:{allowCheckRetry?:boolean}):void;\n clearSecrets():void;\n}\nexport interface MCPCallbacks {\n onSubmit?:Submission<MCPConnectionDraft>;\n onConnectionAction?:(action:MCPConnectionAction,target:MCPConnectionTarget)=>HostResult;\n onRefresh?:()=>HostResult;\n onNew?:()=>HostResult;\n onClose?:()=>void;\n}\nexport interface MCPSession extends SettingsViewSession<MCPConnectionsState> {\n read():MCPConnectionDraft;\n edit(value?:Readonly<MCPEditorValue>):void;\n setConnections(entries:readonly MCPConnectionItem[]):void;\n clearBearerToken():void;\n clearSecrets():void;\n}\nexport interface ModelCallbacks {onSubmit?:Submission<ModelSelection>;onClose?:()=>void}\nexport interface ModelSession extends SettingsViewSession<ModelPickerState> {read():ModelSelection;reset(selection:Readonly<ModelSelection>):void;focus():void}\nexport interface CustomConnectionCallbacks {onSubmit?:Submission<CustomConnectionDraft>;onClose?:()=>void}\nexport interface CustomConnectionSession extends SettingsViewSession<CustomConnectionState> {read():CustomConnectionDraft;clearSecrets():void}\nexport interface ProviderLoginCallbacks {onAnswer?:(answer:string)=>HostResult;onCancel?:()=>HostResult;onClose?:()=>void}\nexport interface ProviderLoginSession extends SettingsViewSession<ProviderLoginState> {}\nexport interface SettingsScene {\n openConnectionLoading(state:Readonly<LoadingState>&{readonly editing:boolean},callbacks?:{onClose?:()=>void}):LoadingSession;\n openSettings(state:Readonly<SettingsPanelState>,callbacks?:SettingsCallbacks):SettingsSession;\n openConnections(state?:Readonly<MCPConnectionsState>,callbacks?:MCPCallbacks):MCPSession;\n openModels(state:Readonly<ModelPickerState>,callbacks?:ModelCallbacks):ModelSession;\n openCustomConnection(state:Readonly<CustomConnectionState>,callbacks?:CustomConnectionCallbacks):CustomConnectionSession;\n openProviderLogin(state:Readonly<ProviderLoginState>,callbacks?:ProviderLoginCallbacks):ProviderLoginSession;\n destroy():void;\n}\n\nconst unavailable:ActionResult={ok:false,error:'This action is unavailable.'};\nconst cloneCustom=(draft:CustomConnectionDraft):CustomConnectionDraft=>({...draft,models:draft.models.map(model=>({...model,prices:{...model.prices}}))});\nconst closedSurface:OwnedSurface={isOpen:()=>false,close(){},destroy(){},fail(){}};\n\n/** Compose existing product blocks behind data-only application sessions. */\nexport function createSettingsScene(env:AppEnvironment):SettingsScene {\n const surfaces=new Set<OwnedSurface>();let destroyed=false,sequence=0;\n let loading:LoadingSession|undefined;\n const prefix=(name:string)=>`${env.idPrefix}${name}-${++sequence}-`;\n const track=(open:(content:OwnedContent,onClose:()=>void)=>OwnedSurface,content:OwnedContent,onClose?:()=>void):OwnedSurface=>{\n if(destroyed) {content.destroy();return closedSurface;}\n let surface:OwnedSurface|undefined;\n surface=open(content,()=>{if(surface) surfaces.delete(surface);onClose?.();});\n if(surface.isOpen()) surfaces.add(surface);\n if(destroyed) surface.destroy();\n return surface;\n };\n const submit=<Value>(callback:Submission<Value>|undefined,owner:()=>OwnedSurface|undefined,closeOnSuccess:boolean,revision:()=>number=()=>0):Submission<Value>=>async value=>{\n if(!owner()?.isOpen()) return unavailable;\n const submittedRevision=revision();\n const result=callback ? await callback(value) : unavailable;\n if(result.ok&&closeOnSuccess&&submittedRevision===revision()&&owner()?.isOpen()) owner()!.close();\n return result;\n };\n return {\n openConnectionLoading(state,callbacks={}) {\n loading?.destroy();\n loading=createLoadingSession(env,state.editing?'Edit model connection':'Add model connection',state,callbacks.onClose);\n if(destroyed) loading.destroy();\n return loading;\n },\n openSettings(initial,callbacks={}) {\n let surface:OwnedSurface|undefined,disposed=false,current=initial,revision=0;\n let closed:SettingsDraft={provider:'',baseUrl:initial.baseUrl,apiKey:''};\n let provider:ReturnType<typeof createProviderActions>|undefined;\n let providerState:Readonly<ProviderActionsState>|undefined;\n const life=new Lifetime(),auxiliary=new Map<string,ReturnType<typeof createOperation>>();\n const active=()=>!disposed&&!destroyed&&!!surface?.isOpen();\n const run=(name:string,task:()=>HostResult)=>{\n let operation=auxiliary.get(name);\n if(!operation) {operation=createOperation({unavailable:()=>!active(),onError:message=>surface?.fail(message)});auxiliary.set(name,operation);}\n operation.run(task,result=>{if(result&&!result.ok) surface?.fail(result.error);});\n };\n const block=createSettingsPanel(initial,{idPrefix:env.idPrefix,\n onSubmit:submit(callbacks.onSubmit,()=>surface,true,()=>revision),onRemoveKey:submit(callbacks.onRemoveKey,()=>surface,true,()=>revision),\n onTest:draft=>{if(current.testing&&callbacks.onCancelTest) run('cancel-test',callbacks.onCancelTest);else if(callbacks.onTest) run('test',()=>callbacks.onTest!(draft));},\n onAppearanceChange:value=>{if(callbacks.onAppearanceChange&&(value==='light'||value==='dark'||value==='system')) run('appearance',()=>callbacks.onAppearanceChange!(value));},\n onProviderChange:id=>{if(callbacks.onProviderChange) run('provider',()=>callbacks.onProviderChange!(id));},\n onDraftChange:callbacks.onDraftChange,\n });\n const addConnection=block.element.querySelector<HTMLButtonElement>('button[data-sdk=\"custom\"]')!;\n life.listen(addConnection,'click',event=>event.stopPropagation());\n const addAction=adoptAction(addConnection,{onAction:()=>{if(active()&&!current.disabled) return callbacks.onCreateConnection?.();},onError:message=>surface?.fail(message)});\n addAction.update({disabled:!!current.disabled});\n let externalUpdatePending=false,localUpdatePending=false,updateKind:UpdateAction='check';\n const updateOperation=createOperation({unavailable:()=>!active(),onPending:value=>{localUpdatePending=value;updates.setPending(externalUpdatePending||localUpdatePending);},onError:message=>updates.setError(message,{allowCheckRetry:updateKind==='check'})});\n const updateAction=(action:UpdateAction)=>{if(callbacks.onUpdateAction) updateOperation.run(()=>{updateKind=action;updates.setError('');return callbacks.onUpdateAction!(action);},result=>{if(result&&!result.ok) updates.setError(result.error,{allowCheckRetry:action==='check'});});};\n const updates=createUpdatePanel({container:block.updates,productName:env.productName,onCheck:()=>updateAction('check'),onInstall:()=>updateAction('install')});\n life.listen(block.element,'click',event=>{\n if(!active()||!(event.target instanceof Element)) return;\n const button=event.target.closest<HTMLButtonElement>('button');if(!button||button.disabled) return;\n if(button.dataset.action==='diagnostics') {event.stopPropagation();if(callbacks.onDiagnostics) run('diagnostics',callbacks.onDiagnostics);}\n });\n const content:OwnedContent={element:block.element,destroy(){\n if(disposed) return;closed={...block.read(),apiKey:''};disposed=true;life.destroy();updateOperation.destroy();\n for(const operation of auxiliary.values()) operation.destroy();auxiliary.clear();addAction.destroy();provider?.destroy();updates.destroy();block.clearSecrets();block.destroy();\n }};\n surface=track((content,onClose)=>env.openDialog('settings',content,onClose),content,callbacks.onClose);\n return {\n update(state){if(active()){current=state;block.update(state);addAction.update({disabled:!!state.disabled});if(providerState) provider?.update({...providerState,disabled:!!state.disabled||!!providerState.disabled});}},\n read(){return active()?{...block.read()}:{...closed};},\n setProviders(items,selected){if(active()) block.setProviders(items,selected);},\n resetProvider(value){if(active()){revision++;for(const operation of auxiliary.values()) operation.invalidate();block.resetProvider(value);}},\n setCredential(view){\n if(!active()) return;\n providerState=view.providerActions;\n if(view.providerActions) {\n const actions={...view.providerActions,disabled:!!current.disabled||!!view.providerActions.disabled};\n if(provider) provider.update(actions);\n else provider=createProviderActions(actions,{onProviderAction:(action,target)=>{if(active()&&!current.disabled) return callbacks.onProviderAction?.(action,target);},onError:message=>surface?.fail(message)});\n } else {provider?.destroy();provider=undefined;}\n const {providerActions:_,...credential}=view;block.setCredential({...credential,actions:provider?.element});\n },\n updateUpdates(state){if(active()) updates.update(state);},\n setUpdatePending(pending){if(active()){externalUpdatePending=pending;updates.setPending(externalUpdatePending||localUpdatePending);}},\n setUpdateError(message,options){if(active()) updates.setError(message,options);},\n clearSecrets(){if(active()) block.clearSecrets();closed.apiKey='';},\n fail(message){if(active()) surface!.fail(message);},close(){surface?.close();},isOpen:active,destroy(){surface?.destroy();},\n };\n },\n openConnections(initial={},callbacks={}) {\n let surface:OwnedSurface|undefined,disposed=false,current=initial;\n let entries:readonly MCPConnectionItem[]=[];\n let closed:MCPConnectionDraft={name:'',type:'http',url:'',oauth:false,oauthClientId:'',oauthScope:'',command:'',args:'[]',enabled:true,bearerToken:'',clearBearerToken:false,env:'',clearEnv:false};\n const life=new Lifetime(),active=()=>!disposed&&!destroyed&&!!surface?.isOpen();\n const operation=createOperation({unavailable:()=>!active(),onError:message=>surface?.fail(message)});\n const run=(task:(()=>HostResult)|undefined)=>{if(task) operation.run(task,result=>{if(result&&!result.ok) surface?.fail(result.error);});};\n const block=createMCPConnectionsPanel(initial,{idPrefix:env.idPrefix,onSubmit:submit(callbacks.onSubmit,()=>surface,false)});\n const list=createMCPConnectionList({entries:[],disabled:initial.disabled},{onAction:(action,target)=>callbacks.onConnectionAction?.(action,target)});\n life.listen(block.element,'click',event=>{\n if(!active()||!(event.target instanceof Element)) return;\n const button=event.target.closest<HTMLButtonElement>('button');if(!button||button.disabled) return;\n if(button.dataset.action==='refresh-mcp'){event.stopPropagation();run(callbacks.onRefresh);}\n if(button.dataset.action==='new-mcp'){event.stopPropagation();block.edit();run(callbacks.onNew);}\n });\n const content:OwnedContent={element:block.element,destroy(){if(disposed) return;closed={...block.read(),bearerToken:'',env:''};disposed=true;life.destroy();operation.destroy();list.destroy();block.clearSecrets();block.destroy();}};\n surface=track((content,onClose)=>env.openDialog('connections',content,onClose),content,callbacks.onClose);\n return {\n update(state){if(active()){current=state;block.update(state);list.update({entries,disabled:state.disabled});}},\n read(){return active()?{...block.read()}:{...closed};},\n edit(value){if(active()){operation.invalidate();block.edit(value);}},\n setConnections(values){if(active()){entries=values;if(list.element.parentNode!==block.list) block.list.replaceChildren(list.element);list.update({entries,disabled:current.disabled});}},\n clearBearerToken(){if(active()) block.clearBearerToken();closed.bearerToken='';},\n clearSecrets(){if(active()) block.clearSecrets();closed.bearerToken='';closed.env='';},\n fail(message){if(active()) surface!.fail(message);},close(){surface?.close();},isOpen:active,destroy(){surface?.destroy();},\n };\n },\n openModels(initial,callbacks={}) {\n let surface:OwnedSurface|undefined,disposed=false,revision=0,closed:ModelSelection={...(initial.editor?.selection??{provider:'',model:'',thinkingLevel:''})};\n const active=()=>!disposed&&!destroyed&&!!surface?.isOpen();\n const block=createModelPicker(initial,{idPrefix:env.idPrefix,onSubmit:submit(callbacks.onSubmit,()=>surface,true,()=>revision)});\n const content:OwnedContent={element:block.element,destroy(){if(disposed) return;closed={...block.read()};disposed=true;block.destroy();}};\n surface=track((content,onClose)=>env.openDialog('model',content,onClose),content,callbacks.onClose);\n return {update(state){if(active()) block.update(state);},read(){return active()?{...block.read()}:{...closed};},reset(selection){if(active()){revision++;block.reset(selection);}},focus(){if(active()) block.focus();},fail(message){if(active()) surface!.fail(message);},close(){surface?.close();},isOpen:active,destroy(){surface?.destroy();}};\n },\n openCustomConnection(initial,callbacks={}) {\n let surface:OwnedSurface|undefined,disposed=false;\n let closed:CustomConnectionDraft={name:initial.name,baseUrl:initial.baseUrl,api:initial.api,apiKey:'',models:[]};\n const active=()=>!disposed&&!destroyed&&!!surface?.isOpen();\n const block=createCustomConnectionEditor(initial,{idPrefix:prefix('custom'),onSubmit:submit(callbacks.onSubmit,()=>surface,true)});\n const clearSecrets=()=>{for(const input of block.form.querySelectorAll<HTMLInputElement>('input[type=\"password\"]')) input.value='';closed.apiKey='';};\n const content:OwnedContent={element:block.element,destroy(){if(disposed) return;closed={...cloneCustom(block.read()),apiKey:''};disposed=true;clearSecrets();block.destroy();}};\n surface=track((content,onClose)=>env.openFeature(initial.editing?'Edit model connection':'Add model connection',content,onClose),content,callbacks.onClose);\n return {update(state){if(active()) block.update(state);},read(){return cloneCustom(active()?block.read():closed);},clearSecrets(){if(active()) clearSecrets();},fail(message){if(active()) surface!.fail(message);},close(){surface?.close();},isOpen:active,destroy(){surface?.destroy();}};\n },\n openProviderLogin(initial,callbacks={}) {\n let surface:OwnedSurface|undefined,disposed=false;\n const life=new Lifetime(),active=()=>!disposed&&!destroyed&&!!surface?.isOpen();\n const external=createOperation({unavailable:()=>!active(),onError:message=>surface?.fail(message)});\n const cancellation=createOperation({unavailable:()=>!active(),onError:message=>surface?.fail(message)});\n const block=createProviderLoginPanel(initial,{idPrefix:prefix('login'),onAnswer:answer=>callbacks.onAnswer?.(answer),\n onCancel(){cancellation.run(()=>callbacks.onCancel?.());surface?.close();},onClose:()=>surface?.close(),\n });\n life.listen(block.element,'click',event=>{\n if(!active()||!(event.target instanceof Element)) return;\n const link=event.target.closest<HTMLAnchorElement>('a[href]');if(!link||!block.element.contains(link)) return;\n event.preventDefault();event.stopPropagation();external.run(()=>env.openExternal(link.href),result=>{if(!result.ok) surface?.fail(result.error);});\n });\n const content:OwnedContent={element:block.element,destroy(){if(disposed) return;disposed=true;external.destroy();cancellation.destroy();life.destroy();block.destroy();}};\n surface=track((content,onClose)=>env.openOAuth('Provider sign-in',content,onClose),content,callbacks.onClose);\n return {update(state){if(active()) block.update(state);},fail(message){if(active()) surface!.fail(message);},close(){surface?.close();},isOpen:active,destroy(){surface?.destroy();}};\n },\n destroy(){if(destroyed) return;destroyed=true;loading?.destroy();for(const surface of [...surfaces]) surface.destroy();surfaces.clear();},\n };\n}\n"]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import type { ActionResult } from '../core.js';
|
|
2
|
+
import { createWorkspaceShell, type ComposerViewState, type WorkspaceShellState } from '../workspace.js';
|
|
3
|
+
import { type WorkspacePickerState, type RenameConversationState, type RenameConversationDraft } from '../navigation/navigation.js';
|
|
4
|
+
import { type ConversationMessage, type ConversationAction, type ConversationActionAvailability } from '../content/conversation-view.js';
|
|
5
|
+
import { type WelcomeState } from '../content/welcome.js';
|
|
6
|
+
import type { LocalContentLink } from '../content/markdown.js';
|
|
7
|
+
import { type PendingMessagesState, type AttachmentsState } from '../composer.js';
|
|
8
|
+
import { type PermissionControlState, type FullAccessState, type TaskFailureState } from '../tasks/permission.js';
|
|
9
|
+
import { type ApprovalPanelState } from '../tasks/approval.js';
|
|
10
|
+
import { type RuntimePanelState } from '../tasks/runtime.js';
|
|
11
|
+
import { type CostLedgerState, type CompletionNoticeDisplay } from '../files/systems.js';
|
|
12
|
+
import { type BranchHistoryState } from '../forms/history.js';
|
|
13
|
+
import type { AppEnvironment, HostResult } from './internal.js';
|
|
14
|
+
import type { ApplicationBrand } from './index.js';
|
|
15
|
+
export type { ComposerViewState, WorkspaceShellState, WelcomeState, PendingMessagesState, AttachmentsState, PermissionControlState, FullAccessState, TaskFailureState, ApprovalPanelState, RuntimePanelState, CostLedgerState, CompletionNoticeDisplay, ConversationMessage, ConversationAction, ConversationActionAvailability, WorkspacePickerState, RenameConversationState, RenameConversationDraft, BranchHistoryState };
|
|
16
|
+
export interface NavigationStatus {
|
|
17
|
+
readonly kind: 'approval' | 'running' | 'unread' | 'idle';
|
|
18
|
+
}
|
|
19
|
+
export interface ApplicationConversation {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly title?: string;
|
|
22
|
+
readonly active: boolean;
|
|
23
|
+
readonly status?: NavigationStatus;
|
|
24
|
+
readonly actions?: {
|
|
25
|
+
readonly rename?: boolean;
|
|
26
|
+
readonly history?: boolean;
|
|
27
|
+
readonly export?: boolean;
|
|
28
|
+
readonly delete?: boolean;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface ApplicationWorkspace {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly selected: boolean;
|
|
36
|
+
readonly children: readonly ApplicationConversation[];
|
|
37
|
+
readonly canRemove?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface NavigationState {
|
|
40
|
+
readonly groups: readonly ApplicationWorkspace[];
|
|
41
|
+
readonly empty: 'workspaces' | 'search' | null;
|
|
42
|
+
readonly disabled?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface ConversationState {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
readonly messages: readonly ConversationMessage[];
|
|
47
|
+
readonly working: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ImageTarget {
|
|
50
|
+
readonly conversationId: string;
|
|
51
|
+
readonly messageId: string;
|
|
52
|
+
readonly index: number;
|
|
53
|
+
}
|
|
54
|
+
export type WorkspaceAction = 'workspace' | 'resources' | 'connections' | 'settings' | 'model' | 'compact' | 'continue' | 'diagnostics';
|
|
55
|
+
export type ConversationNavigationAction = 'rename' | 'history' | 'export' | 'delete';
|
|
56
|
+
export interface WorkspaceCallbacks {
|
|
57
|
+
onAction?(action: WorkspaceAction): HostResult;
|
|
58
|
+
onSubmit?(text: string): HostResult;
|
|
59
|
+
onStop?(): HostResult;
|
|
60
|
+
onInput?(text: string): void;
|
|
61
|
+
onBlur?(): void;
|
|
62
|
+
onImages?(files: File[]): void;
|
|
63
|
+
onThinkingChange?(value: string): void;
|
|
64
|
+
onBusyAction?(key: string): void;
|
|
65
|
+
onSearch?(query: string): void;
|
|
66
|
+
onSelectConversation?(id: string): void;
|
|
67
|
+
onSelectWorkspace?(id: string): void;
|
|
68
|
+
onNewConversation?(workspaceId: string): void;
|
|
69
|
+
onConversationAction?(action: ConversationNavigationAction, id: string): HostResult;
|
|
70
|
+
onWorkspaceAction?(action: 'remove', id: string): HostResult;
|
|
71
|
+
onMessageAction?(action: ConversationAction): HostResult;
|
|
72
|
+
onCopyCode?(text: string): HostResult;
|
|
73
|
+
resolveLocalLink?(href: string, conversationId: string): LocalContentLink | null;
|
|
74
|
+
onLocalFile?(target: LocalContentLink): HostResult;
|
|
75
|
+
onLoadImage?(target: ImageTarget): Promise<Blob | null>;
|
|
76
|
+
onQueueAction?(action: 'edit' | 'delete' | 'steer', id: string): void;
|
|
77
|
+
onRemoveAttachment?(id: string): void;
|
|
78
|
+
onDropReferences?(input: {
|
|
79
|
+
readonly paths: readonly string[];
|
|
80
|
+
readonly uris?: string;
|
|
81
|
+
readonly hasUnidentifiedFiles: boolean;
|
|
82
|
+
}): void;
|
|
83
|
+
onPermissionChange?(value: string): void;
|
|
84
|
+
onApproval?(id: string, action: 'deny' | 'always' | 'allow'): void;
|
|
85
|
+
onCompletionOpen?(id: string): void;
|
|
86
|
+
onCompletionDismiss?(runId: string): void;
|
|
87
|
+
onCostsChange?(): void;
|
|
88
|
+
onError?(message: string): void;
|
|
89
|
+
}
|
|
90
|
+
export interface SceneSession<State> {
|
|
91
|
+
update(state: Readonly<State>): void;
|
|
92
|
+
close(): void;
|
|
93
|
+
isOpen(): boolean;
|
|
94
|
+
fail(message: string): void;
|
|
95
|
+
destroy(): void;
|
|
96
|
+
}
|
|
97
|
+
export interface MessageEditorState {
|
|
98
|
+
readonly title: string;
|
|
99
|
+
readonly value: string;
|
|
100
|
+
readonly description?: string;
|
|
101
|
+
readonly note?: string;
|
|
102
|
+
readonly submitLabel?: string;
|
|
103
|
+
readonly disabled?: boolean;
|
|
104
|
+
readonly pending?: boolean;
|
|
105
|
+
readonly inputDisabled?: boolean;
|
|
106
|
+
readonly error?: string;
|
|
107
|
+
}
|
|
108
|
+
export interface MessageEditorSession extends SceneSession<MessageEditorState> {
|
|
109
|
+
read(): string;
|
|
110
|
+
reset(value: string): void;
|
|
111
|
+
focus(): void;
|
|
112
|
+
}
|
|
113
|
+
export interface ConfirmationState {
|
|
114
|
+
readonly title: string;
|
|
115
|
+
readonly action: string;
|
|
116
|
+
readonly description: {
|
|
117
|
+
readonly before: string;
|
|
118
|
+
readonly subject?: string;
|
|
119
|
+
readonly after?: string;
|
|
120
|
+
};
|
|
121
|
+
readonly hint?: string;
|
|
122
|
+
readonly error?: string;
|
|
123
|
+
readonly disabled?: boolean;
|
|
124
|
+
}
|
|
125
|
+
export interface WorkspaceAvailability {
|
|
126
|
+
/** A host mutation blocks actions in every scope. A running task is scoped below. */
|
|
127
|
+
readonly busy?: boolean;
|
|
128
|
+
/** Global actions only; unrelated inactive targets keep their own availability. */
|
|
129
|
+
readonly global?: boolean;
|
|
130
|
+
readonly active?: boolean;
|
|
131
|
+
readonly conversations?: readonly string[];
|
|
132
|
+
readonly workspaces?: readonly string[];
|
|
133
|
+
}
|
|
134
|
+
export interface WorkspaceScene {
|
|
135
|
+
updateShell(state: Readonly<WorkspaceShellState>): void;
|
|
136
|
+
updateComposer(state: Readonly<ComposerViewState>): void;
|
|
137
|
+
readDraft(): string;
|
|
138
|
+
resetDraft(text: string): void;
|
|
139
|
+
focusComposer(): void;
|
|
140
|
+
pickImages(): void;
|
|
141
|
+
insertReferences(paths: readonly string[]): void;
|
|
142
|
+
receiveNativeDrop(input: {
|
|
143
|
+
readonly paths: readonly string[];
|
|
144
|
+
readonly x: number;
|
|
145
|
+
readonly y: number;
|
|
146
|
+
}): void;
|
|
147
|
+
setDropPending(pending: boolean): void;
|
|
148
|
+
updateNavigation(state: Readonly<NavigationState>): void;
|
|
149
|
+
search(query: string): void;
|
|
150
|
+
closeNavigationMenu(): void;
|
|
151
|
+
setSidebarOpen(open: boolean): void;
|
|
152
|
+
updateConversation(state: Readonly<ConversationState>): void;
|
|
153
|
+
updateMessageAvailability(state: Readonly<ConversationActionAvailability>): void;
|
|
154
|
+
pruneConversations(ids: readonly string[]): void;
|
|
155
|
+
updateWelcome(state: Readonly<WelcomeState>): void;
|
|
156
|
+
followLatest(): void;
|
|
157
|
+
openFind(): void;
|
|
158
|
+
closeFind(): void;
|
|
159
|
+
updatePending(state: Readonly<PendingMessagesState>): void;
|
|
160
|
+
updateAttachments(state: Readonly<AttachmentsState>): void;
|
|
161
|
+
updateImageGuidance(message: string): void;
|
|
162
|
+
updatePermission(state: Readonly<PermissionControlState>): void;
|
|
163
|
+
updateApproval(state: Readonly<ApprovalPanelState>): void;
|
|
164
|
+
updateFailure(state: Readonly<TaskFailureState>): void;
|
|
165
|
+
updateRuntime(state: Readonly<RuntimePanelState>): void;
|
|
166
|
+
updateTiming(value: {
|
|
167
|
+
summary: string;
|
|
168
|
+
duration: string;
|
|
169
|
+
speed: string;
|
|
170
|
+
}): void;
|
|
171
|
+
updateNotices(state: readonly CompletionNoticeDisplay[]): void;
|
|
172
|
+
updateAvailability(state: Readonly<WorkspaceAvailability>): void;
|
|
173
|
+
readCosts(): {
|
|
174
|
+
readonly open: boolean;
|
|
175
|
+
readonly runtimeOpen: boolean;
|
|
176
|
+
};
|
|
177
|
+
updateCosts(state: {
|
|
178
|
+
readonly visible: boolean;
|
|
179
|
+
readonly report?: CostLedgerState;
|
|
180
|
+
readonly loading?: boolean;
|
|
181
|
+
readonly error?: string;
|
|
182
|
+
}): void;
|
|
183
|
+
resetCosts(): void;
|
|
184
|
+
openMessageEditor(state: MessageEditorState, callbacks?: {
|
|
185
|
+
onSubmit?(text: string): ActionResult | Promise<ActionResult>;
|
|
186
|
+
onInput?(text: string): void;
|
|
187
|
+
onClose?(): void;
|
|
188
|
+
}): MessageEditorSession;
|
|
189
|
+
openQueueEditor(state: MessageEditorState, callbacks?: {
|
|
190
|
+
onSubmit?(text: string): ActionResult | Promise<ActionResult>;
|
|
191
|
+
onInput?(text: string): void;
|
|
192
|
+
onClose?(): void;
|
|
193
|
+
}): MessageEditorSession;
|
|
194
|
+
openConfirmation(state: ConfirmationState, callbacks: {
|
|
195
|
+
onConfirm(): ActionResult | Promise<ActionResult>;
|
|
196
|
+
onClose?(): void;
|
|
197
|
+
}): SceneSession<ConfirmationState>;
|
|
198
|
+
openWorkspacePicker(state: WorkspacePickerState, callbacks?: {
|
|
199
|
+
onSubmit?(path: string): ActionResult | Promise<ActionResult>;
|
|
200
|
+
onPick?(): Promise<{
|
|
201
|
+
path?: string;
|
|
202
|
+
error?: string;
|
|
203
|
+
}>;
|
|
204
|
+
onSelect?(id: string): void;
|
|
205
|
+
onClose?(): void;
|
|
206
|
+
}): SceneSession<WorkspacePickerState> & {
|
|
207
|
+
read(): {
|
|
208
|
+
path: string;
|
|
209
|
+
};
|
|
210
|
+
reset(path?: string): void;
|
|
211
|
+
focus(): void;
|
|
212
|
+
};
|
|
213
|
+
openRename(state: RenameConversationState, callbacks?: {
|
|
214
|
+
onSubmit?(draft: RenameConversationDraft): ActionResult | Promise<ActionResult>;
|
|
215
|
+
onClose?(): void;
|
|
216
|
+
}): SceneSession<RenameConversationState> & {
|
|
217
|
+
read(): RenameConversationDraft;
|
|
218
|
+
reset(state: RenameConversationState): void;
|
|
219
|
+
focus(): void;
|
|
220
|
+
};
|
|
221
|
+
openFullAccess(state: FullAccessState, callbacks: {
|
|
222
|
+
onConfirm(): ActionResult | Promise<ActionResult>;
|
|
223
|
+
onClose?(): void;
|
|
224
|
+
}): SceneSession<FullAccessState>;
|
|
225
|
+
openHistory(state: BranchHistoryState, callbacks?: {
|
|
226
|
+
onContinue?(nodeId: string): HostResult;
|
|
227
|
+
onClose?(): void;
|
|
228
|
+
}): SceneSession<BranchHistoryState>;
|
|
229
|
+
destroy(): void;
|
|
230
|
+
}
|
|
231
|
+
export declare function createWorkspaceScene(env: AppEnvironment, shell: ReturnType<typeof createWorkspaceShell>, callbacks: WorkspaceCallbacks, brand: ApplicationBrand): WorkspaceScene;
|
|
232
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/app/workspace.ts"],"names":[],"mappings":"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"}
|