@fias/plugin-dev-harness 1.4.2 → 1.5.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.
@@ -54,10 +54,11 @@ const credentials_1 = require("../config/credentials");
54
54
  async function startHarnessServer(options) {
55
55
  const app = (0, express_1.default)();
56
56
  app.use(express_1.default.json());
57
- // Mutable state — toggled at runtime via UI
57
+ // Mutable state — always starts in mock mode with no credentials.
58
+ // Credentials are loaded when the user switches to live mode or logs in.
58
59
  let currentMode = 'mock';
59
60
  let currentEnvironment = options.defaultEnvironment;
60
- let currentAuthToken = (0, credentials_1.loadAuthTokenForEnvironment)(currentEnvironment);
61
+ let currentAuthToken = '';
61
62
  let currentSession = (0, credentials_1.loadSessionForEnvironment)(currentEnvironment);
62
63
  function getCurrentApiUrl() {
63
64
  return config_loader_1.ENVIRONMENT_URLS[currentEnvironment].apiUrl;
@@ -76,6 +77,7 @@ async function startHarnessServer(options) {
76
77
  permissions: options.permissions,
77
78
  mockUser: options.mockUser,
78
79
  mockTheme: options.mockTheme,
80
+ mockEntities: options.mockEntities,
79
81
  })
80
82
  : null;
81
83
  function getActiveHandler() {
@@ -89,6 +91,7 @@ async function startHarnessServer(options) {
89
91
  permissions: options.permissions,
90
92
  mockUser: options.mockUser,
91
93
  mockTheme: options.mockTheme,
94
+ mockEntities: options.mockEntities,
92
95
  });
93
96
  }
