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.
Files changed (41) hide show
  1. package/AI.md +21 -7
  2. package/API.md +263 -262
  3. package/APP-API.md +2023 -0
  4. package/APP.md +141 -0
  5. package/README.md +35 -4
  6. package/dist/app/files.d.ts +68 -0
  7. package/dist/app/files.d.ts.map +1 -0
  8. package/dist/app/files.js +177 -0
  9. package/dist/app/files.js.map +1 -0
  10. package/dist/app/index.d.ts +57 -0
  11. package/dist/app/index.d.ts.map +1 -0
  12. package/dist/app/index.js +300 -0
  13. package/dist/app/index.js.map +1 -0
  14. package/dist/app/internal.d.ts +31 -0
  15. package/dist/app/internal.d.ts.map +1 -0
  16. package/dist/app/internal.js +2 -0
  17. package/dist/app/internal.js.map +1 -0
  18. package/dist/app/resources.d.ts +89 -0
  19. package/dist/app/resources.d.ts.map +1 -0
  20. package/dist/app/resources.js +190 -0
  21. package/dist/app/resources.js.map +1 -0
  22. package/dist/app/session.d.ts +14 -0
  23. package/dist/app/session.d.ts.map +1 -0
  24. package/dist/app/session.js +12 -0
  25. package/dist/app/session.js.map +1 -0
  26. package/dist/app/settings.d.ts +109 -0
  27. package/dist/app/settings.d.ts.map +1 -0
  28. package/dist/app/settings.js +283 -0
  29. package/dist/app/settings.js.map +1 -0
  30. package/dist/app/workspace.d.ts +232 -0
  31. package/dist/app/workspace.d.ts.map +1 -0
  32. package/dist/app/workspace.js +413 -0
  33. package/dist/app/workspace.js.map +1 -0
  34. package/dist/forms/actions.d.ts +1 -0
  35. package/dist/forms/actions.d.ts.map +1 -1
  36. package/dist/forms/actions.js +3 -2
  37. package/dist/forms/actions.js.map +1 -1
  38. package/dist/styles.css +4 -1
  39. package/dist/tasks/runtime.js +2 -2
  40. package/dist/tasks/runtime.js.map +1 -1
  41. 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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"}