pith-ui 0.1.4 → 0.2.0-app.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/AI.md +21 -7
  2. package/API.md +263 -262
  3. package/APP-API.md +2019 -0
  4. package/APP.md +137 -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 +279 -0
  29. package/dist/app/settings.js.map +1 -0
  30. package/dist/app/workspace.d.ts +228 -0
  31. package/dist/app/workspace.d.ts.map +1 -0
  32. package/dist/app/workspace.js +402 -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,279 @@
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) => async (value) => {
34
+ if (!owner()?.isOpen())
35
+ return unavailable;
36
+ const result = callback ? await callback(value) : unavailable;
37
+ if (result.ok && closeOnSuccess && owner()?.isOpen())
38
+ owner().close();
39
+ return result;
40
+ };
41
+ return {
42
+ openConnectionLoading(state, callbacks = {}) {
43
+ loading?.destroy();
44
+ loading = createLoadingSession(env, state.editing ? 'Edit model connection' : 'Add model connection', state, callbacks.onClose);
45
+ if (destroyed)
46
+ loading.destroy();
47
+ return loading;
48
+ },
49
+ openSettings(initial, callbacks = {}) {
50
+ let surface, disposed = false, current = initial;
51
+ let closed = { provider: '', baseUrl: initial.baseUrl, apiKey: '' };
52
+ let provider;
53
+ let providerState;
54
+ const life = new Lifetime(), auxiliary = new Map();
55
+ const active = () => !disposed && !destroyed && !!surface?.isOpen();
56
+ const run = (name, task) => {
57
+ let operation = auxiliary.get(name);
58
+ if (!operation) {
59
+ operation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
60
+ auxiliary.set(name, operation);
61
+ }
62
+ operation.run(task, result => { if (result && !result.ok)
63
+ surface?.fail(result.error); });
64
+ };
65
+ const block = createSettingsPanel(initial, { idPrefix: env.idPrefix,
66
+ onSubmit: submit(callbacks.onSubmit, () => surface, true), onRemoveKey: submit(callbacks.onRemoveKey, () => surface, true),
67
+ onTest: draft => { if (current.testing && callbacks.onCancelTest)
68
+ run('cancel-test', callbacks.onCancelTest);
69
+ else if (callbacks.onTest)
70
+ run('test', () => callbacks.onTest(draft)); },
71
+ onAppearanceChange: value => { if (callbacks.onAppearanceChange && (value === 'light' || value === 'dark' || value === 'system'))
72
+ run('appearance', () => callbacks.onAppearanceChange(value)); },
73
+ onProviderChange: id => { if (callbacks.onProviderChange)
74
+ run('provider', () => callbacks.onProviderChange(id)); },
75
+ onDraftChange: callbacks.onDraftChange, });
76
+ const addConnection = block.element.querySelector('button[data-sdk="custom"]');
77
+ life.listen(addConnection, 'click', event => event.stopPropagation());
78
+ const addAction = adoptAction(addConnection, { onAction: () => { if (active() && !current.disabled)
79
+ return callbacks.onCreateConnection?.(); }, onError: message => surface?.fail(message) });
80
+ addAction.update({ disabled: !!current.disabled });
81
+ let externalUpdatePending = false, localUpdatePending = false, updateKind = 'check';
82
+ const updateOperation = createOperation({ unavailable: () => !active(), onPending: value => { localUpdatePending = value; updates.setPending(externalUpdatePending || localUpdatePending); }, onError: message => updates.setError(message, { allowCheckRetry: updateKind === 'check' }) });
83
+ const updateAction = (action) => { if (callbacks.onUpdateAction)
84
+ updateOperation.run(() => { updateKind = action; updates.setError(''); return callbacks.onUpdateAction(action); }, result => { if (result && !result.ok)
85
+ updates.setError(result.error, { allowCheckRetry: action === 'check' }); }); };
86
+ const updates = createUpdatePanel({ container: block.updates, productName: env.productName, onCheck: () => updateAction('check'), onInstall: () => updateAction('install') });
87
+ life.listen(block.element, 'click', event => {
88
+ if (!active() || !(event.target instanceof Element))
89
+ return;
90
+ const button = event.target.closest('button');
91
+ if (!button || button.disabled)
92
+ return;
93
+ if (button.dataset.action === 'diagnostics') {
94
+ event.stopPropagation();
95
+ if (callbacks.onDiagnostics)
96
+ run('diagnostics', callbacks.onDiagnostics);
97
+ }
98
+ });
99
+ const content = { element: block.element, destroy() {
100
+ if (disposed)
101
+ return;
102
+ closed = { ...block.read(), apiKey: '' };
103
+ disposed = true;
104
+ life.destroy();
105
+ updateOperation.destroy();
106
+ for (const operation of auxiliary.values())
107
+ operation.destroy();
108
+ auxiliary.clear();
109
+ addAction.destroy();
110
+ provider?.destroy();
111
+ updates.destroy();
112
+ block.clearSecrets();
113
+ block.destroy();
114
+ } };
115
+ surface = track((content, onClose) => env.openDialog('settings', content, onClose), content, callbacks.onClose);
116
+ return {
117
+ update(state) { if (active()) {
118
+ current = state;
119
+ block.update(state);
120
+ addAction.update({ disabled: !!state.disabled });
121
+ if (providerState)
122
+ provider?.update({ ...providerState, disabled: !!state.disabled || !!providerState.disabled });
123
+ } },
124
+ read() { return active() ? { ...block.read() } : { ...closed }; },
125
+ setProviders(items, selected) { if (active())
126
+ block.setProviders(items, selected); },
127
+ resetProvider(value) { if (active()) {
128
+ for (const operation of auxiliary.values())
129
+ operation.invalidate();
130
+ block.resetProvider(value);
131
+ } },
132
+ setCredential(view) {
133
+ if (!active())
134
+ return;
135
+ providerState = view.providerActions;
136
+ if (view.providerActions) {
137
+ const actions = { ...view.providerActions, disabled: !!current.disabled || !!view.providerActions.disabled };
138
+ if (provider)
139
+ provider.update(actions);
140
+ else
141
+ provider = createProviderActions(actions, { onProviderAction: (action, target) => { if (active() && !current.disabled)
142
+ return callbacks.onProviderAction?.(action, target); }, onError: message => surface?.fail(message) });
143
+ }
144
+ else {
145
+ provider?.destroy();
146
+ provider = undefined;
147
+ }
148
+ const { providerActions: _, ...credential } = view;
149
+ block.setCredential({ ...credential, actions: provider?.element });
150
+ },
151
+ updateUpdates(state) { if (active())
152
+ updates.update(state); },
153
+ setUpdatePending(pending) { if (active()) {
154
+ externalUpdatePending = pending;
155
+ updates.setPending(externalUpdatePending || localUpdatePending);
156
+ } },
157
+ setUpdateError(message, options) { if (active())
158
+ updates.setError(message, options); },
159
+ clearSecrets() { if (active())
160
+ block.clearSecrets(); closed.apiKey = ''; },
161
+ fail(message) { if (active())
162
+ surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); },
163
+ };
164
+ },
165
+ openConnections(initial = {}, callbacks = {}) {
166
+ let surface, disposed = false, current = initial;
167
+ let entries = [];
168
+ let closed = { name: '', type: 'http', url: '', oauth: false, oauthClientId: '', oauthScope: '', command: '', args: '[]', enabled: true, bearerToken: '', clearBearerToken: false, env: '', clearEnv: false };
169
+ const life = new Lifetime(), active = () => !disposed && !destroyed && !!surface?.isOpen();
170
+ const operation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
171
+ const run = (task) => { if (task)
172
+ operation.run(task, result => { if (result && !result.ok)
173
+ surface?.fail(result.error); }); };
174
+ const block = createMCPConnectionsPanel(initial, { idPrefix: env.idPrefix, onSubmit: submit(callbacks.onSubmit, () => surface, false) });
175
+ const list = createMCPConnectionList({ entries: [], disabled: initial.disabled }, { onAction: (action, target) => callbacks.onConnectionAction?.(action, target) });
176
+ life.listen(block.element, 'click', event => {
177
+ if (!active() || !(event.target instanceof Element))
178
+ return;
179
+ const button = event.target.closest('button');
180
+ if (!button || button.disabled)
181
+ return;
182
+ if (button.dataset.action === 'refresh-mcp') {
183
+ event.stopPropagation();
184
+ run(callbacks.onRefresh);
185
+ }
186
+ if (button.dataset.action === 'new-mcp') {
187
+ event.stopPropagation();
188
+ block.edit();
189
+ run(callbacks.onNew);
190
+ }
191
+ });
192
+ const content = { element: block.element, destroy() { if (disposed)
193
+ return; closed = { ...block.read(), bearerToken: '', env: '' }; disposed = true; life.destroy(); operation.destroy(); list.destroy(); block.clearSecrets(); block.destroy(); } };
194
+ surface = track((content, onClose) => env.openDialog('connections', content, onClose), content, callbacks.onClose);
195
+ return {
196
+ update(state) { if (active()) {
197
+ current = state;
198
+ block.update(state);
199
+ list.update({ entries, disabled: state.disabled });
200
+ } },
201
+ read() { return active() ? { ...block.read() } : { ...closed }; },
202
+ edit(value) { if (active()) {
203
+ operation.invalidate();
204
+ block.edit(value);
205
+ } },
206
+ setConnections(values) { if (active()) {
207
+ entries = values;
208
+ if (list.element.parentNode !== block.list)
209
+ block.list.replaceChildren(list.element);
210
+ list.update({ entries, disabled: current.disabled });
211
+ } },
212
+ clearBearerToken() { if (active())
213
+ block.clearBearerToken(); closed.bearerToken = ''; },
214
+ clearSecrets() { if (active())
215
+ block.clearSecrets(); closed.bearerToken = ''; closed.env = ''; },
216
+ fail(message) { if (active())
217
+ surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); },
218
+ };
219
+ },
220
+ openModels(initial, callbacks = {}) {
221
+ let surface, disposed = false, closed = { ...(initial.editor?.selection ?? { provider: '', model: '', thinkingLevel: '' }) };
222
+ const active = () => !disposed && !destroyed && !!surface?.isOpen();
223
+ const block = createModelPicker(initial, { idPrefix: env.idPrefix, onSubmit: submit(callbacks.onSubmit, () => surface, true) });
224
+ const content = { element: block.element, destroy() { if (disposed)
225
+ return; closed = { ...block.read() }; disposed = true; block.destroy(); } };
226
+ surface = track((content, onClose) => env.openDialog('model', content, onClose), content, callbacks.onClose);
227
+ return { update(state) { if (active())
228
+ block.update(state); }, read() { return active() ? { ...block.read() } : { ...closed }; }, reset(selection) { if (active())
229
+ block.reset(selection); }, focus() { if (active())
230
+ block.focus(); }, fail(message) { if (active())
231
+ surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
232
+ },
233
+ openCustomConnection(initial, callbacks = {}) {
234
+ let surface, disposed = false;
235
+ let closed = { name: initial.name, baseUrl: initial.baseUrl, api: initial.api, apiKey: '', models: [] };
236
+ const active = () => !disposed && !destroyed && !!surface?.isOpen();
237
+ const block = createCustomConnectionEditor(initial, { idPrefix: prefix('custom'), onSubmit: submit(callbacks.onSubmit, () => surface, true) });
238
+ const clearSecrets = () => { for (const input of block.form.querySelectorAll('input[type="password"]'))
239
+ input.value = ''; closed.apiKey = ''; };
240
+ const content = { element: block.element, destroy() { if (disposed)
241
+ return; closed = { ...cloneCustom(block.read()), apiKey: '' }; disposed = true; clearSecrets(); block.destroy(); } };
242
+ surface = track((content, onClose) => env.openFeature(initial.editing ? 'Edit model connection' : 'Add model connection', content, onClose), content, callbacks.onClose);
243
+ return { update(state) { if (active())
244
+ block.update(state); }, read() { return cloneCustom(active() ? block.read() : closed); }, clearSecrets() { if (active())
245
+ clearSecrets(); }, fail(message) { if (active())
246
+ surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
247
+ },
248
+ openProviderLogin(initial, callbacks = {}) {
249
+ let surface, disposed = false;
250
+ const life = new Lifetime(), active = () => !disposed && !destroyed && !!surface?.isOpen();
251
+ const external = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
252
+ const cancellation = createOperation({ unavailable: () => !active(), onError: message => surface?.fail(message) });
253
+ const block = createProviderLoginPanel(initial, { idPrefix: prefix('login'), onAnswer: answer => callbacks.onAnswer?.(answer),
254
+ onCancel() { cancellation.run(() => callbacks.onCancel?.()); surface?.close(); }, onClose: () => surface?.close(),
255
+ });
256
+ life.listen(block.element, 'click', event => {
257
+ if (!active() || !(event.target instanceof Element))
258
+ return;
259
+ const link = event.target.closest('a[href]');
260
+ if (!link || !block.element.contains(link))
261
+ return;
262
+ event.preventDefault();
263
+ event.stopPropagation();
264
+ external.run(() => env.openExternal(link.href), result => { if (!result.ok)
265
+ surface?.fail(result.error); });
266
+ });
267
+ const content = { element: block.element, destroy() { if (disposed)
268
+ return; disposed = true; external.destroy(); cancellation.destroy(); life.destroy(); block.destroy(); } };
269
+ surface = track((content, onClose) => env.openOAuth('Provider sign-in', content, onClose), content, callbacks.onClose);
270
+ return { update(state) { if (active())
271
+ block.update(state); }, fail(message) { if (active())
272
+ surface.fail(message); }, close() { surface?.close(); }, isOpen: active, destroy() { surface?.destroy(); } };
273
+ },
274
+ destroy() { if (destroyed)
275
+ return; destroyed = true; loading?.destroy(); for (const surface of [...surfaces])
276
+ surface.destroy(); surfaces.clear(); },
277
+ };
278
+ }
279
+ //# 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):Submission<Value>=>async value=>{\n if(!owner()?.isOpen()) return unavailable;\n const result=callback ? await callback(value) : unavailable;\n if(result.ok&&closeOnSuccess&&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;\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),onRemoveKey:submit(callbacks.onRemoveKey,()=>surface,true),\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()){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,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)});\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()) 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,228 @@
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
+ }): void;
82
+ onPermissionChange?(value: string): void;
83
+ onApproval?(id: string, action: 'deny' | 'always' | 'allow'): void;
84
+ onCompletionOpen?(id: string): void;
85
+ onCompletionDismiss?(runId: string): void;
86
+ onCostsChange?(): void;
87
+ onError?(message: string): void;
88
+ }
89
+ export interface SceneSession<State> {
90
+ update(state: Readonly<State>): void;
91
+ close(): void;
92
+ isOpen(): boolean;
93
+ fail(message: string): void;
94
+ destroy(): void;
95
+ }
96
+ export interface MessageEditorState {
97
+ readonly title: string;
98
+ readonly value: string;
99
+ readonly description?: string;
100
+ readonly note?: string;
101
+ readonly submitLabel?: string;
102
+ readonly disabled?: boolean;
103
+ readonly pending?: boolean;
104
+ readonly inputDisabled?: boolean;
105
+ readonly error?: string;
106
+ }
107
+ export interface MessageEditorSession extends SceneSession<MessageEditorState> {
108
+ read(): string;
109
+ reset(value: string): void;
110
+ focus(): void;
111
+ }
112
+ export interface ConfirmationState {
113
+ readonly title: string;
114
+ readonly action: string;
115
+ readonly description: {
116
+ readonly before: string;
117
+ readonly subject?: string;
118
+ readonly after?: string;
119
+ };
120
+ readonly hint?: string;
121
+ readonly error?: string;
122
+ readonly disabled?: boolean;
123
+ }
124
+ export interface WorkspaceAvailability {
125
+ readonly global?: boolean;
126
+ readonly active?: boolean;
127
+ readonly conversations?: readonly string[];
128
+ readonly workspaces?: readonly string[];
129
+ }
130
+ export interface WorkspaceScene {
131
+ updateShell(state: Readonly<WorkspaceShellState>): void;
132
+ updateComposer(state: Readonly<ComposerViewState>): void;
133
+ readDraft(): string;
134
+ resetDraft(text: string): void;
135
+ focusComposer(): void;
136
+ pickImages(): void;
137
+ insertReferences(paths: readonly string[]): void;
138
+ receiveNativeDrop(input: {
139
+ readonly paths: readonly string[];
140
+ readonly x: number;
141
+ readonly y: number;
142
+ }): void;
143
+ setDropPending(pending: boolean): void;
144
+ updateNavigation(state: Readonly<NavigationState>): void;
145
+ search(query: string): void;
146
+ closeNavigationMenu(): void;
147
+ setSidebarOpen(open: boolean): void;
148
+ updateConversation(state: Readonly<ConversationState>): void;
149
+ updateMessageAvailability(state: Readonly<ConversationActionAvailability>): void;
150
+ pruneConversations(ids: readonly string[]): void;
151
+ updateWelcome(state: Readonly<WelcomeState>): void;
152
+ followLatest(): void;
153
+ openFind(): void;
154
+ closeFind(): void;
155
+ updatePending(state: Readonly<PendingMessagesState>): void;
156
+ updateAttachments(state: Readonly<AttachmentsState>): void;
157
+ updateImageGuidance(message: string): void;
158
+ updatePermission(state: Readonly<PermissionControlState>): void;
159
+ updateApproval(state: Readonly<ApprovalPanelState>): void;
160
+ updateFailure(state: Readonly<TaskFailureState>): void;
161
+ updateRuntime(state: Readonly<RuntimePanelState>): void;
162
+ updateTiming(value: {
163
+ summary: string;
164
+ duration: string;
165
+ speed: string;
166
+ }): void;
167
+ updateNotices(state: readonly CompletionNoticeDisplay[]): void;
168
+ updateAvailability(state: Readonly<WorkspaceAvailability>): void;
169
+ readCosts(): {
170
+ readonly open: boolean;
171
+ readonly runtimeOpen: boolean;
172
+ };
173
+ updateCosts(state: {
174
+ readonly visible: boolean;
175
+ readonly report?: CostLedgerState;
176
+ readonly loading?: boolean;
177
+ readonly error?: string;
178
+ }): void;
179
+ resetCosts(): void;
180
+ openMessageEditor(state: MessageEditorState, callbacks?: {
181
+ onSubmit?(text: string): ActionResult | Promise<ActionResult>;
182
+ onInput?(text: string): void;
183
+ onClose?(): void;
184
+ }): MessageEditorSession;
185
+ openQueueEditor(state: MessageEditorState, callbacks?: {
186
+ onSubmit?(text: string): ActionResult | Promise<ActionResult>;
187
+ onInput?(text: string): void;
188
+ onClose?(): void;
189
+ }): MessageEditorSession;
190
+ openConfirmation(state: ConfirmationState, callbacks: {
191
+ onConfirm(): ActionResult | Promise<ActionResult>;
192
+ onClose?(): void;
193
+ }): SceneSession<ConfirmationState>;
194
+ openWorkspacePicker(state: WorkspacePickerState, callbacks?: {
195
+ onSubmit?(path: string): ActionResult | Promise<ActionResult>;
196
+ onPick?(): Promise<{
197
+ path?: string;
198
+ error?: string;
199
+ }>;
200
+ onSelect?(id: string): void;
201
+ onClose?(): void;
202
+ }): SceneSession<WorkspacePickerState> & {
203
+ read(): {
204
+ path: string;
205
+ };
206
+ reset(path?: string): void;
207
+ focus(): void;
208
+ };
209
+ openRename(state: RenameConversationState, callbacks?: {
210
+ onSubmit?(draft: RenameConversationDraft): ActionResult | Promise<ActionResult>;
211
+ onClose?(): void;
212
+ }): SceneSession<RenameConversationState> & {
213
+ read(): RenameConversationDraft;
214
+ reset(state: RenameConversationState): void;
215
+ focus(): void;
216
+ };
217
+ openFullAccess(state: FullAccessState, callbacks: {
218
+ onConfirm(): ActionResult | Promise<ActionResult>;
219
+ onClose?(): void;
220
+ }): SceneSession<FullAccessState>;
221
+ openHistory(state: BranchHistoryState, callbacks?: {
222
+ onContinue?(nodeId: string): HostResult;
223
+ onClose?(): void;
224
+ }): SceneSession<BranchHistoryState>;
225
+ destroy(): void;
226
+ }
227
+ export declare function createWorkspaceScene(env: AppEnvironment, shell: ReturnType<typeof createWorkspaceShell>, callbacks: WorkspaceCallbacks, brand: ApplicationBrand): WorkspaceScene;
228
+ //# 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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"}