File size: 1,417 Bytes
ea7122c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { MiniCPM5ForCausalLM } from '../runtime/minicpm5.js';
import { WorkspaceController } from './controller.js';
import { createStore, createWorkspace } from './workspace.js';

const emit = message => postMessage(message);
const initialized = (async () => {
  let store, saved;
  try { store = await createStore(); saved = await store.load(); }
  catch (error) { emit({ type: 'persistence_error', error: `Workspace saving is unavailable: ${error.message}` }); }
  const workspace = createWorkspace(saved?.files, saved?.entries);
  await workspace.ready;
  const controller = new WorkspaceController({ Model: MiniCPM5ForCausalLM, workspace, store, saved, emit });
  emit({ type: 'initialized', ...(await controller.uiSnapshot()) });
  return controller;
})();

// Attach a rejection handler immediately, including failures before the first RPC.
initialized.catch(error => emit({ type: 'fatal', stage: 'initialization', error: `Workspace initialization failed: ${error.message}. Reload the page to retry.` }));

self.onmessage = async ({ data: { id, action, args = {} } }) => {
  try {
    const controller = await initialized;
    const value = await controller.dispatch(action, args);
    emit({ type: 'reply', id, value });
  } catch (error) {
    emit({ type: 'reply', id, error: error.name === 'AbortError' ? 'Stopped.' : String(error.message ?? error), errorName: error.name, errorCode: error.code });
  }
};