@portel/photon 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -8
- package/dist/a2ui/mapper.d.ts +40 -0
- package/dist/a2ui/mapper.d.ts.map +1 -0
- package/dist/a2ui/mapper.js +286 -0
- package/dist/a2ui/mapper.js.map +1 -0
- package/dist/a2ui/types.d.ts +129 -0
- package/dist/a2ui/types.d.ts.map +1 -0
- package/dist/a2ui/types.js +20 -0
- package/dist/a2ui/types.js.map +1 -0
- package/dist/ag-ui/adapter.d.ts +9 -1
- package/dist/ag-ui/adapter.d.ts.map +1 -1
- package/dist/ag-ui/adapter.js +33 -16
- package/dist/ag-ui/adapter.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-daemon.d.ts +18 -0
- package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -0
- package/dist/auto-ui/beam/routes/api-daemon.js +118 -0
- package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -0
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +34 -34
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
- package/dist/auto-ui/bridge/renderers.js +371 -0
- package/dist/auto-ui/bridge/renderers.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +38 -1
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +19 -0
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam.bundle.js +757 -107
- package/dist/beam.bundle.js.map +4 -4
- package/dist/cli/commands/beam.d.ts.map +1 -1
- package/dist/cli/commands/beam.js +2 -0
- package/dist/cli/commands/beam.js.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +92 -3
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/host.d.ts.map +1 -1
- package/dist/cli/commands/host.js +9 -1
- package/dist/cli/commands/host.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +7 -3
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/maker.d.ts +8 -0
- package/dist/cli/commands/maker.d.ts.map +1 -1
- package/dist/cli/commands/maker.js +113 -46
- package/dist/cli/commands/maker.js.map +1 -1
- package/dist/cli/commands/marketplace.d.ts.map +1 -1
- package/dist/cli/commands/marketplace.js +7 -1
- package/dist/cli/commands/marketplace.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +10 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +215 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +33 -15
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/ps.d.ts +16 -0
- package/dist/cli/commands/ps.d.ts.map +1 -0
- package/dist/cli/commands/ps.js +267 -0
- package/dist/cli/commands/ps.js.map +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +7 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +14 -4
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +9 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/context-store.d.ts +4 -4
- package/dist/context-store.d.ts.map +1 -1
- package/dist/context-store.js +20 -17
- package/dist/context-store.js.map +1 -1
- package/dist/context.d.ts +5 -4
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +68 -14
- package/dist/context.js.map +1 -1
- package/dist/daemon/client.d.ts +60 -0
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +76 -0
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/execution-history-sqlite.d.ts +50 -0
- package/dist/daemon/execution-history-sqlite.d.ts.map +1 -0
- package/dist/daemon/execution-history-sqlite.js +165 -0
- package/dist/daemon/execution-history-sqlite.js.map +1 -0
- package/dist/daemon/execution-history.d.ts +78 -0
- package/dist/daemon/execution-history.d.ts.map +1 -0
- package/dist/daemon/execution-history.js +246 -0
- package/dist/daemon/execution-history.js.map +1 -0
- package/dist/daemon/hot-reload-state.d.ts +27 -0
- package/dist/daemon/hot-reload-state.d.ts.map +1 -0
- package/dist/daemon/hot-reload-state.js +48 -0
- package/dist/daemon/hot-reload-state.js.map +1 -0
- package/dist/daemon/protocol.d.ts +5 -1
- package/dist/daemon/protocol.d.ts.map +1 -1
- package/dist/daemon/protocol.js +13 -0
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/registry-keys.d.ts +88 -0
- package/dist/daemon/registry-keys.d.ts.map +1 -0
- package/dist/daemon/registry-keys.js +91 -0
- package/dist/daemon/registry-keys.js.map +1 -0
- package/dist/daemon/server.js +1521 -186
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/session-resolver.d.ts +28 -0
- package/dist/daemon/session-resolver.d.ts.map +1 -0
- package/dist/daemon/session-resolver.js +41 -0
- package/dist/daemon/session-resolver.js.map +1 -0
- package/dist/data-migration.js +20 -9
- package/dist/data-migration.js.map +1 -1
- package/dist/loader.d.ts +22 -8
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +214 -94
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +9 -5
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/namespace-migration.d.ts.map +1 -1
- package/dist/namespace-migration.js +28 -23
- package/dist/namespace-migration.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +57 -8
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/serv/auth/auth-store.d.ts +155 -0
- package/dist/serv/auth/auth-store.d.ts.map +1 -0
- package/dist/serv/auth/auth-store.js +240 -0
- package/dist/serv/auth/auth-store.js.map +1 -0
- package/dist/serv/auth/endpoints.d.ts +113 -0
- package/dist/serv/auth/endpoints.d.ts.map +1 -0
- package/dist/serv/auth/endpoints.js +1005 -0
- package/dist/serv/auth/endpoints.js.map +1 -0
- package/dist/serv/auth/http-adapter.d.ts +60 -0
- package/dist/serv/auth/http-adapter.d.ts.map +1 -0
- package/dist/serv/auth/http-adapter.js +235 -0
- package/dist/serv/auth/http-adapter.js.map +1 -0
- package/dist/serv/auth/jwt.d.ts +92 -6
- package/dist/serv/auth/jwt.d.ts.map +1 -1
- package/dist/serv/auth/jwt.js +226 -24
- package/dist/serv/auth/jwt.js.map +1 -1
- package/dist/serv/auth/oauth-sqlite-stores.d.ts +48 -0
- package/dist/serv/auth/oauth-sqlite-stores.d.ts.map +1 -0
- package/dist/serv/auth/oauth-sqlite-stores.js +212 -0
- package/dist/serv/auth/oauth-sqlite-stores.js.map +1 -0
- package/dist/serv/auth/sqlite-stores.d.ts +85 -0
- package/dist/serv/auth/sqlite-stores.d.ts.map +1 -0
- package/dist/serv/auth/sqlite-stores.js +446 -0
- package/dist/serv/auth/sqlite-stores.js.map +1 -0
- package/dist/serv/auth/well-known.d.ts +54 -1
- package/dist/serv/auth/well-known.d.ts.map +1 -1
- package/dist/serv/auth/well-known.js +166 -17
- package/dist/serv/auth/well-known.js.map +1 -1
- package/dist/serv/index.d.ts +45 -2
- package/dist/serv/index.d.ts.map +1 -1
- package/dist/serv/index.js +65 -1
- package/dist/serv/index.js.map +1 -1
- package/dist/serv/types/index.d.ts +80 -0
- package/dist/serv/types/index.d.ts.map +1 -1
- package/dist/serv/types/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +61 -6
- package/dist/server.js.map +1 -1
- package/dist/shared/announce-context.d.ts +51 -0
- package/dist/shared/announce-context.d.ts.map +1 -0
- package/dist/shared/announce-context.js +73 -0
- package/dist/shared/announce-context.js.map +1 -0
- package/dist/shared/audit-sqlite.d.ts +63 -0
- package/dist/shared/audit-sqlite.d.ts.map +1 -0
- package/dist/shared/audit-sqlite.js +187 -0
- package/dist/shared/audit-sqlite.js.map +1 -0
- package/dist/shared/audit.d.ts +25 -3
- package/dist/shared/audit.d.ts.map +1 -1
- package/dist/shared/audit.js +97 -3
- package/dist/shared/audit.js.map +1 -1
- package/dist/shared/error-handler.d.ts +10 -1
- package/dist/shared/error-handler.d.ts.map +1 -1
- package/dist/shared/error-handler.js +17 -2
- package/dist/shared/error-handler.js.map +1 -1
- package/dist/shared/security.d.ts +12 -0
- package/dist/shared/security.d.ts.map +1 -1
- package/dist/shared/security.js +80 -0
- package/dist/shared/security.js.map +1 -1
- package/dist/shared/sqlite-runtime.d.ts +46 -0
- package/dist/shared/sqlite-runtime.d.ts.map +1 -0
- package/dist/shared/sqlite-runtime.js +110 -0
- package/dist/shared/sqlite-runtime.js.map +1 -0
- package/dist/tasks/store.d.ts +1 -1
- package/dist/tasks/store.d.ts.map +1 -1
- package/dist/tasks/store.js +29 -15
- package/dist/tasks/store.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +26 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +31 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +3 -3
- package/dist/test-runner.js.map +1 -1
- package/dist/version-checker.d.ts.map +1 -1
- package/dist/version-checker.js +7 -14
- package/dist/version-checker.js.map +1 -1
- package/dist/version.d.ts +12 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +103 -1
- package/dist/version.js.map +1 -1
- package/package.json +6 -2
- package/templates/photon.template.ts +7 -13
|
@@ -404,6 +404,353 @@ export function generateRenderersScript() {
|
|
|
404
404
|
container.innerHTML = '<pre style="font-size:12px;line-height:1.5;color:' + colors.text + ';background:' + colors.bgAlt + ';padding:12px;border-radius:6px;overflow:auto;max-height:400px;margin:0">' + esc(text) + '</pre>';
|
|
405
405
|
};
|
|
406
406
|
|
|
407
|
+
// ─── A2UI v0.9 ───
|
|
408
|
+
// Renders Google A2UI v0.9 "Basic catalog" surfaces. Accepts either:
|
|
409
|
+
// (a) a v0.9 JSONL message array (createSurface/updateComponents/updateDataModel)
|
|
410
|
+
// (b) a raw method result, auto-mapped via the same heuristics as src/a2ui/mapper.ts
|
|
411
|
+
// Kept inline (no external runtime) so it stays consistent with the other
|
|
412
|
+
// @format renderers served from /api/photon-renderers.js.
|
|
413
|
+
renderers.a2ui = function(container, data) {
|
|
414
|
+
// ── 1. Normalize input to { components, dataModel } ──
|
|
415
|
+
var surface = a2uiExtractSurface(data) || a2uiMapResult(data);
|
|
416
|
+
var byId = {};
|
|
417
|
+
(surface.components || []).forEach(function(c) { byId[c.id] = c; });
|
|
418
|
+
if (!byId.root) {
|
|
419
|
+
container.innerHTML = '<pre style="color:' + colors.text + ';background:' + colors.bgAlt + ';padding:12px;border-radius:6px;margin:0">A2UI error: missing root component</pre>';
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
// ── 2. Render from root ──
|
|
423
|
+
var html = '<div class="a2ui-surface" style="color:' + colors.text + ';font-size:14px;line-height:1.5">'
|
|
424
|
+
+ a2uiRender('root', byId, surface.data, null)
|
|
425
|
+
+ '</div>';
|
|
426
|
+
container.innerHTML = html;
|
|
427
|
+
|
|
428
|
+
// ── 3. Local data-model snapshot. Starts as a clone of the data the
|
|
429
|
+
// server seeded the surface with, then absorbs every TextField edit so
|
|
430
|
+
// the snapshot the action carries reflects current user input.
|
|
431
|
+
var localData = a2uiCloneData(surface.data);
|
|
432
|
+
container.querySelectorAll('input[data-a2ui-input]').forEach(function(input) {
|
|
433
|
+
input.addEventListener('input', function() {
|
|
434
|
+
var ptr = input.getAttribute('data-a2ui-input') || '';
|
|
435
|
+
a2uiSetByPath(localData, ptr, input.value);
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
// ── 4. Button clicks dispatch a bubbling CustomEvent. The host (Beam
|
|
440
|
+
// result-viewer) catches it and routes to <photon>/<actionName>. If
|
|
441
|
+
// nothing handles it (preventDefault), fall back to a toast so the
|
|
442
|
+
// renderer is still useful in standalone iframes.
|
|
443
|
+
container.querySelectorAll('[data-a2ui-action]').forEach(function(btn) {
|
|
444
|
+
btn.addEventListener('click', function(ev) {
|
|
445
|
+
ev.preventDefault();
|
|
446
|
+
var name = btn.getAttribute('data-a2ui-action') || '';
|
|
447
|
+
var detail = { name: name, context: localData, surfaceId: surface.surfaceId || null };
|
|
448
|
+
var dispatched = container.dispatchEvent(new CustomEvent('a2ui:action', {
|
|
449
|
+
detail: detail,
|
|
450
|
+
bubbles: true,
|
|
451
|
+
composed: true,
|
|
452
|
+
cancelable: true
|
|
453
|
+
}));
|
|
454
|
+
if (dispatched) {
|
|
455
|
+
// No host caught it — show the toast so dev still sees the click
|
|
456
|
+
a2uiToast(container, 'A2UI action: ' + name);
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
// Cheap structured clone — covers what the mapper produces (plain objects,
|
|
463
|
+
// arrays, primitives). Avoids structuredClone() so we don't depend on a
|
|
464
|
+
// newer DOM API in iframe contexts that might not have it.
|
|
465
|
+
function a2uiCloneData(value) {
|
|
466
|
+
if (value == null || typeof value !== 'object') return value;
|
|
467
|
+
if (Array.isArray(value)) return value.map(a2uiCloneData);
|
|
468
|
+
var out = {};
|
|
469
|
+
for (var k in value) if (Object.prototype.hasOwnProperty.call(value, k)) out[k] = a2uiCloneData(value[k]);
|
|
470
|
+
return out;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// Mirror of looksLikeA2UIStream in src/a2ui/mapper.ts — keep the Beam
|
|
474
|
+
// renderer consistent with CLI/AG-UI. Requires: non-empty array whose
|
|
475
|
+
// elements all have (version:string) + exactly one wrapper key whose
|
|
476
|
+
// value is an object with a string surfaceId. Without this guard, row
|
|
477
|
+
// data that happens to include an updateDataModel column is silently
|
|
478
|
+
// treated as a pre-built A2UI stream and renders empty in Beam.
|
|
479
|
+
function a2uiLooksLikeStream(arr) {
|
|
480
|
+
if (!Array.isArray(arr) || arr.length === 0) return false;
|
|
481
|
+
var wrapperKeys = ['createSurface','updateComponents','updateDataModel','deleteSurface'];
|
|
482
|
+
for (var i = 0; i < arr.length; i++) {
|
|
483
|
+
var m = arr[i];
|
|
484
|
+
if (!m || typeof m !== 'object') return false;
|
|
485
|
+
if (typeof m.version !== 'string') return false;
|
|
486
|
+
var count = 0;
|
|
487
|
+
for (var k = 0; k < wrapperKeys.length; k++) {
|
|
488
|
+
var key = wrapperKeys[k];
|
|
489
|
+
if (!(key in m)) continue;
|
|
490
|
+
count++;
|
|
491
|
+
var wrapped = m[key];
|
|
492
|
+
if (!wrapped || typeof wrapped !== 'object' || Array.isArray(wrapped)) return false;
|
|
493
|
+
if (typeof wrapped.surfaceId !== 'string') return false;
|
|
494
|
+
}
|
|
495
|
+
if (count !== 1) return false;
|
|
496
|
+
}
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Extract {components, data} from a v0.9 JSONL message array if the caller
|
|
501
|
+
// passed one (e.g. the AG-UI CUSTOM event stream replayed as data).
|
|
502
|
+
function a2uiExtractSurface(data) {
|
|
503
|
+
if (!a2uiLooksLikeStream(data)) return null;
|
|
504
|
+
var components = null;
|
|
505
|
+
var dataModel = {};
|
|
506
|
+
var surfaceId = null;
|
|
507
|
+
for (var i = 0; i < data.length; i++) {
|
|
508
|
+
var m = data[i];
|
|
509
|
+
if (!m || typeof m !== 'object') continue;
|
|
510
|
+
if (m.createSurface && m.createSurface.surfaceId) {
|
|
511
|
+
surfaceId = m.createSurface.surfaceId;
|
|
512
|
+
}
|
|
513
|
+
if (m.updateComponents && m.updateComponents.components) {
|
|
514
|
+
components = m.updateComponents.components;
|
|
515
|
+
} else if (m.updateDataModel) {
|
|
516
|
+
var path = m.updateDataModel.path || '/';
|
|
517
|
+
if (path === '/' || path === '') {
|
|
518
|
+
dataModel = m.updateDataModel.value;
|
|
519
|
+
} else {
|
|
520
|
+
a2uiSetByPath(dataModel, path, m.updateDataModel.value);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return components ? { components: components, data: dataModel, surfaceId: surfaceId } : null;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// Client-side mapper — mirrors src/a2ui/mapper.ts heuristics. Kept in sync
|
|
528
|
+
// by intent; see tests/a2ui-mapper.test.ts for the contract.
|
|
529
|
+
function a2uiMapResult(result) {
|
|
530
|
+
if (result && typeof result === 'object' && result.__a2ui === true && Array.isArray(result.components)) {
|
|
531
|
+
return { components: result.components, data: result.data || {} };
|
|
532
|
+
}
|
|
533
|
+
if (result == null || result === '') {
|
|
534
|
+
return { components: [{id:'root', component:'Text', text:''}], data: { value: '' } };
|
|
535
|
+
}
|
|
536
|
+
if (typeof result !== 'object') {
|
|
537
|
+
return { components: [{id:'root', component:'Text', text: String(result)}], data: { value: String(result) } };
|
|
538
|
+
}
|
|
539
|
+
if (Array.isArray(result)) {
|
|
540
|
+
if (result.length === 0) {
|
|
541
|
+
return { components: [{id:'root', component:'Text', text:'(empty list)'}], data: { value:'(empty list)' } };
|
|
542
|
+
}
|
|
543
|
+
var first = result[0];
|
|
544
|
+
if (first == null || typeof first !== 'object' || Array.isArray(first)) {
|
|
545
|
+
var items = result.map(function(v, i) { return { label: String(v), index: i }; });
|
|
546
|
+
return {
|
|
547
|
+
components: [
|
|
548
|
+
{id:'root', component:'List', list:{template:{id:'rowCard'}, data:{path:'/items'}}},
|
|
549
|
+
{id:'rowCard', component:'Card', child:'rowText'},
|
|
550
|
+
{id:'rowText', component:'Text', text:{path:'label'}}
|
|
551
|
+
],
|
|
552
|
+
data: { items: items }
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
var keys = Object.keys(first);
|
|
556
|
+
var titleKey = ['title','name','label','subject'].filter(function(k){return keys.indexOf(k)>=0;})[0] || keys[0] || 'value';
|
|
557
|
+
return {
|
|
558
|
+
components: [
|
|
559
|
+
{id:'root', component:'List', list:{template:{id:'rowCard'}, data:{path:'/items'}}},
|
|
560
|
+
{id:'rowCard', component:'Card', child:'rowText'},
|
|
561
|
+
{id:'rowText', component:'Text', text:{path:titleKey}}
|
|
562
|
+
],
|
|
563
|
+
data: { items: result }
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
// Card-shaped: {title, description?, actions?}. Must mirror the server
|
|
567
|
+
// mapper's stricter rule (src/a2ui/mapper.ts): the object's keys have to
|
|
568
|
+
// be a subset of {title, description, actions}. Otherwise a result with
|
|
569
|
+
// a title plus non-card fields would render as a Card on the Beam
|
|
570
|
+
// preview while CLI/AG-UI render a key/value column, and the non-title
|
|
571
|
+
// fields would silently disappear in Beam.
|
|
572
|
+
var cardKeys = ['title','description','actions'];
|
|
573
|
+
var isCardShape = typeof result.title === 'string'
|
|
574
|
+
&& (result.actions === undefined || Array.isArray(result.actions))
|
|
575
|
+
&& Object.keys(result).every(function(k) { return cardKeys.indexOf(k) !== -1; });
|
|
576
|
+
if (isCardShape) {
|
|
577
|
+
var contentIds = ['cardTitle'];
|
|
578
|
+
var cardComponents = [
|
|
579
|
+
{id:'root', component:'Card', child:'cardBody'},
|
|
580
|
+
{id:'cardTitle', component:'Text', text:{path:'/title'}, variant:'h2'}
|
|
581
|
+
];
|
|
582
|
+
if (result.description) {
|
|
583
|
+
cardComponents.push({id:'cardDesc', component:'Text', text:{path:'/description'}});
|
|
584
|
+
contentIds.push('cardDesc');
|
|
585
|
+
}
|
|
586
|
+
(result.actions || []).forEach(function(a, i) {
|
|
587
|
+
var btnId = 'cardBtn' + i;
|
|
588
|
+
cardComponents.push({id: btnId, component:'Button', text: a.label, variant: i===0 ? 'primary' : 'borderless', action: {event:{name: a.name || a.label}}});
|
|
589
|
+
contentIds.push(btnId);
|
|
590
|
+
});
|
|
591
|
+
cardComponents.push({id:'cardBody', component:'Column', children: contentIds});
|
|
592
|
+
return { components: cardComponents, data: result };
|
|
593
|
+
}
|
|
594
|
+
// Plain object → Column of markdown-style key rows
|
|
595
|
+
var objKeys = Object.keys(result);
|
|
596
|
+
if (objKeys.length === 0) {
|
|
597
|
+
return { components: [{id:'root', component:'Text', text:'(empty object)'}], data: { value:'(empty object)' } };
|
|
598
|
+
}
|
|
599
|
+
var childIds = [];
|
|
600
|
+
var objComponents = [];
|
|
601
|
+
objKeys.forEach(function(k, i) {
|
|
602
|
+
var rowId = 'row' + i;
|
|
603
|
+
objComponents.push({id: rowId, component:'Text', text: {call:'formatString', args:{value:'**'+k+':** \${/'+k+'}'}}});
|
|
604
|
+
childIds.push(rowId);
|
|
605
|
+
});
|
|
606
|
+
objComponents.unshift({id:'root', component:'Column', children: childIds});
|
|
607
|
+
return { components: objComponents, data: result };
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// JSON Pointer (RFC 6901) resolve, with a "relative" fallback used inside
|
|
611
|
+
// List template scopes. Leading '/' ⇒ absolute; anything else ⇒ resolved
|
|
612
|
+
// against the current scope (current list item).
|
|
613
|
+
function a2uiResolvePath(dataModel, ptr, scope) {
|
|
614
|
+
if (!ptr && ptr !== '') return undefined;
|
|
615
|
+
var absolute = typeof ptr === 'string' && ptr.indexOf('/') === 0;
|
|
616
|
+
var parts = absolute ? ptr.slice(1).split('/') : String(ptr).split('/');
|
|
617
|
+
var cur = absolute ? dataModel : (scope != null ? scope : dataModel);
|
|
618
|
+
for (var i = 0; i < parts.length; i++) {
|
|
619
|
+
var key = parts[i];
|
|
620
|
+
if (key === '') continue;
|
|
621
|
+
if (cur == null) return undefined;
|
|
622
|
+
// RFC 6901 escape unescape
|
|
623
|
+
key = key.replace(/~1/g, '/').replace(/~0/g, '~');
|
|
624
|
+
cur = cur[key];
|
|
625
|
+
}
|
|
626
|
+
return cur;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
function a2uiSetByPath(root, ptr, value) {
|
|
630
|
+
var parts = ptr.replace(/^\\//,'').split('/').filter(Boolean);
|
|
631
|
+
if (parts.length === 0) return;
|
|
632
|
+
var cur = root;
|
|
633
|
+
for (var i = 0; i < parts.length - 1; i++) {
|
|
634
|
+
// RFC 6901: decode ~1 -> "/" and ~0 -> "~" (in that order, ~1 first).
|
|
635
|
+
// a2uiResolvePath decodes these — the write path must match or keys
|
|
636
|
+
// with slashes in their name land under the wrong property.
|
|
637
|
+
var k = parts[i].replace(/~1/g, '/').replace(/~0/g, '~');
|
|
638
|
+
if (typeof cur[k] !== 'object' || cur[k] == null) cur[k] = {};
|
|
639
|
+
cur = cur[k];
|
|
640
|
+
}
|
|
641
|
+
var last = parts[parts.length - 1].replace(/~1/g, '/').replace(/~0/g, '~');
|
|
642
|
+
cur[last] = value;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
// DynamicString / DynamicNumber / DynamicBoolean resolver: literal | {path} | {call: formatString, ...}
|
|
646
|
+
function a2uiResolveDynamic(v, dataModel, scope) {
|
|
647
|
+
if (v == null) return '';
|
|
648
|
+
if (typeof v !== 'object') return v;
|
|
649
|
+
if ('path' in v) return a2uiResolvePath(dataModel, v.path, scope);
|
|
650
|
+
if ('call' in v && v.call === 'formatString') {
|
|
651
|
+
var tpl = String((v.args && v.args.value) || '');
|
|
652
|
+
return tpl.replace(/\\\$\\\{([^}]+)\\\}/g, function(_, p) {
|
|
653
|
+
var val = a2uiResolvePath(dataModel, p, scope);
|
|
654
|
+
return val == null ? '' : String(val);
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
return '';
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Minimal markdown: **bold**, *italic*, \`code\` — safe because esc() ran first.
|
|
661
|
+
function a2uiLightMarkdown(str) {
|
|
662
|
+
return String(str)
|
|
663
|
+
.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>')
|
|
664
|
+
.replace(/\\*([^*]+)\\*/g, '<em>$1</em>')
|
|
665
|
+
.replace(/\`([^\`]+)\`/g, '<code style="background:' + colors.bgAlt + ';padding:1px 4px;border-radius:3px;font-size:12px">$1</code>');
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
// Render a component by id. Recursive.
|
|
669
|
+
function a2uiRender(id, byId, dataModel, scope) {
|
|
670
|
+
var c = byId[id];
|
|
671
|
+
if (!c) return '<span style="color:' + colors.textMuted + ';font-size:12px">[missing: ' + esc(String(id)) + ']</span>';
|
|
672
|
+
var kind = c.component;
|
|
673
|
+
switch (kind) {
|
|
674
|
+
case 'Text': {
|
|
675
|
+
var text = a2uiResolveDynamic(c.text, dataModel, scope);
|
|
676
|
+
var safe = esc(String(text == null ? '' : text));
|
|
677
|
+
var rendered = a2uiLightMarkdown(safe);
|
|
678
|
+
var v = c.variant || '';
|
|
679
|
+
if (v === 'h1') return '<h1 style="font-size:22px;font-weight:700;margin:0 0 8px;color:' + colors.text + '">' + rendered + '</h1>';
|
|
680
|
+
if (v === 'h2') return '<h2 style="font-size:18px;font-weight:600;margin:0 0 6px;color:' + colors.text + '">' + rendered + '</h2>';
|
|
681
|
+
if (v === 'h3') return '<h3 style="font-size:15px;font-weight:600;margin:0 0 4px;color:' + colors.text + '">' + rendered + '</h3>';
|
|
682
|
+
if (v === 'caption') return '<span style="font-size:12px;color:' + colors.textMuted + '">' + rendered + '</span>';
|
|
683
|
+
return '<div style="margin:2px 0">' + rendered + '</div>';
|
|
684
|
+
}
|
|
685
|
+
case 'Column': {
|
|
686
|
+
var colKids = (c.children || []).map(function(k) { return a2uiRender(k, byId, dataModel, scope); }).join('');
|
|
687
|
+
return '<div style="display:flex;flex-direction:column;gap:8px">' + colKids + '</div>';
|
|
688
|
+
}
|
|
689
|
+
case 'Row': {
|
|
690
|
+
var rowKids = (c.children || []).map(function(k) { return a2uiRender(k, byId, dataModel, scope); }).join('');
|
|
691
|
+
return '<div style="display:flex;flex-direction:row;gap:8px;align-items:center">' + rowKids + '</div>';
|
|
692
|
+
}
|
|
693
|
+
case 'Card': {
|
|
694
|
+
var inner = c.child ? a2uiRender(c.child, byId, dataModel, scope) : '';
|
|
695
|
+
return '<div style="border:1px solid ' + colors.border + ';border-radius:8px;padding:12px;background:' + colors.bg + '">' + inner + '</div>';
|
|
696
|
+
}
|
|
697
|
+
case 'Divider': {
|
|
698
|
+
return '<hr style="border:0;border-top:1px solid ' + colors.border + ';margin:8px 0" />';
|
|
699
|
+
}
|
|
700
|
+
case 'Image': {
|
|
701
|
+
var url = a2uiResolveDynamic(c.url, dataModel, scope);
|
|
702
|
+
var alt = a2uiResolveDynamic(c.alt, dataModel, scope);
|
|
703
|
+
return '<img src="' + esc(String(url || '')) + '" alt="' + esc(String(alt || '')) + '" style="max-width:100%;border-radius:6px" />';
|
|
704
|
+
}
|
|
705
|
+
case 'List': {
|
|
706
|
+
var list = c.list || {};
|
|
707
|
+
var tplId = list.template && list.template.id;
|
|
708
|
+
var pathObj = list.data && list.data.path ? list.data.path : '';
|
|
709
|
+
var items = a2uiResolvePath(dataModel, pathObj, scope);
|
|
710
|
+
if (!tplId || !Array.isArray(items)) return '';
|
|
711
|
+
return '<div style="display:flex;flex-direction:column;gap:8px">' +
|
|
712
|
+
items.map(function(item, i) {
|
|
713
|
+
return '<div data-a2ui-list-index="' + i + '">' + a2uiRender(tplId, byId, dataModel, item) + '</div>';
|
|
714
|
+
}).join('') +
|
|
715
|
+
'</div>';
|
|
716
|
+
}
|
|
717
|
+
case 'Button': {
|
|
718
|
+
var label = a2uiResolveDynamic(c.text, dataModel, scope);
|
|
719
|
+
var variant = c.variant || 'primary';
|
|
720
|
+
var actionName = (c.action && c.action.event && c.action.event.name) ||
|
|
721
|
+
(c.action && c.action.functionCall && c.action.functionCall.call) || '';
|
|
722
|
+
var style = variant === 'primary'
|
|
723
|
+
? 'background:' + colors.accent + ';color:#fff;border:0;padding:8px 14px;border-radius:6px;font-weight:500;cursor:pointer'
|
|
724
|
+
: 'background:transparent;color:' + colors.accent + ';border:0;padding:8px 14px;border-radius:6px;font-weight:500;cursor:pointer';
|
|
725
|
+
return '<button data-a2ui-action="' + esc(String(actionName)) + '" style="' + style + '">' + esc(String(label || '')) + '</button>';
|
|
726
|
+
}
|
|
727
|
+
case 'TextField': {
|
|
728
|
+
var fieldLabel = a2uiResolveDynamic(c.label, dataModel, scope);
|
|
729
|
+
var valuePath = c.value && c.value.path;
|
|
730
|
+
var val = valuePath ? a2uiResolvePath(dataModel, valuePath, scope) : '';
|
|
731
|
+
// data-a2ui-input carries the JSON Pointer to write user edits back
|
|
732
|
+
// into the local data-model snapshot so the next button click ships
|
|
733
|
+
// current input values in its action context.
|
|
734
|
+
var inputAttr = valuePath ? ' data-a2ui-input="' + esc(String(valuePath)) + '"' : '';
|
|
735
|
+
return '<label style="display:flex;flex-direction:column;gap:4px;font-size:13px">' +
|
|
736
|
+
(fieldLabel ? '<span style="color:' + colors.textMuted + '">' + esc(String(fieldLabel)) + '</span>' : '') +
|
|
737
|
+
'<input type="text" value="' + esc(String(val == null ? '' : val)) + '"' + inputAttr + ' style="padding:8px;border:1px solid ' + colors.border + ';border-radius:6px;background:' + colors.bg + ';color:' + colors.text + '" />' +
|
|
738
|
+
'</label>';
|
|
739
|
+
}
|
|
740
|
+
default: {
|
|
741
|
+
return '<div style="font-size:12px;color:' + colors.textMuted + ';padding:8px;border:1px dashed ' + colors.border + ';border-radius:6px">[A2UI: unsupported \\u201C' + esc(String(kind)) + '\\u201D component in Basic catalog]</div>';
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
function a2uiToast(container, message) {
|
|
747
|
+
var el = document.createElement('div');
|
|
748
|
+
el.textContent = message;
|
|
749
|
+
el.style.cssText = 'position:fixed;bottom:16px;right:16px;background:' + colors.accent + ';color:#fff;padding:10px 14px;border-radius:8px;font-size:13px;z-index:9999;box-shadow:0 4px 12px rgba(0,0,0,0.15)';
|
|
750
|
+
document.body.appendChild(el);
|
|
751
|
+
setTimeout(function() { el.remove(); }, 2500);
|
|
752
|
+
}
|
|
753
|
+
|
|
407
754
|
// ─── Code (syntax-highlighted) ───
|
|
408
755
|
renderers.code = function(container, data) {
|
|
409
756
|
var text = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
@@ -2078,6 +2425,30 @@ export const FORMAT_CATALOG = {
|
|
|
2078
2425
|
data: '{ title?, description?, icon? }',
|
|
2079
2426
|
example: { title: 'No results', description: 'Try a different query', icon: '🔍' },
|
|
2080
2427
|
},
|
|
2428
|
+
// ── Declarative UI (A2UI v0.9 draft) ──
|
|
2429
|
+
a2ui: {
|
|
2430
|
+
data: 'Array<A2UIMessage> | { __a2ui: true, components, data }',
|
|
2431
|
+
example: [
|
|
2432
|
+
{
|
|
2433
|
+
version: 'v0.9',
|
|
2434
|
+
createSurface: {
|
|
2435
|
+
surfaceId: 's-1',
|
|
2436
|
+
catalogId: 'https://a2ui.org/specification/v0_9/basic_catalog.json',
|
|
2437
|
+
},
|
|
2438
|
+
},
|
|
2439
|
+
{
|
|
2440
|
+
version: 'v0.9',
|
|
2441
|
+
updateComponents: {
|
|
2442
|
+
surfaceId: 's-1',
|
|
2443
|
+
components: [{ id: 'root', component: 'Text', text: 'Hello' }],
|
|
2444
|
+
},
|
|
2445
|
+
},
|
|
2446
|
+
{
|
|
2447
|
+
version: 'v0.9',
|
|
2448
|
+
updateDataModel: { surfaceId: 's-1', path: '/', value: {} },
|
|
2449
|
+
},
|
|
2450
|
+
],
|
|
2451
|
+
},
|
|
2081
2452
|
};
|
|
2082
2453
|
/** Flat list of supported format names */
|
|
2083
2454
|
export const SUPPORTED_FORMATS = Object.keys(FORMAT_CATALOG);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../src/auto-ui/bridge/renderers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../src/auto-ui/bridge/renderers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,UAAU,uBAAuB;IACrC,iEAAiE;IACjE,6DAA6D;IAC7D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAinEH,CAAC;AACP,CAAC;AAcD,MAAM,CAAC,MAAM,cAAc,GAA+B;IACxD,qBAAqB;IACrB,KAAK,EAAE;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;YAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;SAC5B;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,6CAA6C;QACnD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;KACzE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;KAClE;IACD,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAChG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;IACzE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;IAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,+BAA+B,EAAE;IACjF,IAAI,EAAE;QACJ,IAAI,EAAE,8BAA8B;QACpC,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;KAC/D;IACD,MAAM,EAAE;QACN,IAAI,EAAE,oCAAoC;QAC1C,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;KACjE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,sCAAsC;QAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;KAC1D;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC1C;IACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE;IAE7E,eAAe;IACf,WAAW,EAAE;QACX,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;YAChC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;SACjC;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;YACpC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;SAC/B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;SAChC;KACF;IACD,WAAW,EAAE;QACX,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE;YACP,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;YAClC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;SAChC;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;YAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;SAC5B;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE;YACP,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;SAC7B;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;YAC/B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;SAC/B;KACF;IACD,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAE9F,0BAA0B;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,kDAAkD;QACxD,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE;YAChD,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;SAC/C;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;YACvC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;SACxC;KACF;IAED,yBAAyB;IACzB,QAAQ,EAAE;QACR,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC1C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;SACzC;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE;YACtC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;SACvC;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,+CAA+C;QACrD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;YACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;SAChC;KACF;IAED,wBAAwB;IACxB,YAAY,EAAE;QACZ,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YACnD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;SAClC;KACF;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;KAC/E;IACD,OAAO,EAAE;QACP,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;KAC5F;IACD,KAAK,EAAE;QACL,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE;KACtD;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,oCAAoC;QAC1C,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE;KAClE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,mCAAmC;QACzC,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;KAChF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,0CAA0C;QAChD,OAAO,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE;KACpE;IAED,cAAc;IACd,KAAK,EAAE;QACL,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,GAAG,EAAE,YAAY,EAAE;KACrE;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,CAAC;KACtF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;KACpE;IACD,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,qBAAqB,EAAE;IACpE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,EAAE;IAEpF,mBAAmB;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;KAC5E;IACD,UAAU,EAAE;QACV,IAAI,EAAE,8BAA8B;QACpC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;YACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;SAClD;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,2CAA2C;QACjD,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KACnD;IACD,GAAG,EAAE;QACH,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;KACxE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,sEAAsE;QAC5E,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;gBAC/C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;aAC7B;SACF;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,+CAA+C;QACrD,OAAO,EAAE;YACP,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACV;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,gCAAgC;QACtC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE;YACvC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE;SACxC;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,8DAA8D;QACpE,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;gBACzB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;aACzB;YACD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;SAChC;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;KACpF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,6CAA6C;QACnD,OAAO,EAAE;YACP,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;SACrC;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;KACtF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE;KACnF;IAED,yCAAyC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,yDAAyD;QAC/D,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE;oBACb,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,wDAAwD;iBACpE;aACF;YACD;gBACE,OAAO,EAAE,MAAM;gBACf,gBAAgB,EAAE;oBAChB,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iBAC/D;aACF;YACD;gBACE,OAAO,EAAE,MAAM;gBACf,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;aAC5D;SACF;KACF;CACF,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAa,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../src/auto-ui/streamable-http-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../src/auto-ui/streamable-http-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAoB5D,OAAO,KAAK,EAOV,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAoVpB,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAu6GD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,WAAW,EAAE,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACpE,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACxB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,YAAY,CAAC,EAAE,CACb,UAAU,EAAE,MAAM,KACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,cAAc,CAAC,EAAE,CACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE;QAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC;IACjG,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE;QACpB,oBAAoB,EAAE,CACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,KACnB,IAAI,CAAC;QACV,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;KACjD,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAiOlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,UAAQ,GACf,IAAI,CAqCN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEtF;AAUD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAUvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAkBT;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAmCrE"}
|
|
@@ -22,6 +22,12 @@ import { join, dirname, extname, resolve, normalize } from 'path';
|
|
|
22
22
|
import { homedir } from 'os';
|
|
23
23
|
import { PHOTON_VERSION } from '../version.js';
|
|
24
24
|
import { formatToolError } from '../shared/error-handler.js';
|
|
25
|
+
import { SimpleRateLimiter } from '../shared/security.js';
|
|
26
|
+
// Default rate limit: 60 requests/min per source IP. Override via
|
|
27
|
+
// PHOTON_MCP_RATE_LIMIT (count) and PHOTON_MCP_RATE_WINDOW_MS (window).
|
|
28
|
+
const MCP_RATE_LIMIT = Math.max(1, parseInt(process.env.PHOTON_MCP_RATE_LIMIT || '60', 10) || 60);
|
|
29
|
+
const MCP_RATE_WINDOW_MS = Math.max(1_000, parseInt(process.env.PHOTON_MCP_RATE_WINDOW_MS || '60000', 10) || 60_000);
|
|
30
|
+
const mcpRateLimiter = new SimpleRateLimiter(MCP_RATE_LIMIT, MCP_RATE_WINDOW_MS);
|
|
25
31
|
import { AGUIEventType } from '../ag-ui/types.js';
|
|
26
32
|
import { proxyExternalAgent, createAGUIOutputHandler } from '../ag-ui/adapter.js';
|
|
27
33
|
import { buildToolMetadataExtensions } from './types.js';
|
|
@@ -576,7 +582,16 @@ const handlers = {
|
|
|
576
582
|
});
|
|
577
583
|
return { jsonrpc: '2.0', id: req.id, result: { success: false } };
|
|
578
584
|
}
|
|
579
|
-
|
|
585
|
+
// Look up the method's declared @format so the adapter can emit A2UI
|
|
586
|
+
// messages as CUSTOM events when format === 'a2ui'. ctx.photons is the
|
|
587
|
+
// same registry used to resolve UI metadata elsewhere in this transport.
|
|
588
|
+
const aguiPhotonInfo = ctx.photons?.find((p) => p.name === photonName);
|
|
589
|
+
const aguiMethodInfo = aguiPhotonInfo?.configured
|
|
590
|
+
? aguiPhotonInfo.methods?.find((m) => m.name === methodName)
|
|
591
|
+
: undefined;
|
|
592
|
+
const agui = createAGUIOutputHandler(photonName, methodName, runId, broadcast, {
|
|
593
|
+
outputFormat: aguiMethodInfo?.outputFormat,
|
|
594
|
+
});
|
|
580
595
|
try {
|
|
581
596
|
// Build args from input messages (last user message content) or forwarded props
|
|
582
597
|
const args = params.input.forwardedProps ||
|
|
@@ -783,6 +798,10 @@ const handlers = {
|
|
|
783
798
|
'x-photon-internal': photon.internal,
|
|
784
799
|
'x-photon-stateful': photon.stateful || false,
|
|
785
800
|
'x-photon-has-settings': photon.hasSettings || false,
|
|
801
|
+
// Constructor params for the Beam Settings → Setup tab. Empty
|
|
802
|
+
// array (or missing) means the photon takes no env-injected
|
|
803
|
+
// setup. Server already masks secret-named values.
|
|
804
|
+
'x-photon-required-params': photon.requiredParams || [],
|
|
786
805
|
'x-photon-short-name': photon.shortName,
|
|
787
806
|
'x-photon-namespace': photon.namespace,
|
|
788
807
|
'x-photon-qualified-name': photon.qualifiedName,
|
|
@@ -3297,6 +3316,24 @@ export async function handleStreamableHTTP(req, res, options) {
|
|
|
3297
3316
|
res.end();
|
|
3298
3317
|
return true;
|
|
3299
3318
|
}
|
|
3319
|
+
// Default rate limit: per source IP, before any session or auth work.
|
|
3320
|
+
const clientKey = req.socket?.remoteAddress || 'unknown';
|
|
3321
|
+
if (!mcpRateLimiter.isAllowed(clientKey)) {
|
|
3322
|
+
const retryAfter = Math.ceil(MCP_RATE_WINDOW_MS / 1000);
|
|
3323
|
+
res.writeHead(429, {
|
|
3324
|
+
'Content-Type': 'application/json',
|
|
3325
|
+
'Retry-After': String(retryAfter),
|
|
3326
|
+
});
|
|
3327
|
+
res.end(JSON.stringify({
|
|
3328
|
+
jsonrpc: '2.0',
|
|
3329
|
+
error: {
|
|
3330
|
+
code: -32000,
|
|
3331
|
+
message: 'Too many requests',
|
|
3332
|
+
data: { limit: MCP_RATE_LIMIT, windowMs: MCP_RATE_WINDOW_MS },
|
|
3333
|
+
},
|
|
3334
|
+
}));
|
|
3335
|
+
return true;
|
|
3336
|
+
}
|
|
3300
3337
|
// MCP OAuth: extract token if present (used for per-photon auth checks at tool call time)
|
|
3301
3338
|
// Accept token from Authorization header (POST) or query param (SSE GET — EventSource can't set headers)
|
|
3302
3339
|
const queryToken = url.searchParams.get('token');
|