94
97
  else {
@@ -131,6 +134,12 @@ async function startHarnessServer(options) {
131
134
  app.post('/api/mode', (req, res) => {
132
135
  const { mode } = req.body;
133
136
  if (mode === 'live') {
137
+ // Try loading saved credentials if we don't have them yet
138
+ if (!liveHandler) {
139
+ currentAuthToken = (0, credentials_1.loadAuthTokenForEnvironment)(currentEnvironment);
140
+ currentSession = (0, credentials_1.loadSessionForEnvironment)(currentEnvironment);
141
+ rebuildLiveHandler();
142
+ }
134
143
  if (!liveHandler) {
135
144
  res.status(400).json({ error: 'Not authenticated. Sign in first.' });
136
145
  return;
@@ -225,6 +234,46 @@ async function startHarnessServer(options) {
225
234
  });
226
235
  }
227
236
  });
237
+ // Streaming bridge endpoint — SSE for entity_invoke with streaming
238
+ app.post('/api/bridge/stream', async (req, res) => {
239
+ if (currentMode === 'live') {
240
+ const valid = await ensureValidToken();
241
+ if (!valid) {
242
+ currentMode = 'mock';
243
+ res.status(401).json({ error: 'Session expired. Please sign in again.' });
244
+ return;
245
+ }
246
+ }
247
+ const handler = getActiveHandler();
248
+ // Fall back to non-streaming if handler doesn't support it
249
+ if (!handler.handleStream) {
250
+ try {
251
+ const result = await handler.handle(req.body);
252
+ res.json(result);
253
+ }
254
+ catch (err) {
255
+ res.status(400).json({ error: err instanceof Error ? err.message : 'Bridge call failed' });
256
+ }
257
+ return;
258
+ }
259
+ // SSE streaming response
260
+ res.writeHead(200, {
261
+ 'Content-Type': 'text/event-stream',
262
+ 'Cache-Control': 'no-cache',
263
+ Connection: 'keep-alive',
264
+ });
265
+ try {
266
+ const result = await handler.handleStream(req.body, (text) => {
267
+ res.write(`data: ${JSON.stringify({ text })}\n\n`);
268
+ });
269
+ res.write(`data: ${JSON.stringify({ done: true, ...result })}\n\n`);
270
+ }
271
+ catch (err) {
272
+ const errMsg = err instanceof Error ? err.message : 'Bridge call failed';
273
+ res.write(`data: ${JSON.stringify({ error: errMsg })}\n\n`);
274
+ }
275
+ res.end();
276
+ });
228
277
  // Credit balance endpoint
229
278
  app.get('/api/credits', async (_req, res) => {
230
279
  if (currentMode !== 'live' || !currentAuthToken) {
@@ -260,8 +309,9 @@ async function startHarnessServer(options) {
260
309
  res.json({ reachable: false });
261
310
  }
262
311
  });
263
- // Harness config endpoint
312
+ // Harness config endpoint — no-cache so page refresh always gets fresh state
264
313
  app.get('/api/config', (_req, res) => {
314
+ res.setHeader('Cache-Control', 'no-store');
265
315
  res.json({
266
316
  pluginUrl: options.pluginUrl,
267
317
  mode: currentMode,
@@ -287,6 +337,7 @@ async function startHarnessServer(options) {
287
337
  }
288
338
  app.use('/static', express_1.default.static(resolvedStaticDir));
289
339
  app.get('/', (_req, res) => {
340
+ res.setHeader('Cache-Control', 'no-store');
290
341
  const htmlPath = path.join(resolvedStaticDir, 'harness.html');
291
342
  if (fs.existsSync(htmlPath)) {
292
343
  res.sendFile(htmlPath);
@@ -430,5 +481,5 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; b
430
481
  .log-warn { color: #fde047; }
431
482
  .log-error { color: #fca5a5; }
432
483
  .log-time { color: #6b7280; margin-right: 8px; }`;
433
- const EMBEDDED_JS = `(function(){var iframe=document.getElementById('plugin-iframe'),consoleBody=document.getElementById('console-body'),consoleCount=document.getElementById('console-count'),consoleToggle=document.getElementById('console-toggle'),creditBalance=document.getElementById('credit-balance'),themeToggle=document.getElementById('theme-toggle'),reloadBtn=document.getElementById('reload-btn'),modeBadge=document.getElementById('mode-badge'),themeBadge=document.getElementById('theme-badge'),pluginStatus=document.getElementById('plugin-status'),loginModal=document.getElementById('login-modal'),loginEmail=document.getElementById('login-email'),loginPassword=document.getElementById('login-password'),loginError=document.getElementById('login-error'),loginSubmit=document.getElementById('login-submit'),loginCancel=document.getElementById('login-cancel'),envSelector=document.getElementById('env-selector'),loginTarget=document.getElementById('login-target');var messageCount=0,currentTheme='dark',currentMode='mock',currentEnvironment='staging',hasCredentials=false,cachedConfig=null;var PM={get_user:'user:profile:read',get_theme:'theme:read',entity_invoke:'entities:invoke',storage_read:'storage:sandbox',storage_write:'storage:sandbox',storage_list:'storage:sandbox',storage_delete:'storage:sandbox'};var RL={entity_invoke:{m:60},storage_write:{m:120},storage_read:{m:300},storage_list:{m:60},storage_delete:{m:60}};var rb={};var SF='-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',MF='"SFMono-Regular",Consolas,monospace',SP={xs:'4px',sm:'8px',md:'16px',lg:'24px',xl:'32px'},FN={body:SF,heading:SF,mono:MF};fetch('/api/config').then(function(r){return r.json()}).then(function(c){cachedConfig=c;currentTheme=c.mockTheme||'dark';currentMode=c.mode||'mock';currentEnvironment=c.environment||'staging';hasCredentials=c.hasCredentials||false;envSelector.value=currentEnvironment;uMB();uTB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}cPR(function(ok){if(ok){pluginStatus.classList.add('hidden');iframe.classList.remove('hidden');iframe.src=c.pluginUrl}else{pluginStatus.classList.add('error');pluginStatus.innerHTML='<p><strong>Plugin server not reachable</strong></p><p>Make sure your plugin dev server is running.</p>'}})});consoleToggle.addEventListener('click',function(){consoleBody.classList.toggle('open')});reloadBtn.addEventListener('click',function(){if(cachedConfig)iframe.src=cachedConfig.pluginUrl});themeToggle.addEventListener('click',function(){currentTheme=currentTheme==='dark'?'light':'dark';uTB();sTP({type:'theme_update',messageId:'t_'+Date.now(),payload:gT()})});modeBadge.addEventListener('click',function(){if(currentMode==='mock'){if(!hasCredentials){sLM();return}sM('live')}else sM('mock')});envSelector.addEventListener('change',function(){fetch('/api/environment',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({environment:envSelector.value})}).then(function(r){return r.json()}).then(function(d){currentEnvironment=d.environment;currentMode=d.mode;hasCredentials=d.hasCredentials;uMB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}else{creditBalance.style.display='none';creditBalance.textContent=''}lM('info','Environment: '+currentEnvironment.toUpperCase()+(hasCredentials?'':' (not authenticated)'))}).catch(function(e){lM('error',e.message)})});function sM(m){fetch('/api/mode',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({mode:m})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error)});return r.json()}).then(function(d){currentMode=d.mode;uMB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}else{creditBalance.style.display='none';creditBalance.textContent=''}}).catch(function(e){lM('error',e.message)})}function sLM(){loginModal.style.display='flex';loginEmail.value='';loginPassword.value='';loginError.style.display='none';loginSubmit.disabled=false;loginSubmit.textContent='Sign in';loginTarget.textContent=currentEnvironment==='production'?'fias.io':'staging.fias.io';loginEmail.focus()}function hLM(){loginModal.style.display='none'}loginCancel.addEventListener('click',hLM);loginModal.addEventListener('click',function(e){if(e.target===loginModal)hLM()});loginEmail.addEventListener('keydown',function(e){if(e.key==='Enter')loginPassword.focus();if(e.key==='Escape')hLM()});loginPassword.addEventListener('keydown',function(e){if(e.key==='Enter')doLogin();if(e.key==='Escape')hLM()});loginSubmit.addEventListener('click',doLogin);function doLogin(){var em=loginEmail.value.trim(),pw=loginPassword.value;if(!em||!pw){loginError.textContent='Email and password are required.';loginError.style.display='block';return}loginSubmit.disabled=true;loginSubmit.textContent='Signing in...';loginError.style.display='none';fetch('/api/auth/login',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:em,password:pw})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error||'Sign in failed')});return r.json()}).then(function(){hasCredentials=true;hLM();lM('info','Signed in for '+currentEnvironment.toUpperCase());sM('live')}).catch(function(e){loginError.textContent=e.message;loginError.style.display='block'}).finally(function(){loginSubmit.disabled=false;loginSubmit.textContent='Sign in'})}window.addEventListener('message',function(ev){if(ev.source!==iframe.contentWindow)return;var d=ev.data;if(!d||typeof d!=='object'||!d.type||!d.messageId)return;lM('recv',d.type,d.payload);if(d.type==='ready')return;if(d.type==='resize'){var h=d.payload&&d.payload.height;if(typeof h==='number'&&h>0){iframe.style.height=h+'px';iframe.style.flex='none'}return}if(d.type==='toast'){var msg=d.payload&&d.payload.message;if(typeof msg==='string')lM('toast',msg);return}if(d.type==='navigate'){var p=d.payload&&d.payload.path;if(typeof p==='string')lM('nav',p);return}hR(d)});function hR(d){try{var rp=PM[d.type];if(rp&&cachedConfig&&cachedConfig.permissions.indexOf(rp)===-1)throw new Error('Permission denied: '+rp);cRL(d.type)}catch(e){lM('error',e.message);sTP({type:'response',messageId:d.messageId,payload:null,error:e.message});return}fetch('/api/bridge',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({type:d.type,payload:d.payload})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error||'Bridge call failed')});return r.json()}).then(function(res){lM('send','response',res);if(d.type==='entity_invoke'&&res.metadata&&res.metadata.cost>0){lM('cost','Credits: '+res.metadata.cost.toFixed(4));fC()}sTP({type:'response',messageId:d.messageId,payload:res})}).catch(function(e){lM('error',e.message);sTP({type:'response',messageId:d.messageId,payload:null,error:e.message})})}iframe.addEventListener('load',function(){if(!cachedConfig)return;sTP({type:'init',messageId:'init_0',payload:{archId:'dev_harness',permissions:cachedConfig.permissions,theme:gT(),currentPath:'/'}});lM('send','init')});function uMB(){modeBadge.textContent=currentMode.toUpperCase()+' \\u21C6';modeBadge.className='mode-badge '+(currentMode==='live'?'mode-live':'mode-mock');modeBadge.title='Click to switch to '+(currentMode==='live'?'Mock':'Live')+' mode'}function uTB(){themeBadge.textContent=currentTheme.toUpperCase();themeBadge.className='theme-badge theme-'+currentTheme;document.body.style.background=currentTheme==='light'?'#fff':'#0a0a0a';var tb=document.querySelector('.toolbar'),lg=document.querySelector('.logo'),ev=document.getElementById('env-selector'),ic=document.querySelectorAll('.btn-icon');if(currentTheme==='light'){if(tb){tb.style.background='#f5f5f5';tb.style.borderBottomColor='#e5e5e5'}if(lg)lg.style.color='#171717';if(ev){ev.style.background='#e5e5e5';ev.style.color='#171717';ev.style.borderColor='#d4d4d4'}ic.forEach(function(b){b.style.background='#e5e5e5';b.style.color='#171717';b.style.borderColor='#d4d4d4'})}else{if(tb){tb.style.background='#18181b';tb.style.borderBottomColor='#3f3f46'}if(lg)lg.style.color='#e4e4e7';if(ev){ev.style.background='#27272a';ev.style.color='#a1a1aa';ev.style.borderColor='#3f3f46'}ic.forEach(function(b){b.style.background='#27272a';b.style.color='#e4e4e7';b.style.borderColor='#3f3f46'})}}function sTP(m){iframe.contentWindow&&iframe.contentWindow.postMessage(m,'*')}function cRL(t){var l=RL[t];if(!l)return;var n=Date.now(),b=rb[t];if(!b||n-b.s>60000){rb[t]={c:1,s:n};return}if(b.c>=l.m)throw new Error('Rate limit exceeded for '+t);b.c++}function gT(){if(currentTheme==='light')return{mode:'light',colors:{primary:'#171717',secondary:'#e5e5e5',background:'#fff',surface:'#fafafa',text:'#0a0a0a',textSecondary:'#737373',border:'#e5e5e5',error:'#dc2626',warning:'#d97706',success:'#16a34a'},spacing:SP,fonts:FN};return{mode:'dark',colors:{primary:'#fff',secondary:'#1f1f1f',background:'#0a0a0a',surface:'#171717',text:'#fff',textSecondary:'#a6a6a6',border:'#2e2e2e',error:'#ef4444',warning:'#f59e0b',success:'#22c55e'},spacing:SP,fonts:FN}}function cPR(cb){fetch('/api/check-plugin').then(function(r){return r.json()}).then(function(d){cb(d.reachable)}).catch(function(){cb(true)})}function fC(){fetch('/api/credits').then(function(r){return r.json()}).then(function(d){if(d.balance!=null&&isFinite(d.balance))creditBalance.textContent='Credits: '+d.balance.toFixed(2)}).catch(function(){})}function lM(dir,type,payload){messageCount++;consoleCount.textContent=messageCount+' messages';var e=document.createElement('div');e.className='log-entry';var cls='log-info';if(dir==='error')cls='log-error';if(dir==='warn'||dir==='cost'||dir==='toast')cls='log-warn';var t='<span class="log-time">'+new Date().toLocaleTimeString()+'</span><span class="'+cls+'">['+dir.toUpperCase()+'] '+type+'</span>';if(payload&&typeof payload==='object')t+=' <span style="color:#6b7280">'+JSON.stringify(payload).substring(0,120)+'</span>';e.innerHTML=t;consoleBody.appendChild(e);consoleBody.scrollTop=consoleBody.scrollHeight}})();`;
484
+ const EMBEDDED_JS = `(function(){var iframe=document.getElementById('plugin-iframe'),consoleBody=document.getElementById('console-body'),consoleCount=document.getElementById('console-count'),consoleToggle=document.getElementById('console-toggle'),creditBalance=document.getElementById('credit-balance'),themeToggle=document.getElementById('theme-toggle'),reloadBtn=document.getElementById('reload-btn'),modeBadge=document.getElementById('mode-badge'),themeBadge=document.getElementById('theme-badge'),pluginStatus=document.getElementById('plugin-status'),loginModal=document.getElementById('login-modal'),loginEmail=document.getElementById('login-email'),loginPassword=document.getElementById('login-password'),loginError=document.getElementById('login-error'),loginSubmit=document.getElementById('login-submit'),loginCancel=document.getElementById('login-cancel'),envSelector=document.getElementById('env-selector'),loginTarget=document.getElementById('login-target');var messageCount=0,currentTheme='dark',currentMode='mock',currentEnvironment='staging',hasCredentials=false,cachedConfig=null;var PM={get_user:'user:profile:read',get_theme:'theme:read',entity_invoke:'entities:invoke',image_generate:'entities:image_generate',storage_read:'storage:sandbox',storage_write:'storage:sandbox',storage_list:'storage:sandbox',storage_delete:'storage:sandbox'};var RL={entity_invoke:{m:60},image_generate:{m:10},storage_write:{m:120},storage_read:{m:300},storage_list:{m:60},storage_delete:{m:60}};var rb={};var SF='-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',MF='"SFMono-Regular",Consolas,monospace',SP={xs:'4px',sm:'8px',md:'16px',lg:'24px',xl:'32px'},FN={body:SF,heading:SF,mono:MF};fetch('/api/config').then(function(r){return r.json()}).then(function(c){cachedConfig=c;currentTheme=c.mockTheme||'dark';currentMode=c.mode||'mock';currentEnvironment=c.environment||'staging';hasCredentials=c.hasCredentials||false;envSelector.value=currentEnvironment;uMB();uTB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}cPR(function(ok){if(ok){pluginStatus.classList.add('hidden');iframe.classList.remove('hidden');iframe.src=c.pluginUrl}else{pluginStatus.classList.add('error');pluginStatus.innerHTML='<p><strong>Plugin server not reachable</strong></p><p>Make sure your plugin dev server is running.</p>'}})});consoleToggle.addEventListener('click',function(){consoleBody.classList.toggle('open')});reloadBtn.addEventListener('click',function(){if(cachedConfig)iframe.src=cachedConfig.pluginUrl});themeToggle.addEventListener('click',function(){currentTheme=currentTheme==='dark'?'light':'dark';uTB();sTP({type:'theme_update',messageId:'t_'+Date.now(),payload:gT()})});modeBadge.addEventListener('click',function(){if(currentMode==='mock'){if(!hasCredentials){sLM();return}sM('live')}else sM('mock')});envSelector.addEventListener('change',function(){fetch('/api/environment',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({environment:envSelector.value})}).then(function(r){return r.json()}).then(function(d){currentEnvironment=d.environment;currentMode=d.mode;hasCredentials=d.hasCredentials;uMB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}else{creditBalance.style.display='none';creditBalance.textContent=''}lM('info','Environment: '+currentEnvironment.toUpperCase()+(hasCredentials?'':' (not authenticated)'))}).catch(function(e){lM('error',e.message)})});function sM(m){fetch('/api/mode',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({mode:m})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error)});return r.json()}).then(function(d){currentMode=d.mode;uMB();if(currentMode==='live'){creditBalance.style.display='inline';fC()}else{creditBalance.style.display='none';creditBalance.textContent=''}}).catch(function(e){lM('error',e.message)})}function sLM(){loginModal.style.display='flex';loginEmail.value='';loginPassword.value='';loginError.style.display='none';loginSubmit.disabled=false;loginSubmit.textContent='Sign in';loginTarget.textContent=currentEnvironment==='production'?'fias.io':'staging.fias.io';loginEmail.focus()}function hLM(){loginModal.style.display='none'}loginCancel.addEventListener('click',hLM);loginModal.addEventListener('click',function(e){if(e.target===loginModal)hLM()});loginEmail.addEventListener('keydown',function(e){if(e.key==='Enter')loginPassword.focus();if(e.key==='Escape')hLM()});loginPassword.addEventListener('keydown',function(e){if(e.key==='Enter')doLogin();if(e.key==='Escape')hLM()});loginSubmit.addEventListener('click',doLogin);function doLogin(){var em=loginEmail.value.trim(),pw=loginPassword.value;if(!em||!pw){loginError.textContent='Email and password are required.';loginError.style.display='block';return}loginSubmit.disabled=true;loginSubmit.textContent='Signing in...';loginError.style.display='none';fetch('/api/auth/login',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email:em,password:pw})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error||'Sign in failed')});return r.json()}).then(function(){hasCredentials=true;hLM();lM('info','Signed in for '+currentEnvironment.toUpperCase());sM('live')}).catch(function(e){loginError.textContent=e.message;loginError.style.display='block'}).finally(function(){loginSubmit.disabled=false;loginSubmit.textContent='Sign in'})}window.addEventListener('message',function(ev){if(ev.source!==iframe.contentWindow)return;var d=ev.data;if(!d||typeof d!=='object'||!d.type||!d.messageId)return;lM('recv',d.type,d.payload);if(d.type==='ready')return;if(d.type==='resize'){var h=d.payload&&d.payload.height;if(typeof h==='number'&&h>0){iframe.style.height=h+'px';iframe.style.flex='none'}return}if(d.type==='toast'){var msg=d.payload&&d.payload.message;if(typeof msg==='string')lM('toast',msg);return}if(d.type==='navigate'){var p=d.payload&&d.payload.path;if(typeof p==='string')lM('nav',p);return}hR(d)});function hR(d){try{var rp=PM[d.type];if(rp&&cachedConfig&&cachedConfig.permissions.indexOf(rp)===-1)throw new Error('Permission denied: '+rp);cRL(d.type)}catch(e){lM('error',e.message);sTP({type:'response',messageId:d.messageId,payload:null,error:e.message});return}if(d.type==='entity_invoke'&&d.payload&&d.payload.stream){hSR(d);return}fetch('/api/bridge',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({type:d.type,payload:d.payload})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error||'Bridge call failed')});return r.json()}).then(function(res){lM('send','response',res);if(d.type==='entity_invoke'&&res.metadata&&res.metadata.cost>0){lM('cost','Credits: '+res.metadata.cost.toFixed(4));fC()}sTP({type:'response',messageId:d.messageId,payload:res})}).catch(function(e){lM('error',e.message);sTP({type:'response',messageId:d.messageId,payload:null,error:e.message})})}function hSR(d){fetch('/api/bridge/stream',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({type:d.type,payload:d.payload})}).then(function(r){if(!r.ok)return r.json().then(function(e){throw new Error(e.error||'Streaming failed')});var ct=r.headers.get('content-type')||'';if(ct.indexOf('text/event-stream')===-1)return r.json().then(function(res){sTP({type:'response',messageId:d.messageId,payload:res})});var rd=r.body.getReader(),dc=new TextDecoder(),bf='',fp=null;function pump(){return rd.read().then(function(ch){if(ch.done){if(fp)sTP({type:'response',messageId:d.messageId,payload:fp});return}bf+=dc.decode(ch.value,{stream:true});var ls=bf.split('\\n');bf=ls.pop()||'';for(var i=0;i<ls.length;i++){var l=ls[i];if(l.indexOf('data: ')!==0)continue;try{var p=JSON.parse(l.slice(6));if(p.error)throw new Error(p.error);if(p.text)sTP({type:'stream_token',messageId:d.messageId,text:p.text});if(p.done){fp={output:p.output,metadata:p.metadata};if(p.metadata&&p.metadata.cost>0){lM('cost','Credits: '+p.metadata.cost.toFixed(4));fC()}}}catch(e){if(e instanceof SyntaxError)continue;throw e}}return pump()})}return pump()}).catch(function(e){lM('error',e.message);sTP({type:'response',messageId:d.messageId,payload:null,error:e.message})})}iframe.addEventListener('load',function(){if(!cachedConfig)return;sTP({type:'init',messageId:'init_0',payload:{archId:'dev_harness',permissions:cachedConfig.permissions,theme:gT(),currentPath:'/'}});lM('send','init')});function uMB(){modeBadge.textContent=currentMode.toUpperCase()+' \\u21C6';modeBadge.className='mode-badge '+(currentMode==='live'?'mode-live':'mode-mock');modeBadge.title='Click to switch to '+(currentMode==='live'?'Mock':'Live')+' mode'}function uTB(){themeBadge.textContent=currentTheme.toUpperCase();themeBadge.className='theme-badge theme-'+currentTheme;document.body.style.background=currentTheme==='light'?'#fff':'#0a0a0a';var tb=document.querySelector('.toolbar'),lg=document.querySelector('.logo'),ev=document.getElementById('env-selector'),ic=document.querySelectorAll('.btn-icon');if(currentTheme==='light'){if(tb){tb.style.background='#f5f5f5';tb.style.borderBottomColor='#e5e5e5'}if(lg)lg.style.color='#171717';if(ev){ev.style.background='#e5e5e5';ev.style.color='#171717';ev.style.borderColor='#d4d4d4'}ic.forEach(function(b){b.style.background='#e5e5e5';b.style.color='#171717';b.style.borderColor='#d4d4d4'})}else{if(tb){tb.style.background='#18181b';tb.style.borderBottomColor='#3f3f46'}if(lg)lg.style.color='#e4e4e7';if(ev){ev.style.background='#27272a';ev.style.color='#a1a1aa';ev.style.borderColor='#3f3f46'}ic.forEach(function(b){b.style.background='#27272a';b.style.color='#e4e4e7';b.style.borderColor='#3f3f46'})}}function sTP(m){iframe.contentWindow&&iframe.contentWindow.postMessage(m,'*')}function cRL(t){var l=RL[t];if(!l)return;var n=Date.now(),b=rb[t];if(!b||n-b.s>60000){rb[t]={c:1,s:n};return}if(b.c>=l.m)throw new Error('Rate limit exceeded for '+t);b.c++}function gT(){if(currentTheme==='light')return{mode:'light',colors:{primary:'#171717',secondary:'#e5e5e5',background:'#fff',surface:'#fafafa',text:'#0a0a0a',textSecondary:'#737373',border:'#e5e5e5',error:'#dc2626',warning:'#d97706',success:'#16a34a'},spacing:SP,fonts:FN};return{mode:'dark',colors:{primary:'#fff',secondary:'#1f1f1f',background:'#0a0a0a',surface:'#171717',text:'#fff',textSecondary:'#a6a6a6',border:'#2e2e2e',error:'#ef4444',warning:'#f59e0b',success:'#22c55e'},spacing:SP,fonts:FN}}function cPR(cb){fetch('/api/check-plugin').then(function(r){return r.json()}).then(function(d){cb(d.reachable)}).catch(function(){cb(true)})}function fC(){fetch('/api/credits').then(function(r){return r.json()}).then(function(d){if(d.balance!=null&&isFinite(d.balance))creditBalance.textContent='Credits: '+d.balance.toFixed(2)}).catch(function(){})}function lM(dir,type,payload){messageCount++;consoleCount.textContent=messageCount+' messages';var e=document.createElement('div');e.className='log-entry';var cls='log-info';if(dir==='error')cls='log-error';if(dir==='warn'||dir==='cost'||dir==='toast')cls='log-warn';var t='<span class="log-time">'+new Date().toLocaleTimeString()+'</span><span class="'+cls+'">['+dir.toUpperCase()+'] '+type+'</span>';if(payload&&typeof payload==='object')t+=' <span style="color:#6b7280">'+JSON.stringify(payload).substring(0,120)+'</span>';e.innerHTML=t;consoleBody.appendChild(e);consoleBody.scrollTop=consoleBody.scrollHeight}})();`;
434
485
  //# sourceMappingURL=harness-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
@@ -347,6 +347,12 @@
347
347
  return;
348
348
  }
349
349
 
350
+ // Streaming path for entity_invoke with stream: true
351
+ if (data.type === 'entity_invoke' && data.payload && data.payload.stream) {
352
+ handleStreamingRequest(data);
353
+ return;
354
+ }
355
+
350
356
  fetch('/api/bridge', {
351
357
  method: 'POST',
352
358
  headers: { 'Content-Type': 'application/json' },
@@ -389,6 +395,86 @@
389
395
  });
390
396
  }
391
397
 
398
+ function handleStreamingRequest(data) {
399
+ fetch('/api/bridge/stream', {
400
+ method: 'POST',
401
+ headers: { 'Content-Type': 'application/json' },
402
+ body: JSON.stringify({ type: data.type, payload: data.payload }),
403
+ })
404
+ .then(function (response) {
405
+ if (!response.ok) {
406
+ return response.json().then(function (err) {
407
+ throw new Error(err.error || 'Bridge streaming call failed');
408
+ });
409
+ }
410
+
411
+ var contentType = response.headers.get('content-type') || '';
412
+ if (contentType.indexOf('text/event-stream') === -1) {
413
+ // Fallback: not SSE, parse as JSON
414
+ return response.json().then(function (result) {
415
+ sendToPlugin({ type: 'response', messageId: data.messageId, payload: result });
416
+ });
417
+ }
418
+
419
+ // Parse SSE stream
420
+ var reader = response.body.getReader();
421
+ var decoder = new TextDecoder();
422
+ var buffer = '';
423
+ var finalPayload = null;
424
+
425
+ function pump() {
426
+ return reader.read().then(function (chunk) {
427
+ if (chunk.done) {
428
+ if (finalPayload) {
429
+ logMessage('send', 'response', finalPayload);
430
+ sendToPlugin({ type: 'response', messageId: data.messageId, payload: finalPayload });
431
+ }
432
+ return;
433
+ }
434
+
435
+ buffer += decoder.decode(chunk.value, { stream: true });
436
+ var lines = buffer.split('\n');
437
+ buffer = lines.pop() || '';
438
+
439
+ for (var i = 0; i < lines.length; i++) {
440
+ var line = lines[i];
441
+ if (line.indexOf('data: ') !== 0) continue;
442
+ try {
443
+ var parsed = JSON.parse(line.slice(6));
444
+ if (parsed.error) throw new Error(parsed.error);
445
+ if (parsed.text) {
446
+ sendToPlugin({ type: 'stream_token', messageId: data.messageId, text: parsed.text });
447
+ }
448
+ if (parsed.done) {
449
+ finalPayload = { output: parsed.output, metadata: parsed.metadata };
450
+ if (parsed.metadata && parsed.metadata.cost > 0) {
451
+ logMessage('cost', 'Credits used: ' + parsed.metadata.cost.toFixed(4));
452
+ fetchCredits();
453
+ }
454
+ }
455
+ } catch (e) {
456
+ if (e instanceof SyntaxError) continue;
457
+ throw e;
458
+ }
459
+ }
460
+
461
+ return pump();
462
+ });
463
+ }
464
+
465
+ return pump();
466
+ })
467
+ .catch(function (err) {
468
+ logMessage('error', err.message);
469
+ sendToPlugin({
470
+ type: 'response',
471
+ messageId: data.messageId,
472
+ payload: null,
473
+ error: err.message,
474
+ });
475
+ });
476
+ }
477
+
392
478
  // ────────────────────────────────────────────────────────────────
393
479
  // Iframe Init
394
480
  // ────────────────────────────────────────────────────────────────