@xxmachina/components 19.36.0 → 19.37.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.
@@ -12,7 +12,7 @@ class WeeklyHeaderMolecule {
12
12
  <span>{{ day }}</span>
13
13
  </div>
14
14
  }
15
- `, isInline: true, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-4TTrvyry: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-4TTrvyry: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-4TTrvyry)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] });
15
+ `, isInline: true, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-yV9dQB5i: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-yV9dQB5i: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-yV9dQB5i)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] });
16
16
  }
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: WeeklyHeaderMolecule, decorators: [{
18
18
  type: Component,
@@ -22,7 +22,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
22
22
  <span>{{ day }}</span>
23
23
  </div>
24
24
  }
25
- `, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-4TTrvyry: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-4TTrvyry: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-4TTrvyry)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] }]
25
+ `, styles: [":host{display:block;--primary-color: #404040;--primary-color-SCOPED-IN-yV9dQB5i: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-yV9dQB5i: var(--secondary-color)}:host{display:grid;width:100%;grid-template-columns:repeat(7,1fr);background-color:var(--primary-color-SCOPED-IN-yV9dQB5i)}:host .day-container{display:flex;justify-content:center;align-items:center;color:#fff;font-weight:700;width:calc(hvar(--width) / 7)}\n"] }]
26
26
  }], ctorParameters: () => [] });
27
27
 
28
28
  /**
@@ -56,7 +56,7 @@ class CalendarSectionOrganism {
56
56
  }
57
57
  }
58
58
  </div>
59
- `, isInline: true, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-TJYXZt4o: var(--row);--row-num: 0;--row-num-SCOPED-IN-TJYXZt4o: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-TJYXZt4o: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-TJYXZt4o: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-TJYXZt4o: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-TJYXZt4o);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-TJYXZt4o),var(--row-SCOPED-IN-TJYXZt4o));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-TJYXZt4o)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-TJYXZt4o);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"], dependencies: [{ kind: "component", type: DailyCellMolecule, selector: "molecules-daily-cell", inputs: ["date", "schedules", "displayDate", "noSchedulesText", "toolTipText", "marked", "markingColor"] }, { kind: "component", type: WeeklyHeaderMolecule, selector: "molecules-weekly-header" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
+ `, isInline: true, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-rMBHkIwv: var(--row);--row-num: 0;--row-num-SCOPED-IN-rMBHkIwv: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-rMBHkIwv: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-rMBHkIwv: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-rMBHkIwv: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-rMBHkIwv);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-rMBHkIwv),var(--row-SCOPED-IN-rMBHkIwv));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-rMBHkIwv)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-rMBHkIwv);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"], dependencies: [{ kind: "component", type: DailyCellMolecule, selector: "molecules-daily-cell", inputs: ["date", "schedules", "displayDate", "noSchedulesText", "toolTipText", "marked", "markingColor"] }, { kind: "component", type: WeeklyHeaderMolecule, selector: "molecules-weekly-header" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: CalendarSectionOrganism, decorators: [{
62
62
  type: Component,
@@ -90,7 +90,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
90
90
  }
91
91
  }
92
92
  </div>
93
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-TJYXZt4o: var(--row);--row-num: 0;--row-num-SCOPED-IN-TJYXZt4o: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-TJYXZt4o: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-TJYXZt4o: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-TJYXZt4o: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-TJYXZt4o);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-TJYXZt4o),var(--row-SCOPED-IN-TJYXZt4o));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-TJYXZt4o)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-TJYXZt4o);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"] }]
93
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--row: 80px;--row-SCOPED-IN-rMBHkIwv: var(--row);--row-num: 0;--row-num-SCOPED-IN-rMBHkIwv: var(--row-num);--border-color: #9E9E9E;--border-color-SCOPED-IN-rMBHkIwv: var(--border-color);--primary-color: #404040;--primary-color-SCOPED-IN-rMBHkIwv: var(--primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-rMBHkIwv: var(--secondary-color)}:host{width:100%;height:auto}:host .calendar.header molecules-weekly-header{--height: 32px}:host .calendar.contents{display:grid;width:var(--width);border:1px solid var(--border-color-SCOPED-IN-rMBHkIwv);grid-gap:1px;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--row-num-SCOPED-IN-rMBHkIwv),var(--row-SCOPED-IN-rMBHkIwv));box-sizing:border-box;background-color:var(--border-color-SCOPED-IN-rMBHkIwv)}:host .calendar.contents molecules-daily-cell{--width: calc((var(--width) - 8px) / 7);--height: var(--row-SCOPED-IN-rMBHkIwv);background-color:#fff}:host .calendar.description{display:flex;justify-content:flex-end;width:var(--width);height:32px;padding-right:16px}:host .calendar.description .description.container{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;font-size:12px}:host .calendar.description .description.container .circle{display:flex;width:20px;height:20px;justify-content:center;align-items:center;border-radius:50%;color:#fff;background:#00f}:host .calendar.description .description.container label{padding-left:4px;padding-right:8px}\n"] }]
94
94
  }], propDecorators: { label: [{
95
95
  type: Input
96
96
  }], displayDays: [{
@@ -353,18 +353,56 @@ class FileLinksAddon {
353
353
  * 変換ルール:
354
354
  * http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/__content__/path
355
355
  * http://127.0.0.1:3000/api → https://{serverUUID}--3000.proxy.machina.at/__content__/api
356
+ *
357
+ * deployVersion に応じて suffix を付与:
358
+ * - 'pr-2464' → https://{uuid}--{port}--pr-2464.proxy.machina.at/...
359
+ * - 'v19.10.0-dev.5' 等 → https://{uuid}--{port}--dev.proxy.machina.at/...
360
+ * - null / 'stable' → suffix なし
356
361
  */
357
362
  const LOCALHOST_URL_REGEX = /https?:\/\/(?:localhost|127\.0\.0\.1)(?::(\d+))?(\/[^\s<>'")\]]*)?/g;
363
+ /**
364
+ * deployVersion を proxy.machina.at のサブドメイン suffix に変換。
365
+ *
366
+ * 変換ルール:
367
+ * - null / 'stable' → '' (suffix なし)
368
+ * - 'pr-{N}' → '--pr-{N}'
369
+ * - 'dev' / 'develop' → '--dev'
370
+ * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)
371
+ * - 'X.Y.Z' (v prefix なし) → 同上
372
+ * - その他 → '' (fallback)
373
+ */
374
+ function deployVersionToHostSuffix(version) {
375
+ if (!version || version === 'stable')
376
+ return '';
377
+ if (version.startsWith('pr-'))
378
+ return `--${version}`;
379
+ if (version === 'dev' || version === 'develop')
380
+ return '--dev';
381
+ // semver format: (v)?{MAJOR}.{MINOR}.{PATCH}[-{pre}.{num}]
382
+ const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-z]+)\.(\d+))?$/);
383
+ if (match) {
384
+ const [, major, minor, patch, pre, num] = match;
385
+ let encoded = `v${major}-${minor}-${patch}`;
386
+ if (pre)
387
+ encoded += `-${pre}-${num}`;
388
+ return `--${encoded}`;
389
+ }
390
+ return '';
391
+ }
358
392
  class ProxyLinkProvider {
359
393
  _terminal;
360
394
  _getServerUUID;
395
+ _getToken;
361
396
  _handler;
362
- constructor(_terminal, _getServerUUID, _handler = (_, url) => {
397
+ _getDeployVersion;
398
+ constructor(_terminal, _getServerUUID, _getToken, _handler = (_, url) => {
363
399
  window.open(url, '_blank', 'noopener');
364
- }) {
400
+ }, _getDeployVersion) {
365
401
  this._terminal = _terminal;
366
402
  this._getServerUUID = _getServerUUID;
403
+ this._getToken = _getToken;
367
404
  this._handler = _handler;
405
+ this._getDeployVersion = _getDeployVersion;
368
406
  }
369
407
  provideLinks(bufferLineNumber, callback) {
370
408
  const lineIndex = bufferLineNumber - 1;
@@ -393,25 +431,48 @@ class ProxyLinkProvider {
393
431
  // serverUUIDはクリック時にlazy評価(セッション接続後に値が入る)
394
432
  activate: (event) => {
395
433
  const uuid = this._getServerUUID();
434
+ const token = this._getToken?.();
435
+ const hostSuffix = deployVersionToHostSuffix(this._getDeployVersion?.());
396
436
  const proxyUrl = uuid
397
- ? `https://${uuid}--${port}.proxy.machina.at/__content__${path}`
437
+ ? `https://${uuid}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`
398
438
  : null;
399
439
  const targetUrl = proxyUrl || matchedUrl;
400
- console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl });
401
- this._handler(event, targetUrl);
440
+ console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl, hasToken: !!token });
441
+ if (token && proxyUrl) {
442
+ // postMessage方式: openerとしてwindow参照を保持
443
+ const proxyOrigin = new URL(proxyUrl).origin;
444
+ const win = window.open(targetUrl, '_blank');
445
+ if (win) {
446
+ const listener = (e) => {
447
+ // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定
448
+ if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {
449
+ console.log('[proxy-link] auth-ready received, sending token');
450
+ win.postMessage({ type: 'proxy-auth-token', token }, proxyOrigin);
451
+ window.removeEventListener('message', listener);
452
+ }
453
+ };
454
+ window.addEventListener('message', listener);
455
+ // 10秒後にリスナーをクリーンアップ
456
+ setTimeout(() => window.removeEventListener('message', listener), 10000);
457
+ }
458
+ }
459
+ else {
460
+ this._handler(event, targetUrl);
461
+ }
402
462
  },
403
463
  });
404
464
  }
405
465
  callback(links.length > 0 ? links : undefined);
406
466
  }
407
467
  }
408
- function toProxyUrl(serverUUID, localhostUrl) {
468
+ function toProxyUrl(serverUUID, localhostUrl, deployVersion) {
409
469
  const match = localhostUrl.match(/^https?:\/\/(?:localhost|127\.0\.0\.1)(?::(\d+))?(\/.*)?$/);
410
470
  if (!match)
411
471
  return null;
412
472
  const port = match[1] || '80';
413
473
  const path = match[2] || '/';
414
- return `https://${serverUUID}--${port}.proxy.machina.at/__content__${path}`;
474
+ const hostSuffix = deployVersionToHostSuffix(deployVersion);
475
+ return `https://${serverUUID}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`;
415
476
  }
416
477
 
417
478
  /**
@@ -425,14 +486,18 @@ function toProxyUrl(serverUUID, localhostUrl) {
425
486
  */
426
487
  class ProxyLinksAddon {
427
488
  _getServerUUID;
489
+ _getToken;
428
490
  _handler;
491
+ _getDeployVersion;
429
492
  _linkProvider;
430
- constructor(_getServerUUID, _handler) {
493
+ constructor(_getServerUUID, _getToken, _handler, _getDeployVersion) {
431
494
  this._getServerUUID = _getServerUUID;
495
+ this._getToken = _getToken;
432
496
  this._handler = _handler;
497
+ this._getDeployVersion = _getDeployVersion;
433
498
  }
434
499
  activate(terminal) {
435
- this._linkProvider = terminal.registerLinkProvider(new ProxyLinkProvider(terminal, this._getServerUUID, this._handler));
500
+ this._linkProvider = terminal.registerLinkProvider(new ProxyLinkProvider(terminal, this._getServerUUID, this._getToken, this._handler, this._getDeployVersion));
436
501
  }
437
502
  dispose() {
438
503
  this._linkProvider?.dispose();
@@ -449,6 +514,10 @@ var XtermActionId;
449
514
  })(XtermActionId || (XtermActionId = {}));
450
515
  /** DI token for providing serverUUID getter to ProxyLinksAddon */
451
516
  const XTERM_SERVER_UUID = new InjectionToken('XTERM_SERVER_UUID');
517
+ /** DI token for providing CLI token getter to ProxyLinksAddon */
518
+ const XTERM_PROXY_TOKEN = new InjectionToken('XTERM_PROXY_TOKEN');
519
+ /** DI token for providing deploy version getter to ProxyLinksAddon */
520
+ const XTERM_DEPLOY_VERSION = new InjectionToken('XTERM_DEPLOY_VERSION');
452
521
  class XtermOrganismStore extends InjectableComponent {
453
522
  static DI = makeDI(XtermOrganismStore, () => () => ({
454
523
  data: '',
@@ -464,6 +533,10 @@ class XtermOrganismStore extends InjectableComponent {
464
533
  totalWritten = input(0, ...(ngDevMode ? [{ debugName: "totalWritten" }] : []));
465
534
  /** Injected serverUUID getter for proxy links (optional) */
466
535
  getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });
536
+ /** Injected CLI token getter for proxy link auto-auth (optional) */
537
+ getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });
538
+ /** Injected deploy version getter for proxy URL host suffix (optional) */
539
+ getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });
467
540
  constructor() {
468
541
  super();
469
542
  XtermOrganismStore.DI.initialize(this);
@@ -695,7 +768,7 @@ class XtermOrganism extends NgAtomicComponent {
695
768
  });
696
769
  this.terminal.loadAddon(this.fileLinksAddon);
697
770
  // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)
698
- this.terminal.loadAddon(new ProxyLinksAddon(this.store.getServerUUID ?? (() => undefined)));
771
+ this.terminal.loadAddon(new ProxyLinksAddon(this.store.getServerUUID ?? (() => undefined), this.store.getProxyToken ?? undefined, undefined, this.store.getDeployVersion ?? undefined));
699
772
  this.terminal.open(containerElement);
700
773
  // Setup event handlers for interactive mode
701
774
  if (isInteractive) {
@@ -1103,5 +1176,5 @@ async function getMachinaAsciiArtSixel(options = {}) {
1103
1176
  * Generated bundle index. Do not edit.
1104
1177
  */
1105
1178
 
1106
- export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
1179
+ export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
1107
1180
  //# sourceMappingURL=xxmachina-components-organisms-xterm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-organisms-xterm.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xxmachina-components-organisms-xterm.ts"],"sourcesContent":["import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nconst URL_REGEX = /https?:\\/\\/[^\\s<>'\")\\[\\]]+/g;\nconst LOCALHOST_REGEX = /^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::\\d+)?(?:\\/|$)/;\nconst MAX_SCAN_LINES = 30;\n\n/**\n * Link provider that detects URLs spanning multiple terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: (event: MouseEvent, uri: string) => void = (_, uri) => {\n window.open(uri, '_blank', 'noopener');\n },\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const buffer = this._terminal.buffer.active;\n\n let startY = bufferLineNumber - 1;\n while (startY > 0\n && (bufferLineNumber - 1 - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(startY)\n ) {\n startY--;\n }\n\n const lineTexts: string[] = [];\n let y = startY;\n do {\n const line = buffer.getLine(y);\n if (!line) break;\n lineTexts.push(line.translateToString(true));\n y++;\n } while (\n y < buffer.length\n && (y - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(y)\n );\n\n const fullText = lineTexts.join('');\n\n URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n const links: ILink[] = [];\n\n while ((match = URL_REGEX.exec(fullText)) !== null) {\n if (LOCALHOST_REGEX.test(match[0])) continue;\n\n const startPos = this._offsetToPos(match.index, startY, lineTexts);\n const endPos = this._offsetToPos(match.index + match[0].length - 1, startY, lineTexts);\n if (!startPos || !endPos) continue;\n\n links.push({\n text: match[0],\n range: {\n start: { x: startPos.x + 1, y: startPos.y + 1 },\n end: { x: endPos.x + 1, y: endPos.y + 1 },\n },\n activate: (event, text) => this._handler(event, text),\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _isLineContinuation(lineIdx: number): boolean {\n const buffer = this._terminal.buffer.active;\n const line = buffer.getLine(lineIdx);\n if (!line) return false;\n if (line.isWrapped) return true;\n\n if (lineIdx === 0) return false;\n const prevLine = buffer.getLine(lineIdx - 1);\n if (!prevLine) return false;\n\n const prevText = prevLine.translateToString(true);\n const currentText = line.translateToString(true);\n return (\n prevText.length > 0\n && !/\\s$/.test(prevText)\n && currentText.length > 0\n && !/^\\s/.test(currentText)\n );\n }\n\n private _offsetToPos(\n offset: number, startY: number, lineTexts: string[],\n ): { x: number; y: number } | null {\n let remaining = offset;\n for (let i = 0; i < lineTexts.length; i++) {\n if (remaining < lineTexts[i].length) {\n return { x: remaining, y: startY + i };\n }\n remaining -= lineTexts[i].length;\n }\n const lastIdx = lineTexts.length - 1;\n return { x: lineTexts[lastIdx].length, y: startY + lastIdx };\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { WebLinkProvider } from './web-link.provider';\n\n/**\n * Drop-in replacement for @xterm/addon-web-links that supports\n * URLs spanning wrapped terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler?: (event: MouseEvent, uri: string) => void\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new WebLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface GitHubLinkActivateHandler {\n (event: MouseEvent, issueNumber: number): void;\n}\n\nexport class GitHubLinkProvider implements ILinkProvider {\n // #番号 形式を検出(負の先読みで数字以外が続く場合にマッチ)\n private readonly GITHUB_ISSUE_REGEX = /(?:^|[\\s(])#(\\d+)(?!\\d)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n this.GITHUB_ISSUE_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.GITHUB_ISSUE_REGEX.exec(text)) !== null) {\n const issueNumber = parseInt(match[1], 10);\n const fullMatch = match[0];\n const issueRef = `#${match[1]}`;\n\n // マッチ開始位置を計算(プレフィックス文字を除く)\n const stringStartIndex = match.index + (fullMatch.length - issueRef.length);\n\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, issueRef.length);\n\n if (startX === -1 || endX === -1) continue;\n\n links.push({\n text: issueRef,\n range: {\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event) => {\n this._handler(event, issueNumber);\n }\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) return [-1, -1];\n\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { GitHubLinkProvider, GitHubLinkActivateHandler } from './github-link.provider';\n\nexport class GitHubLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new GitHubLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface FileLinkActivateHandler {\n (event: MouseEvent, filePath: string, line?: number, column?: number): void;\n}\n\nexport class FileLinkProvider implements ILinkProvider {\n // ファイルパスを検出する正規表現\n // - 絶対パス: /path/to/file.ts, /path/to/file.ts:10:5\n // - 相対パス: ./src/file.ts, ../lib/utils.ts:20\n // - 拡張子を持つファイル名\n private readonly FILE_PATH_REGEX = /(?:^|[\\s'\"`(])((\\.\\.?\\/|\\/)?[\\w.@-]+(?:\\/[\\w.@-]+)*\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n // bufferLineNumber は 1-indexed、buffer.getLine() は 0-indexed を期待\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n // Reset regex lastIndex\n this.FILE_PATH_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.FILE_PATH_REGEX.exec(text)) !== null) {\n const filePath = match[1];\n if (this._isLikelyFilePath(filePath) && !this._isUrl(filePath)) {\n // 文字列インデックスから表示位置(セル位置)を計算\n const stringStartIndex = match.index + (match[0].length - match[1].length);\n\n // WebLinksAddon と同じ方式で位置をマッピング(0-indexed lineIndexを渡す)\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, filePath.length);\n\n if (startX === -1 || endX === -1) {\n continue;\n }\n\n links.push({\n text: filePath,\n range: {\n // IBufferCellPosition は 1-indexed\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event, linkText) => {\n const parsed = this._parseFilePath(linkText);\n this._handler(event, parsed.path, parsed.line, parsed.column);\n }\n });\n }\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n /**\n * Map a string index back to buffer positions.\n * Returns buffer position as [lineIndex, columnIndex] 0-based,\n * or [-1, -1] in case the lookup ran into a non-existing line.\n * (Based on xterm.js WebLinkProvider implementation)\n */\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) {\n return [-1, -1];\n }\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n\n private _isLikelyFilePath(text: string): boolean {\n // 拡張子を持つか確認\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text);\n }\n\n private _isUrl(text: string): boolean {\n // URL形式を除外\n return /^https?:\\/\\//.test(text) || /^file:\\/\\//.test(text);\n }\n\n private _parseFilePath(text: string): { path: string; line?: number; column?: number } {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n }\n}\n\n// Export helper functions for testing\nexport const isLikelyFilePath = (text: string): boolean => {\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text) && !/^https?:\\/\\//.test(text);\n};\n\nexport const parseFilePath = (text: string): { path: string; line?: number; column?: number } => {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n};\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { FileLinkProvider, FileLinkActivateHandler } from './file-link.provider';\n\n/**\n * xterm.js addon for detecting and handling file path links in terminal output.\n * Similar to WebLinksAddon but for local file paths.\n *\n * Usage:\n * ```typescript\n * const fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n * if (event.metaKey || event.ctrlKey) {\n * // Open file in editor\n * }\n * });\n * terminal.loadAddon(fileLinksAddon);\n * ```\n */\nexport class FileLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new FileLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\n/**\n * localhost/127.0.0.1 URLをmachina web proxy URLに変換するリンクプロバイダ。\n *\n * 変換ルール:\n * http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/__content__/path\n * http://127.0.0.1:3000/api → https://{serverUUID}--3000.proxy.machina.at/__content__/api\n */\n\nconst LOCALHOST_URL_REGEX = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/[^\\s<>'\")\\]]*)?/g;\n\nexport type ServerUUIDGetter = () => string | undefined;\n\nexport class ProxyLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _handler: (event: MouseEvent, proxyUrl: string) => void = (_, url) => {\n window.open(url, '_blank', 'noopener');\n },\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n console.log('[proxy-link] provideLinks line', bufferLineNumber, 'text:', text.substring(0, 80));\n LOCALHOST_URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = LOCALHOST_URL_REGEX.exec(text)) !== null) {\n const matchedUrl = match[0];\n const port = match[1] || '80';\n const path = match[2] || '/';\n\n const startX = match.index + 1;\n const endX = match.index + matchedUrl.length;\n\n links.push({\n text: matchedUrl,\n range: {\n start: { x: startX, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber },\n },\n // serverUUIDはクリック時にlazy評価(セッション接続後に値が入る)\n activate: (event) => {\n const uuid = this._getServerUUID();\n const proxyUrl = uuid\n ? `https://${uuid}--${port}.proxy.machina.at/__content__${path}`\n : null;\n const targetUrl = proxyUrl || matchedUrl;\n console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl });\n this._handler(event, targetUrl);\n },\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n}\n\nexport function toProxyUrl(serverUUID: string, localhostUrl: string): string | null {\n const match = localhostUrl.match(/^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/.*)?$/);\n if (!match) return null;\n const port = match[1] || '80';\n const path = match[2] || '/';\n return `https://${serverUUID}--${port}.proxy.machina.at/__content__${path}`;\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { ProxyLinkProvider, ServerUUIDGetter } from './proxy-link.provider';\n\n/**\n * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。\n *\n * Usage:\n * ```typescript\n * const addon = new ProxyLinksAddon(() => currentServerUUID);\n * terminal.loadAddon(addon);\n * ```\n */\nexport class ProxyLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _handler?: (event: MouseEvent, proxyUrl: string) => void,\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new ProxyLinkProvider(terminal, this._getServerUUID, this._handler),\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { Directive, InjectionToken, input, inject } from '@angular/core';\nimport { _computed, InjectableComponent } from '@ng-atomic/core';\nimport { makeDI } from '@ng-atomic/common/services/ui';\n\nexport enum XtermActionId {\n DATA_INPUT = 'xterm:data-input',\n RESIZED = 'xterm:resized',\n GITHUB_LINK_CLICK = 'xterm:github-link-click',\n FILE_LINK_CLICK = 'xterm:file-link-click',\n FOCUS_INPUT_REQUEST = 'xterm:focus-input-request',\n}\n\n/** DI token for providing serverUUID getter to ProxyLinksAddon */\nexport const XTERM_SERVER_UUID = new InjectionToken<() => string | undefined>('XTERM_SERVER_UUID');\n\n@Directive({ standalone: true, selector: 'organisms-xterm' })\nexport class XtermOrganismStore extends InjectableComponent {\n static readonly DI = makeDI(XtermOrganismStore, () => () => ({\n data: '',\n interactive: false,\n queryResult: '',\n useInteractiveTheme: false,\n }), ['components', 'organisms', 'xterm']);\n\n readonly config = XtermOrganismStore.DI.injectConfig();\n readonly data = input<string | undefined>(undefined);\n readonly interactive = input<boolean>(false);\n readonly queryResult = input<string>('');\n readonly useInteractiveTheme = input<boolean>(false);\n readonly totalWritten = input<number>(0);\n\n /** Injected serverUUID getter for proxy links (optional) */\n readonly getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });\n\n constructor() {\n super();\n XtermOrganismStore.DI.initialize(this);\n }\n}\n","import { Component, ElementRef, AfterViewInit, OnDestroy, ChangeDetectionStrategy, viewChild, output, effect, inject, signal } from '@angular/core';\nimport { Terminal, IDisposable } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from './web-links.addon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\nimport { GitHubLinksAddon } from './github-links.addon';\nimport { FileLinksAddon } from './file-links.addon';\nimport { ProxyLinksAddon } from './proxy-links.addon';\nimport { XtermOrganismStore, XtermActionId } from './xterm.organism.store';\n\n// ImageAddon types (loaded dynamically to avoid browser compatibility issues)\ntype ImageAddon = any;\ntype IImageAddonOptions = any;\n\n/**\n * Minimum container size required for terminal initialization.\n * Prevents issues with SR-only hidden containers (1x1 pixel) causing FitAddon problems.\n */\nconst MIN_CONTAINER_SIZE = 10;\n\n\n/** Default display-only theme (for catalog/storybook) */\nconst DISPLAY_THEME = {\n background: '#0a0a0a',\n foreground: '#66d9ef',\n cursor: '#ff79c6',\n cyan: '#8be9fd',\n brightCyan: '#50fa7b',\n green: '#50fa7b',\n brightGreen: '#50fa7b',\n magenta: '#ff79c6',\n brightMagenta: '#ff79c6',\n yellow: '#f1fa8c',\n brightYellow: '#ffb86c',\n red: '#ff5555',\n brightRed: '#ff5555'\n};\n\n/** Interactive session theme (matches original TerminalManager) */\nconst INTERACTIVE_THEME = {\n background: '#0a0a0a',\n foreground: '#e0e0e0',\n cursor: '#e0e0e0',\n black: '#000000',\n red: '#cd3131',\n green: '#0dbc79',\n yellow: '#e5e510',\n blue: '#2472c8',\n magenta: '#bc3fbc',\n cyan: '#11a8cd',\n white: '#e5e5e5',\n brightBlack: '#666666',\n brightRed: '#f14c4c',\n brightGreen: '#23d18b',\n brightYellow: '#f5f543',\n brightBlue: '#3b8eea',\n brightMagenta: '#d670d6',\n brightCyan: '#29b8db',\n brightWhite: '#e5e5e5',\n};\n\n@Component({\n selector: 'organisms-xterm',\n standalone: true,\n imports: [],\n template: `<div #container class=\"xterm-wrapper\"></div>`,\n styleUrls: ['./xterm.organism.css', './xterm.organism.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{\n directive: XtermOrganismStore,\n inputs: ['data', 'interactive', 'useInteractiveTheme', 'totalWritten'],\n }],\n})\nexport class XtermOrganism extends NgAtomicComponent implements AfterViewInit, OnDestroy {\n readonly container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n protected readonly store = inject(XtermOrganismStore);\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n readonly terminalReady = output<Terminal>();\n readonly githubLinkClick = output<number>();\n\n private terminal!: Terminal;\n private fitAddon!: FitAddon;\n private imageAddon!: ImageAddon;\n private githubLinksAddon!: GitHubLinksAddon;\n private fileLinksAddon!: FileLinksAddon;\n private resizeObserver?: ResizeObserver;\n private lastDataLength = 0;\n /** Tracks how many bytes have been processed (for totalWritten-based diff detection) */\n private lastProcessedLength = 0;\n private readonly terminalInitialized = signal(false);\n /** Tracks if initialization was skipped due to container being too small */\n private initSkippedDueToSize = false;\n /** IDisposable refs for explicit cleanup (prevents memory leaks on mobile) */\n private readonly disposables: IDisposable[] = [];\n /** Timer refs for cleanup in ngOnDestroy */\n private stableTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n super();\n\n // Watch for data input changes (with totalWritten support for buffer overflow handling)\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const rawData = this.store.data();\n const totalWritten = this.store.totalWritten();\n const dataIsFunction = typeof rawData === 'function';\n const data = dataIsFunction ? (rawData as any)() : rawData;\n if (!isInitialized) return;\n\n // Use totalWritten-based logic when available (handles buffer overflow correctly)\n if (totalWritten > 0) {\n this.writeDataWithTotalWritten(data ?? '', totalWritten);\n } else {\n // Legacy fallback for backward compatibility\n this.writeDataToTerminal(data);\n }\n });\n\n // Watch for interactive mode changes and update host class\n // Note: Using effect with classList because @HostBinding doesn't work with OnPush + signals\n effect(() => {\n const isInteractive = this.store.interactive();\n if (isInteractive) {\n this.hostElement.nativeElement.classList.add('interactive');\n } else {\n this.hostElement.nativeElement.classList.remove('interactive');\n }\n });\n\n // Watch for interactive mode changes and update cursor blink\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const isInteractive = this.store.interactive();\n if (!isInitialized || !this.terminal) return;\n\n // Update cursor blink setting\n this.terminal.options.cursorBlink = isInteractive;\n });\n }\n\n private writeDataToTerminal(data: string | undefined): void {\n // Guard against undefined/null/empty data\n // Empty string is treated as \"no data yet\" (from startWith('') in streams)\n // Explicit reset should use the public clear() or reset() methods\n if (data === undefined || data === null || data === '') {\n return;\n }\n // O(1) length comparison instead of O(n) startsWith\n if (data.length >= this.lastDataLength) {\n const newPart = data.slice(this.lastDataLength);\n if (newPart) {\n this.terminal.write(newPart);\n }\n this.lastDataLength = data.length;\n } else {\n // Data got shorter = reset occurred\n this.terminal.reset();\n this.terminal.write(data);\n this.lastDataLength = data.length;\n }\n }\n\n /**\n * Write data using totalWritten for accurate diff detection.\n * This method handles buffer overflow scenarios correctly.\n * When newBytesCount >= data.length, performs a full redraw with terminal.reset()\n * to prevent stale output from previous sessions remaining on screen.\n * @param data The current buffer content\n * @param totalWritten Total bytes written to the buffer (cumulative)\n */\n private writeDataWithTotalWritten(data: string, totalWritten: number): void {\n if (!data) return;\n\n const newBytesCount = totalWritten - this.lastProcessedLength;\n\n if (newBytesCount <= 0) {\n if (totalWritten < this.lastProcessedLength) {\n // Reset detected (totalWritten decreased)\n this.terminal.reset();\n this.terminal.write(data);\n this.lastProcessedLength = totalWritten;\n }\n return;\n }\n\n // Full redraw needed: first render, session switch, or buffer overflow\n // (newBytesCount >= data.length means the diff covers the entire buffer or more)\n if (newBytesCount >= data.length) {\n this.terminal.reset();\n this.terminal.write(data);\n } else {\n // Normal incremental write - extract only new content\n const newContent = data.slice(-newBytesCount);\n if (newContent) {\n this.terminal.write(newContent);\n }\n }\n this.lastProcessedLength = totalWritten;\n }\n\n ngAfterViewInit() {\n const containerElement = this.container().nativeElement;\n\n // Guard against initialization in very small containers (e.g., SR-only 1x1 pixel hidden elements)\n // This prevents FitAddon issues and excessive processing in hidden query sections\n if (containerElement.offsetWidth < MIN_CONTAINER_SIZE || containerElement.offsetHeight < MIN_CONTAINER_SIZE) {\n this.initSkippedDueToSize = true;\n // Retry initialization when container reaches minimum size (e.g., after CSS/layout settles)\n this.resizeObserver = new ResizeObserver(() => {\n if (containerElement.offsetWidth >= MIN_CONTAINER_SIZE && containerElement.offsetHeight >= MIN_CONTAINER_SIZE) {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.initSkippedDueToSize = false;\n this.initializeTerminal(containerElement);\n }\n });\n this.resizeObserver.observe(containerElement);\n return;\n }\n\n this.initializeTerminal(containerElement);\n }\n\n private initializeTerminal(containerElement: HTMLDivElement): void {\n const isInteractive = this.store.interactive();\n const useInteractiveTheme = this.store.useInteractiveTheme() || isInteractive;\n\n this.terminal = new Terminal({\n theme: useInteractiveTheme ? INTERACTIVE_THEME : DISPLAY_THEME,\n scrollback: isInteractive ? 10000 : 1000,\n fontSize: useInteractiveTheme ? 14 : 12,\n fontFamily: '\"FiraCode Nerd Font\", \"Fira Code\", \"SF Mono\", \"Cascadia Code\", \"Consolas\", \"Courier New\", monospace',\n lineHeight: 1.2,\n allowTransparency: false,\n disableStdin: !isInteractive,\n cursorBlink: isInteractive,\n cursorStyle: 'block',\n convertEol: true,\n rows: 24\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n this.terminal.loadAddon(new WebLinksAddon());\n\n // ImageAddon for displaying inline images (SIXEL and iTerm2 IIP support)\n // Loaded dynamically to avoid browser compatibility issues\n this.loadImageAddon();\n\n this.githubLinksAddon = new GitHubLinksAddon((event, issueNumber) => {\n this.dispatch({ id: XtermActionId.GITHUB_LINK_CLICK, payload: issueNumber });\n });\n this.terminal.loadAddon(this.githubLinksAddon);\n\n this.fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n if (event.metaKey || event.ctrlKey) {\n this.dispatch({ id: XtermActionId.FILE_LINK_CLICK, payload: { filePath, line, column } });\n }\n });\n this.terminal.loadAddon(this.fileLinksAddon);\n\n // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)\n this.terminal.loadAddon(new ProxyLinksAddon(\n this.store.getServerUUID ?? (() => undefined),\n ));\n\n this.terminal.open(containerElement);\n\n // Setup event handlers for interactive mode\n if (isInteractive) {\n this.disposables.push(\n this.terminal.onData((data) => {\n this.dispatch({ id: XtermActionId.DATA_INPUT, payload: data });\n }),\n this.terminal.onResize(({ cols, rows }) => this.dispatch({ id: XtermActionId.RESIZED, payload: { cols, rows } })),\n );\n }\n\n // Use ResizeObserver with debounce to wait for container size to stabilize\n // (CSS transitions take 300-500ms, so fixed setTimeout(100ms) is too early)\n this.resizeObserver = new ResizeObserver(() => {\n try {\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n // Debounce: wait for container to stop changing before initializing\n if (this.stableTimer) clearTimeout(this.stableTimer);\n this.stableTimer = setTimeout(() => {\n this.stableTimer = null;\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }, 150);\n } else if (isInteractive) {\n // Debounce resize to wait for CSS transitions to complete (300ms)\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.fitAddon.fit();\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }, 300);\n }\n } catch (e) {\n console.warn('Failed to fit terminal:', e);\n }\n });\n this.resizeObserver.observe(containerElement);\n\n // Fallback: initialize after 500ms if ResizeObserver hasn't triggered stable state\n this.fallbackTimer = setTimeout(() => {\n this.fallbackTimer = null;\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }\n }, 500);\n }\n\n ngOnDestroy() {\n // Clear pending timers to prevent post-destroy callbacks\n if (this.stableTimer) clearTimeout(this.stableTimer);\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n if (this.fallbackTimer) clearTimeout(this.fallbackTimer);\n\n this.resizeObserver?.disconnect();\n\n // Dispose xterm event handlers (onData, onResize) to prevent memory leaks\n for (const d of this.disposables) d.dispose();\n this.disposables.length = 0;\n\n // Remove terminal instance from window for E2E testing cleanup\n if (typeof window !== 'undefined' && (window as any).__XTERM_INSTANCES__) {\n const instances = (window as any).__XTERM_INSTANCES__ as Terminal[];\n const index = instances.indexOf(this.terminal);\n if (index !== -1) {\n instances.splice(index, 1);\n }\n }\n\n this.terminal?.dispose();\n }\n\n private markInitialized(isInteractive: boolean): void {\n if (this.terminalInitialized()) return;\n this.terminalInitialized.set(true);\n this.terminalReady.emit(this.terminal);\n\n // Expose terminal instance for E2E testing (only in development/test environments)\n if (typeof window !== 'undefined') {\n (window as any).__XTERM_INSTANCES__ = (window as any).__XTERM_INSTANCES__ || [];\n (window as any).__XTERM_INSTANCES__.push(this.terminal);\n }\n\n // Dispatch initial RESIZED for interactive mode\n if (isInteractive) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n private async loadImageAddon(): Promise<void> {\n try {\n const { ImageAddon } = await import('@xterm/addon-image');\n const imageAddonOptions = {\n enableSizeReports: true,\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n };\n this.imageAddon = new ImageAddon(imageAddonOptions);\n this.terminal.loadAddon(this.imageAddon);\n } catch (e) {\n // ImageAddon not available in browser environment - this is expected\n console.debug('ImageAddon not available:', e);\n }\n }\n\n // Public API\n public write(text: string): void {\n this.terminal?.write(text);\n }\n\n public writeln(text: string): void {\n this.terminal?.writeln(text);\n }\n\n public clear(): void {\n this.terminal?.clear();\n }\n\n public scrollToBottom(): void {\n this.terminal?.scrollToBottom();\n }\n\n public scrollToTop(): void {\n this.terminal?.scrollToTop();\n }\n\n public scrollLines(lines: number): void {\n this.terminal?.scrollLines(lines);\n }\n\n public fit(): void {\n this.fitAddon?.fit();\n // Only dispatch RESIZED after initialization to prevent sending wrong cols/rows\n // during CSS transitions (SessionTemplateV2.ngAfterViewInit calls fit() before layout stabilizes)\n if (this.terminalInitialized() && this.terminal) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n public get cols(): number {\n return this.terminal?.cols ?? 80;\n }\n\n public get rows(): number {\n return this.terminal?.rows ?? 24;\n }\n\n public getTerminal(): Terminal | undefined {\n // Only expose terminal after fitAddon.fit() has run (terminalInitialized === true)\n return this.terminalInitialized() ? this.terminal : undefined;\n }\n\n /**\n * Display an inline image using iTerm2's Inline Image Protocol\n * @param base64Data Base64 encoded image data (PNG, JPEG, etc.)\n * @param options Image display options\n */\n public displayImage(base64Data: string, options?: {\n width?: string | number; // e.g., '50%', 'auto', or cell count\n height?: string | number; // e.g., '10', 'auto', or cell count\n preserveAspectRatio?: boolean;\n name?: string;\n }): void {\n if (!this.terminal) return;\n\n const args: string[] = ['inline=1'];\n\n if (options?.width) {\n args.push(`width=${options.width}`);\n }\n if (options?.height) {\n args.push(`height=${options.height}`);\n }\n if (options?.preserveAspectRatio !== undefined) {\n args.push(`preserveAspectRatio=${options.preserveAspectRatio ? 1 : 0}`);\n }\n if (options?.name) {\n args.push(`name=${btoa(options.name)}`);\n }\n\n // iTerm2 Inline Image Protocol escape sequence\n const escapeSequence = `\\x1b]1337;File=${args.join(';')}:${base64Data}\\x07`;\n this.terminal.write(escapeSequence);\n }\n\n /**\n * Get the ImageAddon instance for advanced image operations\n */\n public getImageAddon(): ImageAddon | undefined {\n return this.imageAddon;\n }\n}\n","/**\n * Utility functions for displaying images in xterm using SIXEL format\n */\n\nexport interface SvgToSixelOptions {\n width?: number;\n height?: number;\n backgroundColor?: string;\n textColor?: string;\n}\n\n/**\n * Generate ASCII art text using figlet\n * Note: figlet is loaded dynamically as it's not available in browser environments\n */\nexport async function generateAsciiArt(text: string, font = 'ANSI Shadow'): Promise<string> {\n try {\n const figlet = await import('figlet');\n return new Promise((resolve, reject) => {\n figlet.default.text(text, { font: font as any }, (err, result) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(result || '');\n });\n });\n } catch (e) {\n // figlet not available in browser - return simple text\n console.debug('figlet not available:', e);\n return text;\n }\n}\n\n/**\n * Convert ASCII art text to SVG with transparent background\n */\nexport function asciiArtToSvg(\n asciiArt: string,\n options: { textColor?: string; fontSize?: number } = {}\n): string {\n const { textColor = '#00FFFF', fontSize = 14 } = options;\n\n const lines = asciiArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n\n // Calculate dimensions based on monospace font metrics (block chars need more width)\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const width = Math.ceil(maxLineLength * charWidth) + padding;\n const height = Math.ceil(lines.length * lineHeight) + padding;\n\n // Build SVG with text elements for each line\n const textElements = lines.map((line, i) => {\n // Escape special XML characters\n const escapedLine = line\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n return `<text x=\"20\" y=\"${20 + (i + 1) * lineHeight}\" fill=\"${textColor}\" xml:space=\"preserve\">${escapedLine}</text>`;\n }).join('\\n ');\n\n return `<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <style>text { font-family: 'Courier New', Consolas, monospace; font-size: ${fontSize}px; white-space: pre; }</style>\n ${textElements}\n</svg>`;\n}\n\n/**\n * Convert SVG to SIXEL format for xterm display\n */\nexport async function svgToSixel(\n svgString: string,\n options: SvgToSixelOptions = {}\n): Promise<string> {\n const { width = 400, height = 200, backgroundColor } = options;\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Failed to get canvas context'));\n return;\n }\n\n // Fill background (transparent if not specified)\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const img = new Image();\n const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n\n const imageData = ctx.getImageData(0, 0, width, height);\n const sixelData = imageDataToSixel(imageData);\n resolve(sixelData);\n };\n\n img.onerror = (error) => {\n URL.revokeObjectURL(url);\n reject(error);\n };\n\n img.src = url;\n });\n}\n\n/**\n * Convert ImageData to SIXEL escape sequence\n */\nfunction imageDataToSixel(imageData: ImageData): string {\n const { width, height, data } = imageData;\n\n // Build color palette (quantize to 16 colors)\n const palette = buildColorPalette(data, 16);\n const colorMap = new Map<string, number>();\n palette.forEach((color, index) => {\n colorMap.set(color, index);\n });\n\n // SIXEL header\n let sixel = '\\x1bPq';\n\n // Define colors in palette\n palette.forEach((color, index) => {\n const [r, g, b] = hexToRgb(color);\n const rPct = Math.round((r / 255) * 100);\n const gPct = Math.round((g / 255) * 100);\n const bPct = Math.round((b / 255) * 100);\n sixel += `#${index};2;${rPct};${gPct};${bPct}`;\n });\n\n // Process image in bands of 6 rows\n for (let bandY = 0; bandY < height; bandY += 6) {\n for (let colorIdx = 0; colorIdx < palette.length; colorIdx++) {\n const color = palette[colorIdx];\n let rowData = '';\n let hasPixels = false;\n\n rowData += `#${colorIdx}`;\n\n for (let x = 0; x < width; x++) {\n let sixelValue = 0;\n\n for (let dy = 0; dy < 6; dy++) {\n const y = bandY + dy;\n if (y >= height) continue;\n\n const pixelIndex = (y * width + x) * 4;\n const r = data[pixelIndex];\n const g = data[pixelIndex + 1];\n const b = data[pixelIndex + 2];\n const a = data[pixelIndex + 3];\n\n if (a < 128) continue;\n\n const pixelColor = rgbToHex(r, g, b);\n const nearestColor = findNearestColor(pixelColor, palette);\n\n if (nearestColor === color) {\n sixelValue |= (1 << dy);\n hasPixels = true;\n }\n }\n\n rowData += String.fromCharCode(63 + sixelValue);\n }\n\n if (hasPixels) {\n sixel += rowData;\n sixel += '$';\n }\n }\n\n if (bandY + 6 < height) {\n sixel += '-';\n }\n }\n\n sixel += '\\x1b\\\\';\n return sixel;\n}\n\nfunction buildColorPalette(data: Uint8ClampedArray, maxColors: number): string[] {\n const colorCounts = new Map<string, number>();\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n if (a < 128) continue;\n\n const qr = Math.floor(r / 16) * 16;\n const qg = Math.floor(g / 16) * 16;\n const qb = Math.floor(b / 16) * 16;\n const color = rgbToHex(qr, qg, qb);\n\n colorCounts.set(color, (colorCounts.get(color) || 0) + 1);\n }\n\n return Array.from(colorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, maxColors)\n .map(([color]) => color);\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const match = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n if (!match) return [0, 0, 0];\n return [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16)];\n}\n\nfunction findNearestColor(targetHex: string, palette: string[]): string {\n const [tr, tg, tb] = hexToRgb(targetHex);\n let nearest = palette[0];\n let minDist = Infinity;\n\n for (const color of palette) {\n const [r, g, b] = hexToRgb(color);\n const dist = (tr - r) ** 2 + (tg - g) ** 2 + (tb - b) ** 2;\n if (dist < minDist) {\n minDist = dist;\n nearest = color;\n }\n }\n\n return nearest;\n}\n\n/**\n * Generate MACHINA ASCII art banner as SIXEL\n */\nexport async function getMachinaAsciiArtSixel(\n options: SvgToSixelOptions = {}\n): Promise<string> {\n // Generate ASCII art for \"MACHINA\"\n const machinaArt = await generateAsciiArt('MACHINA', 'ANSI Shadow');\n\n // Convert to SVG with cyan color (terminal style)\n const fontSize = 14;\n const svg = asciiArtToSvg(machinaArt, {\n textColor: options.textColor || '#00FFFF',\n fontSize\n });\n\n // Calculate appropriate dimensions matching asciiArtToSvg calculation\n const lines = machinaArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const defaultWidth = Math.ceil(maxLineLength * charWidth) + padding;\n const defaultHeight = Math.ceil(lines.length * lineHeight) + padding;\n\n return svgToSixel(svg, {\n width: options.width || defaultWidth,\n height: options.height || defaultHeight,\n backgroundColor: options.backgroundColor || '#0a0a0a',\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-organisms-xterm.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/file-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xxmachina-components-organisms-xterm.ts"],"sourcesContent":["import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nconst URL_REGEX = /https?:\\/\\/[^\\s<>'\")\\[\\]]+/g;\nconst LOCALHOST_REGEX = /^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::\\d+)?(?:\\/|$)/;\nconst MAX_SCAN_LINES = 30;\n\n/**\n * Link provider that detects URLs spanning multiple terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: (event: MouseEvent, uri: string) => void = (_, uri) => {\n window.open(uri, '_blank', 'noopener');\n },\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const buffer = this._terminal.buffer.active;\n\n let startY = bufferLineNumber - 1;\n while (startY > 0\n && (bufferLineNumber - 1 - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(startY)\n ) {\n startY--;\n }\n\n const lineTexts: string[] = [];\n let y = startY;\n do {\n const line = buffer.getLine(y);\n if (!line) break;\n lineTexts.push(line.translateToString(true));\n y++;\n } while (\n y < buffer.length\n && (y - startY) < MAX_SCAN_LINES\n && this._isLineContinuation(y)\n );\n\n const fullText = lineTexts.join('');\n\n URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n const links: ILink[] = [];\n\n while ((match = URL_REGEX.exec(fullText)) !== null) {\n if (LOCALHOST_REGEX.test(match[0])) continue;\n\n const startPos = this._offsetToPos(match.index, startY, lineTexts);\n const endPos = this._offsetToPos(match.index + match[0].length - 1, startY, lineTexts);\n if (!startPos || !endPos) continue;\n\n links.push({\n text: match[0],\n range: {\n start: { x: startPos.x + 1, y: startPos.y + 1 },\n end: { x: endPos.x + 1, y: endPos.y + 1 },\n },\n activate: (event, text) => this._handler(event, text),\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _isLineContinuation(lineIdx: number): boolean {\n const buffer = this._terminal.buffer.active;\n const line = buffer.getLine(lineIdx);\n if (!line) return false;\n if (line.isWrapped) return true;\n\n if (lineIdx === 0) return false;\n const prevLine = buffer.getLine(lineIdx - 1);\n if (!prevLine) return false;\n\n const prevText = prevLine.translateToString(true);\n const currentText = line.translateToString(true);\n return (\n prevText.length > 0\n && !/\\s$/.test(prevText)\n && currentText.length > 0\n && !/^\\s/.test(currentText)\n );\n }\n\n private _offsetToPos(\n offset: number, startY: number, lineTexts: string[],\n ): { x: number; y: number } | null {\n let remaining = offset;\n for (let i = 0; i < lineTexts.length; i++) {\n if (remaining < lineTexts[i].length) {\n return { x: remaining, y: startY + i };\n }\n remaining -= lineTexts[i].length;\n }\n const lastIdx = lineTexts.length - 1;\n return { x: lineTexts[lastIdx].length, y: startY + lastIdx };\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { WebLinkProvider } from './web-link.provider';\n\n/**\n * Drop-in replacement for @xterm/addon-web-links that supports\n * URLs spanning wrapped terminal lines.\n * localhost/127.0.0.1 URLs are skipped (handled by ProxyLinksAddon).\n */\nexport class WebLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler?: (event: MouseEvent, uri: string) => void\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new WebLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface GitHubLinkActivateHandler {\n (event: MouseEvent, issueNumber: number): void;\n}\n\nexport class GitHubLinkProvider implements ILinkProvider {\n // #番号 形式を検出(負の先読みで数字以外が続く場合にマッチ)\n private readonly GITHUB_ISSUE_REGEX = /(?:^|[\\s(])#(\\d+)(?!\\d)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n this.GITHUB_ISSUE_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.GITHUB_ISSUE_REGEX.exec(text)) !== null) {\n const issueNumber = parseInt(match[1], 10);\n const fullMatch = match[0];\n const issueRef = `#${match[1]}`;\n\n // マッチ開始位置を計算(プレフィックス文字を除く)\n const stringStartIndex = match.index + (fullMatch.length - issueRef.length);\n\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, issueRef.length);\n\n if (startX === -1 || endX === -1) continue;\n\n links.push({\n text: issueRef,\n range: {\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event) => {\n this._handler(event, issueNumber);\n }\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) return [-1, -1];\n\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { GitHubLinkProvider, GitHubLinkActivateHandler } from './github-link.provider';\n\nexport class GitHubLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: GitHubLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new GitHubLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\nexport interface FileLinkActivateHandler {\n (event: MouseEvent, filePath: string, line?: number, column?: number): void;\n}\n\nexport class FileLinkProvider implements ILinkProvider {\n // ファイルパスを検出する正規表現\n // - 絶対パス: /path/to/file.ts, /path/to/file.ts:10:5\n // - 相対パス: ./src/file.ts, ../lib/utils.ts:20\n // - 拡張子を持つファイル名\n private readonly FILE_PATH_REGEX = /(?:^|[\\s'\"`(])((\\.\\.?\\/|\\/)?[\\w.@-]+(?:\\/[\\w.@-]+)*\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?)/g;\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n // bufferLineNumber は 1-indexed、buffer.getLine() は 0-indexed を期待\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n // Reset regex lastIndex\n this.FILE_PATH_REGEX.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = this.FILE_PATH_REGEX.exec(text)) !== null) {\n const filePath = match[1];\n if (this._isLikelyFilePath(filePath) && !this._isUrl(filePath)) {\n // 文字列インデックスから表示位置(セル位置)を計算\n const stringStartIndex = match.index + (match[0].length - match[1].length);\n\n // WebLinksAddon と同じ方式で位置をマッピング(0-indexed lineIndexを渡す)\n const [, startX] = this._mapStrIdx(lineIndex, 0, stringStartIndex);\n const [, endX] = this._mapStrIdx(lineIndex, startX, filePath.length);\n\n if (startX === -1 || endX === -1) {\n continue;\n }\n\n links.push({\n text: filePath,\n range: {\n // IBufferCellPosition は 1-indexed\n start: { x: startX + 1, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber }\n },\n activate: (event, linkText) => {\n const parsed = this._parseFilePath(linkText);\n this._handler(event, parsed.path, parsed.line, parsed.column);\n }\n });\n }\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n\n /**\n * Map a string index back to buffer positions.\n * Returns buffer position as [lineIndex, columnIndex] 0-based,\n * or [-1, -1] in case the lookup ran into a non-existing line.\n * (Based on xterm.js WebLinkProvider implementation)\n */\n private _mapStrIdx(lineIndex: number, rowIndex: number, stringIndex: number): [number, number] {\n const buf = this._terminal.buffer.active;\n const cell = buf.getNullCell();\n let start = rowIndex;\n\n while (stringIndex) {\n const line = buf.getLine(lineIndex);\n if (!line) {\n return [-1, -1];\n }\n for (let i = start; i < line.length; ++i) {\n line.getCell(i, cell);\n const chars = cell.getChars();\n const width = cell.getWidth();\n if (width) {\n stringIndex -= chars.length || 1;\n }\n if (stringIndex < 0) {\n return [lineIndex, i];\n }\n }\n lineIndex++;\n start = 0;\n }\n return [lineIndex, start];\n }\n\n private _isLikelyFilePath(text: string): boolean {\n // 拡張子を持つか確認\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text);\n }\n\n private _isUrl(text: string): boolean {\n // URL形式を除外\n return /^https?:\\/\\//.test(text) || /^file:\\/\\//.test(text);\n }\n\n private _parseFilePath(text: string): { path: string; line?: number; column?: number } {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n }\n}\n\n// Export helper functions for testing\nexport const isLikelyFilePath = (text: string): boolean => {\n return /\\.[a-zA-Z0-9]+(?::\\d+(?::\\d+)?)?$/.test(text) && !/^https?:\\/\\//.test(text);\n};\n\nexport const parseFilePath = (text: string): { path: string; line?: number; column?: number } => {\n const match = text.match(/^(.+?)(?::(\\d+)(?::(\\d+))?)?$/);\n if (match) {\n return {\n path: match[1],\n line: match[2] ? parseInt(match[2], 10) : undefined,\n column: match[3] ? parseInt(match[3], 10) : undefined\n };\n }\n return { path: text };\n};\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { FileLinkProvider, FileLinkActivateHandler } from './file-link.provider';\n\n/**\n * xterm.js addon for detecting and handling file path links in terminal output.\n * Similar to WebLinksAddon but for local file paths.\n *\n * Usage:\n * ```typescript\n * const fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n * if (event.metaKey || event.ctrlKey) {\n * // Open file in editor\n * }\n * });\n * terminal.loadAddon(fileLinksAddon);\n * ```\n */\nexport class FileLinksAddon implements ITerminalAddon {\n private _terminal?: Terminal;\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _handler: FileLinkActivateHandler\n ) {}\n\n activate(terminal: Terminal): void {\n this._terminal = terminal;\n this._linkProvider = terminal.registerLinkProvider(\n new FileLinkProvider(terminal, this._handler)\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { ILinkProvider, ILink, Terminal } from '@xterm/xterm';\n\n/**\n * localhost/127.0.0.1 URLをmachina web proxy URLに変換するリンクプロバイダ。\n *\n * 変換ルール:\n * http://localhost:4200/path → https://{serverUUID}--4200.proxy.machina.at/__content__/path\n * http://127.0.0.1:3000/api → https://{serverUUID}--3000.proxy.machina.at/__content__/api\n *\n * deployVersion に応じて suffix を付与:\n * - 'pr-2464' → https://{uuid}--{port}--pr-2464.proxy.machina.at/...\n * - 'v19.10.0-dev.5' 等 → https://{uuid}--{port}--dev.proxy.machina.at/...\n * - null / 'stable' → suffix なし\n */\n\nconst LOCALHOST_URL_REGEX = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/[^\\s<>'\")\\]]*)?/g;\n\nexport type ServerUUIDGetter = () => string | undefined;\nexport type TokenGetter = () => string | undefined;\nexport type DeployVersionGetter = () => string | null | undefined;\n\n/**\n * deployVersion を proxy.machina.at のサブドメイン suffix に変換。\n *\n * 変換ルール:\n * - null / 'stable' → '' (suffix なし)\n * - 'pr-{N}' → '--pr-{N}'\n * - 'dev' / 'develop' → '--dev'\n * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)\n * - 'X.Y.Z' (v prefix なし) → 同上\n * - その他 → '' (fallback)\n */\nexport function deployVersionToHostSuffix(version: string | null | undefined): string {\n if (!version || version === 'stable') return '';\n if (version.startsWith('pr-')) return `--${version}`;\n if (version === 'dev' || version === 'develop') return '--dev';\n\n // semver format: (v)?{MAJOR}.{MINOR}.{PATCH}[-{pre}.{num}]\n const match = version.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/);\n if (match) {\n const [, major, minor, patch, pre, num] = match;\n let encoded = `v${major}-${minor}-${patch}`;\n if (pre) encoded += `-${pre}-${num}`;\n return `--${encoded}`;\n }\n\n return '';\n}\n\nexport class ProxyLinkProvider implements ILinkProvider {\n constructor(\n private readonly _terminal: Terminal,\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler: (event: MouseEvent, proxyUrl: string) => void = (_, url) => {\n window.open(url, '_blank', 'noopener');\n },\n private readonly _getDeployVersion?: DeployVersionGetter,\n ) {}\n\n provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void {\n const lineIndex = bufferLineNumber - 1;\n const line = this._terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const text = line.translateToString(true);\n const links: ILink[] = [];\n\n console.log('[proxy-link] provideLinks line', bufferLineNumber, 'text:', text.substring(0, 80));\n LOCALHOST_URL_REGEX.lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = LOCALHOST_URL_REGEX.exec(text)) !== null) {\n const matchedUrl = match[0];\n const port = match[1] || '80';\n const path = match[2] || '/';\n\n const startX = match.index + 1;\n const endX = match.index + matchedUrl.length;\n\n links.push({\n text: matchedUrl,\n range: {\n start: { x: startX, y: bufferLineNumber },\n end: { x: endX, y: bufferLineNumber },\n },\n // serverUUIDはクリック時にlazy評価(セッション接続後に値が入る)\n activate: (event) => {\n const uuid = this._getServerUUID();\n const token = this._getToken?.();\n const hostSuffix = deployVersionToHostSuffix(this._getDeployVersion?.());\n const proxyUrl = uuid\n ? `https://${uuid}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`\n : null;\n const targetUrl = proxyUrl || matchedUrl;\n console.log('[proxy-link] activate:', { matchedUrl, uuid, proxyUrl, targetUrl, hasToken: !!token });\n\n if (token && proxyUrl) {\n // postMessage方式: openerとしてwindow参照を保持\n const proxyOrigin = new URL(proxyUrl).origin;\n const win = window.open(targetUrl, '_blank');\n if (win) {\n const listener = (e: MessageEvent) => {\n // クロスオリジン WindowProxy の === 比較は信頼できないため origin で判定\n if (e.origin === proxyOrigin && e.data?.type === 'proxy-auth-ready') {\n console.log('[proxy-link] auth-ready received, sending token');\n win.postMessage({ type: 'proxy-auth-token', token }, proxyOrigin);\n window.removeEventListener('message', listener);\n }\n };\n window.addEventListener('message', listener);\n // 10秒後にリスナーをクリーンアップ\n setTimeout(() => window.removeEventListener('message', listener), 10000);\n }\n } else {\n this._handler(event, targetUrl);\n }\n },\n });\n }\n\n callback(links.length > 0 ? links : undefined);\n }\n}\n\nexport function toProxyUrl(\n serverUUID: string,\n localhostUrl: string,\n deployVersion?: string | null,\n): string | null {\n const match = localhostUrl.match(/^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::(\\d+))?(\\/.*)?$/);\n if (!match) return null;\n const port = match[1] || '80';\n const path = match[2] || '/';\n const hostSuffix = deployVersionToHostSuffix(deployVersion);\n return `https://${serverUUID}--${port}${hostSuffix}.proxy.machina.at/__content__${path}`;\n}\n","import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport { ProxyLinkProvider, ServerUUIDGetter, TokenGetter, DeployVersionGetter } from './proxy-link.provider';\n\n/**\n * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。\n *\n * Usage:\n * ```typescript\n * const addon = new ProxyLinksAddon(() => currentServerUUID);\n * terminal.loadAddon(addon);\n * ```\n */\nexport class ProxyLinksAddon implements ITerminalAddon {\n private _linkProvider?: IDisposable;\n\n constructor(\n private readonly _getServerUUID: ServerUUIDGetter,\n private readonly _getToken?: TokenGetter,\n private readonly _handler?: (event: MouseEvent, proxyUrl: string) => void,\n private readonly _getDeployVersion?: DeployVersionGetter,\n ) {}\n\n activate(terminal: Terminal): void {\n this._linkProvider = terminal.registerLinkProvider(\n new ProxyLinkProvider(\n terminal,\n this._getServerUUID,\n this._getToken,\n this._handler,\n this._getDeployVersion,\n ),\n );\n }\n\n dispose(): void {\n this._linkProvider?.dispose();\n }\n}\n","import { Directive, InjectionToken, input, inject } from '@angular/core';\nimport { _computed, InjectableComponent } from '@ng-atomic/core';\nimport { makeDI } from '@ng-atomic/common/services/ui';\n\nexport enum XtermActionId {\n DATA_INPUT = 'xterm:data-input',\n RESIZED = 'xterm:resized',\n GITHUB_LINK_CLICK = 'xterm:github-link-click',\n FILE_LINK_CLICK = 'xterm:file-link-click',\n FOCUS_INPUT_REQUEST = 'xterm:focus-input-request',\n}\n\n/** DI token for providing serverUUID getter to ProxyLinksAddon */\nexport const XTERM_SERVER_UUID = new InjectionToken<() => string | undefined>('XTERM_SERVER_UUID');\n\n/** DI token for providing CLI token getter to ProxyLinksAddon */\nexport const XTERM_PROXY_TOKEN = new InjectionToken<() => string | undefined>('XTERM_PROXY_TOKEN');\n\n/** DI token for providing deploy version getter to ProxyLinksAddon */\nexport const XTERM_DEPLOY_VERSION = new InjectionToken<() => string | null | undefined>('XTERM_DEPLOY_VERSION');\n\n@Directive({ standalone: true, selector: 'organisms-xterm' })\nexport class XtermOrganismStore extends InjectableComponent {\n static readonly DI = makeDI(XtermOrganismStore, () => () => ({\n data: '',\n interactive: false,\n queryResult: '',\n useInteractiveTheme: false,\n }), ['components', 'organisms', 'xterm']);\n\n readonly config = XtermOrganismStore.DI.injectConfig();\n readonly data = input<string | undefined>(undefined);\n readonly interactive = input<boolean>(false);\n readonly queryResult = input<string>('');\n readonly useInteractiveTheme = input<boolean>(false);\n readonly totalWritten = input<number>(0);\n\n /** Injected serverUUID getter for proxy links (optional) */\n readonly getServerUUID = inject(XTERM_SERVER_UUID, { optional: true });\n\n /** Injected CLI token getter for proxy link auto-auth (optional) */\n readonly getProxyToken = inject(XTERM_PROXY_TOKEN, { optional: true });\n\n /** Injected deploy version getter for proxy URL host suffix (optional) */\n readonly getDeployVersion = inject(XTERM_DEPLOY_VERSION, { optional: true });\n\n constructor() {\n super();\n XtermOrganismStore.DI.initialize(this);\n }\n}\n","import { Component, ElementRef, AfterViewInit, OnDestroy, ChangeDetectionStrategy, viewChild, output, effect, inject, signal } from '@angular/core';\nimport { Terminal, IDisposable } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from './web-links.addon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\nimport { GitHubLinksAddon } from './github-links.addon';\nimport { FileLinksAddon } from './file-links.addon';\nimport { ProxyLinksAddon } from './proxy-links.addon';\nimport { XtermOrganismStore, XtermActionId } from './xterm.organism.store';\n\n// ImageAddon types (loaded dynamically to avoid browser compatibility issues)\ntype ImageAddon = any;\ntype IImageAddonOptions = any;\n\n/**\n * Minimum container size required for terminal initialization.\n * Prevents issues with SR-only hidden containers (1x1 pixel) causing FitAddon problems.\n */\nconst MIN_CONTAINER_SIZE = 10;\n\n\n/** Default display-only theme (for catalog/storybook) */\nconst DISPLAY_THEME = {\n background: '#0a0a0a',\n foreground: '#66d9ef',\n cursor: '#ff79c6',\n cyan: '#8be9fd',\n brightCyan: '#50fa7b',\n green: '#50fa7b',\n brightGreen: '#50fa7b',\n magenta: '#ff79c6',\n brightMagenta: '#ff79c6',\n yellow: '#f1fa8c',\n brightYellow: '#ffb86c',\n red: '#ff5555',\n brightRed: '#ff5555'\n};\n\n/** Interactive session theme (matches original TerminalManager) */\nconst INTERACTIVE_THEME = {\n background: '#0a0a0a',\n foreground: '#e0e0e0',\n cursor: '#e0e0e0',\n black: '#000000',\n red: '#cd3131',\n green: '#0dbc79',\n yellow: '#e5e510',\n blue: '#2472c8',\n magenta: '#bc3fbc',\n cyan: '#11a8cd',\n white: '#e5e5e5',\n brightBlack: '#666666',\n brightRed: '#f14c4c',\n brightGreen: '#23d18b',\n brightYellow: '#f5f543',\n brightBlue: '#3b8eea',\n brightMagenta: '#d670d6',\n brightCyan: '#29b8db',\n brightWhite: '#e5e5e5',\n};\n\n@Component({\n selector: 'organisms-xterm',\n standalone: true,\n imports: [],\n template: `<div #container class=\"xterm-wrapper\"></div>`,\n styleUrls: ['./xterm.organism.css', './xterm.organism.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{\n directive: XtermOrganismStore,\n inputs: ['data', 'interactive', 'useInteractiveTheme', 'totalWritten'],\n }],\n})\nexport class XtermOrganism extends NgAtomicComponent implements AfterViewInit, OnDestroy {\n readonly container = viewChild.required<ElementRef<HTMLDivElement>>('container');\n protected readonly store = inject(XtermOrganismStore);\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n readonly terminalReady = output<Terminal>();\n readonly githubLinkClick = output<number>();\n\n private terminal!: Terminal;\n private fitAddon!: FitAddon;\n private imageAddon!: ImageAddon;\n private githubLinksAddon!: GitHubLinksAddon;\n private fileLinksAddon!: FileLinksAddon;\n private resizeObserver?: ResizeObserver;\n private lastDataLength = 0;\n /** Tracks how many bytes have been processed (for totalWritten-based diff detection) */\n private lastProcessedLength = 0;\n private readonly terminalInitialized = signal(false);\n /** Tracks if initialization was skipped due to container being too small */\n private initSkippedDueToSize = false;\n /** IDisposable refs for explicit cleanup (prevents memory leaks on mobile) */\n private readonly disposables: IDisposable[] = [];\n /** Timer refs for cleanup in ngOnDestroy */\n private stableTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n super();\n\n // Watch for data input changes (with totalWritten support for buffer overflow handling)\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const rawData = this.store.data();\n const totalWritten = this.store.totalWritten();\n const dataIsFunction = typeof rawData === 'function';\n const data = dataIsFunction ? (rawData as any)() : rawData;\n if (!isInitialized) return;\n\n // Use totalWritten-based logic when available (handles buffer overflow correctly)\n if (totalWritten > 0) {\n this.writeDataWithTotalWritten(data ?? '', totalWritten);\n } else {\n // Legacy fallback for backward compatibility\n this.writeDataToTerminal(data);\n }\n });\n\n // Watch for interactive mode changes and update host class\n // Note: Using effect with classList because @HostBinding doesn't work with OnPush + signals\n effect(() => {\n const isInteractive = this.store.interactive();\n if (isInteractive) {\n this.hostElement.nativeElement.classList.add('interactive');\n } else {\n this.hostElement.nativeElement.classList.remove('interactive');\n }\n });\n\n // Watch for interactive mode changes and update cursor blink\n effect(() => {\n const isInitialized = this.terminalInitialized();\n const isInteractive = this.store.interactive();\n if (!isInitialized || !this.terminal) return;\n\n // Update cursor blink setting\n this.terminal.options.cursorBlink = isInteractive;\n });\n }\n\n private writeDataToTerminal(data: string | undefined): void {\n // Guard against undefined/null/empty data\n // Empty string is treated as \"no data yet\" (from startWith('') in streams)\n // Explicit reset should use the public clear() or reset() methods\n if (data === undefined || data === null || data === '') {\n return;\n }\n // O(1) length comparison instead of O(n) startsWith\n if (data.length >= this.lastDataLength) {\n const newPart = data.slice(this.lastDataLength);\n if (newPart) {\n this.terminal.write(newPart);\n }\n this.lastDataLength = data.length;\n } else {\n // Data got shorter = reset occurred\n this.terminal.reset();\n this.terminal.write(data);\n this.lastDataLength = data.length;\n }\n }\n\n /**\n * Write data using totalWritten for accurate diff detection.\n * This method handles buffer overflow scenarios correctly.\n * When newBytesCount >= data.length, performs a full redraw with terminal.reset()\n * to prevent stale output from previous sessions remaining on screen.\n * @param data The current buffer content\n * @param totalWritten Total bytes written to the buffer (cumulative)\n */\n private writeDataWithTotalWritten(data: string, totalWritten: number): void {\n if (!data) return;\n\n const newBytesCount = totalWritten - this.lastProcessedLength;\n\n if (newBytesCount <= 0) {\n if (totalWritten < this.lastProcessedLength) {\n // Reset detected (totalWritten decreased)\n this.terminal.reset();\n this.terminal.write(data);\n this.lastProcessedLength = totalWritten;\n }\n return;\n }\n\n // Full redraw needed: first render, session switch, or buffer overflow\n // (newBytesCount >= data.length means the diff covers the entire buffer or more)\n if (newBytesCount >= data.length) {\n this.terminal.reset();\n this.terminal.write(data);\n } else {\n // Normal incremental write - extract only new content\n const newContent = data.slice(-newBytesCount);\n if (newContent) {\n this.terminal.write(newContent);\n }\n }\n this.lastProcessedLength = totalWritten;\n }\n\n ngAfterViewInit() {\n const containerElement = this.container().nativeElement;\n\n // Guard against initialization in very small containers (e.g., SR-only 1x1 pixel hidden elements)\n // This prevents FitAddon issues and excessive processing in hidden query sections\n if (containerElement.offsetWidth < MIN_CONTAINER_SIZE || containerElement.offsetHeight < MIN_CONTAINER_SIZE) {\n this.initSkippedDueToSize = true;\n // Retry initialization when container reaches minimum size (e.g., after CSS/layout settles)\n this.resizeObserver = new ResizeObserver(() => {\n if (containerElement.offsetWidth >= MIN_CONTAINER_SIZE && containerElement.offsetHeight >= MIN_CONTAINER_SIZE) {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.initSkippedDueToSize = false;\n this.initializeTerminal(containerElement);\n }\n });\n this.resizeObserver.observe(containerElement);\n return;\n }\n\n this.initializeTerminal(containerElement);\n }\n\n private initializeTerminal(containerElement: HTMLDivElement): void {\n const isInteractive = this.store.interactive();\n const useInteractiveTheme = this.store.useInteractiveTheme() || isInteractive;\n\n this.terminal = new Terminal({\n theme: useInteractiveTheme ? INTERACTIVE_THEME : DISPLAY_THEME,\n scrollback: isInteractive ? 10000 : 1000,\n fontSize: useInteractiveTheme ? 14 : 12,\n fontFamily: '\"FiraCode Nerd Font\", \"Fira Code\", \"SF Mono\", \"Cascadia Code\", \"Consolas\", \"Courier New\", monospace',\n lineHeight: 1.2,\n allowTransparency: false,\n disableStdin: !isInteractive,\n cursorBlink: isInteractive,\n cursorStyle: 'block',\n convertEol: true,\n rows: 24\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n this.terminal.loadAddon(new WebLinksAddon());\n\n // ImageAddon for displaying inline images (SIXEL and iTerm2 IIP support)\n // Loaded dynamically to avoid browser compatibility issues\n this.loadImageAddon();\n\n this.githubLinksAddon = new GitHubLinksAddon((event, issueNumber) => {\n this.dispatch({ id: XtermActionId.GITHUB_LINK_CLICK, payload: issueNumber });\n });\n this.terminal.loadAddon(this.githubLinksAddon);\n\n this.fileLinksAddon = new FileLinksAddon((event, filePath, line, column) => {\n if (event.metaKey || event.ctrlKey) {\n this.dispatch({ id: XtermActionId.FILE_LINK_CLICK, payload: { filePath, line, column } });\n }\n });\n this.terminal.loadAddon(this.fileLinksAddon);\n\n // ProxyLinksAddon: localhost → proxy.machina.at redirect (always loaded)\n this.terminal.loadAddon(new ProxyLinksAddon(\n this.store.getServerUUID ?? (() => undefined),\n this.store.getProxyToken ?? undefined,\n undefined,\n this.store.getDeployVersion ?? undefined,\n ));\n\n this.terminal.open(containerElement);\n\n // Setup event handlers for interactive mode\n if (isInteractive) {\n this.disposables.push(\n this.terminal.onData((data) => {\n this.dispatch({ id: XtermActionId.DATA_INPUT, payload: data });\n }),\n this.terminal.onResize(({ cols, rows }) => this.dispatch({ id: XtermActionId.RESIZED, payload: { cols, rows } })),\n );\n }\n\n // Use ResizeObserver with debounce to wait for container size to stabilize\n // (CSS transitions take 300-500ms, so fixed setTimeout(100ms) is too early)\n this.resizeObserver = new ResizeObserver(() => {\n try {\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n // Debounce: wait for container to stop changing before initializing\n if (this.stableTimer) clearTimeout(this.stableTimer);\n this.stableTimer = setTimeout(() => {\n this.stableTimer = null;\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }, 150);\n } else if (isInteractive) {\n // Debounce resize to wait for CSS transitions to complete (300ms)\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.fitAddon.fit();\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }, 300);\n }\n } catch (e) {\n console.warn('Failed to fit terminal:', e);\n }\n });\n this.resizeObserver.observe(containerElement);\n\n // Fallback: initialize after 500ms if ResizeObserver hasn't triggered stable state\n this.fallbackTimer = setTimeout(() => {\n this.fallbackTimer = null;\n if (!this.terminalInitialized()) {\n this.fitAddon.fit();\n this.markInitialized(isInteractive);\n }\n }, 500);\n }\n\n ngOnDestroy() {\n // Clear pending timers to prevent post-destroy callbacks\n if (this.stableTimer) clearTimeout(this.stableTimer);\n if (this.resizeTimer) clearTimeout(this.resizeTimer);\n if (this.fallbackTimer) clearTimeout(this.fallbackTimer);\n\n this.resizeObserver?.disconnect();\n\n // Dispose xterm event handlers (onData, onResize) to prevent memory leaks\n for (const d of this.disposables) d.dispose();\n this.disposables.length = 0;\n\n // Remove terminal instance from window for E2E testing cleanup\n if (typeof window !== 'undefined' && (window as any).__XTERM_INSTANCES__) {\n const instances = (window as any).__XTERM_INSTANCES__ as Terminal[];\n const index = instances.indexOf(this.terminal);\n if (index !== -1) {\n instances.splice(index, 1);\n }\n }\n\n this.terminal?.dispose();\n }\n\n private markInitialized(isInteractive: boolean): void {\n if (this.terminalInitialized()) return;\n this.terminalInitialized.set(true);\n this.terminalReady.emit(this.terminal);\n\n // Expose terminal instance for E2E testing (only in development/test environments)\n if (typeof window !== 'undefined') {\n (window as any).__XTERM_INSTANCES__ = (window as any).__XTERM_INSTANCES__ || [];\n (window as any).__XTERM_INSTANCES__.push(this.terminal);\n }\n\n // Dispatch initial RESIZED for interactive mode\n if (isInteractive) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n private async loadImageAddon(): Promise<void> {\n try {\n const { ImageAddon } = await import('@xterm/addon-image');\n const imageAddonOptions = {\n enableSizeReports: true,\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n };\n this.imageAddon = new ImageAddon(imageAddonOptions);\n this.terminal.loadAddon(this.imageAddon);\n } catch (e) {\n // ImageAddon not available in browser environment - this is expected\n console.debug('ImageAddon not available:', e);\n }\n }\n\n // Public API\n public write(text: string): void {\n this.terminal?.write(text);\n }\n\n public writeln(text: string): void {\n this.terminal?.writeln(text);\n }\n\n public clear(): void {\n this.terminal?.clear();\n }\n\n public scrollToBottom(): void {\n this.terminal?.scrollToBottom();\n }\n\n public scrollToTop(): void {\n this.terminal?.scrollToTop();\n }\n\n public scrollLines(lines: number): void {\n this.terminal?.scrollLines(lines);\n }\n\n public fit(): void {\n this.fitAddon?.fit();\n // Only dispatch RESIZED after initialization to prevent sending wrong cols/rows\n // during CSS transitions (SessionTemplateV2.ngAfterViewInit calls fit() before layout stabilizes)\n if (this.terminalInitialized() && this.terminal) {\n this.dispatch({ id: XtermActionId.RESIZED, payload: { cols: this.cols, rows: this.rows } });\n }\n }\n\n public get cols(): number {\n return this.terminal?.cols ?? 80;\n }\n\n public get rows(): number {\n return this.terminal?.rows ?? 24;\n }\n\n public getTerminal(): Terminal | undefined {\n // Only expose terminal after fitAddon.fit() has run (terminalInitialized === true)\n return this.terminalInitialized() ? this.terminal : undefined;\n }\n\n /**\n * Display an inline image using iTerm2's Inline Image Protocol\n * @param base64Data Base64 encoded image data (PNG, JPEG, etc.)\n * @param options Image display options\n */\n public displayImage(base64Data: string, options?: {\n width?: string | number; // e.g., '50%', 'auto', or cell count\n height?: string | number; // e.g., '10', 'auto', or cell count\n preserveAspectRatio?: boolean;\n name?: string;\n }): void {\n if (!this.terminal) return;\n\n const args: string[] = ['inline=1'];\n\n if (options?.width) {\n args.push(`width=${options.width}`);\n }\n if (options?.height) {\n args.push(`height=${options.height}`);\n }\n if (options?.preserveAspectRatio !== undefined) {\n args.push(`preserveAspectRatio=${options.preserveAspectRatio ? 1 : 0}`);\n }\n if (options?.name) {\n args.push(`name=${btoa(options.name)}`);\n }\n\n // iTerm2 Inline Image Protocol escape sequence\n const escapeSequence = `\\x1b]1337;File=${args.join(';')}:${base64Data}\\x07`;\n this.terminal.write(escapeSequence);\n }\n\n /**\n * Get the ImageAddon instance for advanced image operations\n */\n public getImageAddon(): ImageAddon | undefined {\n return this.imageAddon;\n }\n}\n","/**\n * Utility functions for displaying images in xterm using SIXEL format\n */\n\nexport interface SvgToSixelOptions {\n width?: number;\n height?: number;\n backgroundColor?: string;\n textColor?: string;\n}\n\n/**\n * Generate ASCII art text using figlet\n * Note: figlet is loaded dynamically as it's not available in browser environments\n */\nexport async function generateAsciiArt(text: string, font = 'ANSI Shadow'): Promise<string> {\n try {\n const figlet = await import('figlet');\n return new Promise((resolve, reject) => {\n figlet.default.text(text, { font: font as any }, (err, result) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(result || '');\n });\n });\n } catch (e) {\n // figlet not available in browser - return simple text\n console.debug('figlet not available:', e);\n return text;\n }\n}\n\n/**\n * Convert ASCII art text to SVG with transparent background\n */\nexport function asciiArtToSvg(\n asciiArt: string,\n options: { textColor?: string; fontSize?: number } = {}\n): string {\n const { textColor = '#00FFFF', fontSize = 14 } = options;\n\n const lines = asciiArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n\n // Calculate dimensions based on monospace font metrics (block chars need more width)\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const width = Math.ceil(maxLineLength * charWidth) + padding;\n const height = Math.ceil(lines.length * lineHeight) + padding;\n\n // Build SVG with text elements for each line\n const textElements = lines.map((line, i) => {\n // Escape special XML characters\n const escapedLine = line\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n return `<text x=\"20\" y=\"${20 + (i + 1) * lineHeight}\" fill=\"${textColor}\" xml:space=\"preserve\">${escapedLine}</text>`;\n }).join('\\n ');\n\n return `<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <style>text { font-family: 'Courier New', Consolas, monospace; font-size: ${fontSize}px; white-space: pre; }</style>\n ${textElements}\n</svg>`;\n}\n\n/**\n * Convert SVG to SIXEL format for xterm display\n */\nexport async function svgToSixel(\n svgString: string,\n options: SvgToSixelOptions = {}\n): Promise<string> {\n const { width = 400, height = 200, backgroundColor } = options;\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Failed to get canvas context'));\n return;\n }\n\n // Fill background (transparent if not specified)\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const img = new Image();\n const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n\n const imageData = ctx.getImageData(0, 0, width, height);\n const sixelData = imageDataToSixel(imageData);\n resolve(sixelData);\n };\n\n img.onerror = (error) => {\n URL.revokeObjectURL(url);\n reject(error);\n };\n\n img.src = url;\n });\n}\n\n/**\n * Convert ImageData to SIXEL escape sequence\n */\nfunction imageDataToSixel(imageData: ImageData): string {\n const { width, height, data } = imageData;\n\n // Build color palette (quantize to 16 colors)\n const palette = buildColorPalette(data, 16);\n const colorMap = new Map<string, number>();\n palette.forEach((color, index) => {\n colorMap.set(color, index);\n });\n\n // SIXEL header\n let sixel = '\\x1bPq';\n\n // Define colors in palette\n palette.forEach((color, index) => {\n const [r, g, b] = hexToRgb(color);\n const rPct = Math.round((r / 255) * 100);\n const gPct = Math.round((g / 255) * 100);\n const bPct = Math.round((b / 255) * 100);\n sixel += `#${index};2;${rPct};${gPct};${bPct}`;\n });\n\n // Process image in bands of 6 rows\n for (let bandY = 0; bandY < height; bandY += 6) {\n for (let colorIdx = 0; colorIdx < palette.length; colorIdx++) {\n const color = palette[colorIdx];\n let rowData = '';\n let hasPixels = false;\n\n rowData += `#${colorIdx}`;\n\n for (let x = 0; x < width; x++) {\n let sixelValue = 0;\n\n for (let dy = 0; dy < 6; dy++) {\n const y = bandY + dy;\n if (y >= height) continue;\n\n const pixelIndex = (y * width + x) * 4;\n const r = data[pixelIndex];\n const g = data[pixelIndex + 1];\n const b = data[pixelIndex + 2];\n const a = data[pixelIndex + 3];\n\n if (a < 128) continue;\n\n const pixelColor = rgbToHex(r, g, b);\n const nearestColor = findNearestColor(pixelColor, palette);\n\n if (nearestColor === color) {\n sixelValue |= (1 << dy);\n hasPixels = true;\n }\n }\n\n rowData += String.fromCharCode(63 + sixelValue);\n }\n\n if (hasPixels) {\n sixel += rowData;\n sixel += '$';\n }\n }\n\n if (bandY + 6 < height) {\n sixel += '-';\n }\n }\n\n sixel += '\\x1b\\\\';\n return sixel;\n}\n\nfunction buildColorPalette(data: Uint8ClampedArray, maxColors: number): string[] {\n const colorCounts = new Map<string, number>();\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n if (a < 128) continue;\n\n const qr = Math.floor(r / 16) * 16;\n const qg = Math.floor(g / 16) * 16;\n const qb = Math.floor(b / 16) * 16;\n const color = rgbToHex(qr, qg, qb);\n\n colorCounts.set(color, (colorCounts.get(color) || 0) + 1);\n }\n\n return Array.from(colorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, maxColors)\n .map(([color]) => color);\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const match = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n if (!match) return [0, 0, 0];\n return [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16)];\n}\n\nfunction findNearestColor(targetHex: string, palette: string[]): string {\n const [tr, tg, tb] = hexToRgb(targetHex);\n let nearest = palette[0];\n let minDist = Infinity;\n\n for (const color of palette) {\n const [r, g, b] = hexToRgb(color);\n const dist = (tr - r) ** 2 + (tg - g) ** 2 + (tb - b) ** 2;\n if (dist < minDist) {\n minDist = dist;\n nearest = color;\n }\n }\n\n return nearest;\n}\n\n/**\n * Generate MACHINA ASCII art banner as SIXEL\n */\nexport async function getMachinaAsciiArtSixel(\n options: SvgToSixelOptions = {}\n): Promise<string> {\n // Generate ASCII art for \"MACHINA\"\n const machinaArt = await generateAsciiArt('MACHINA', 'ANSI Shadow');\n\n // Convert to SVG with cyan color (terminal style)\n const fontSize = 14;\n const svg = asciiArtToSvg(machinaArt, {\n textColor: options.textColor || '#00FFFF',\n fontSize\n });\n\n // Calculate appropriate dimensions matching asciiArtToSvg calculation\n const lines = machinaArt.split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length));\n const charWidth = fontSize * 0.65;\n const lineHeight = fontSize * 1.4;\n const padding = 40;\n const defaultWidth = Math.ceil(maxLineLength * charWidth) + padding;\n const defaultHeight = Math.ceil(lines.length * lineHeight) + padding;\n\n return svgToSixel(svg, {\n width: options.width || defaultWidth,\n height: options.height || defaultHeight,\n backgroundColor: options.backgroundColor || '#0a0a0a',\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -428,7 +428,7 @@ class CommandPage extends NgAtomicComponent {
428
428
  </frames-tabs>
429
429
  </templates-form>
430
430
  </frames-router-outlet>
431
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-ULqt: var(--page-width-lv1);--primary-color-SCOPED-IN-command-ULqt: var(--primary-color);--on-primary-color-SCOPED-IN-command-ULqt: var(--on-primary-color);--background-color-SCOPED-IN-command-ULqt: var(--background-color);--on-background-color-SCOPED-IN-command-ULqt: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-ULqt)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-ULqt);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-ULqt);--background-color: var(--background-color-SCOPED-IN-command-ULqt);--on-background-color: var(--on-background-color-SCOPED-IN-command-ULqt)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: FormTemplate, selector: "templates-form" }, { kind: "component", type: TabsFrame, selector: "frames-tabs", inputs: ["labels"], outputs: ["selectedTabIndexChange"] }, { kind: "component", type: CommandFormGroup, selector: "groups-command-form", inputs: ["apiJsonUrls"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }] });
431
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-lM0S: var(--page-width-lv1);--primary-color-SCOPED-IN-command-lM0S: var(--primary-color);--on-primary-color-SCOPED-IN-command-lM0S: var(--on-primary-color);--background-color-SCOPED-IN-command-lM0S: var(--background-color);--on-background-color-SCOPED-IN-command-lM0S: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-lM0S)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-lM0S);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-lM0S);--background-color: var(--background-color-SCOPED-IN-command-lM0S);--on-background-color: var(--on-background-color-SCOPED-IN-command-lM0S)}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: FormTemplate, selector: "templates-form" }, { kind: "component", type: TabsFrame, selector: "frames-tabs", inputs: ["labels"], outputs: ["selectedTabIndexChange"] }, { kind: "component", type: CommandFormGroup, selector: "groups-command-form", inputs: ["apiJsonUrls"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }] });
432
432
  }
433
433
  __decorate([
434
434
  Effect(FormTemplateStore.ActionId.FILE_SELECTED),
@@ -491,7 +491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
491
491
  'actions',
492
492
  ]
493
493
  },
494
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-ULqt: var(--page-width-lv1);--primary-color-SCOPED-IN-command-ULqt: var(--primary-color);--on-primary-color-SCOPED-IN-command-ULqt: var(--on-primary-color);--background-color-SCOPED-IN-command-ULqt: var(--background-color);--on-background-color-SCOPED-IN-command-ULqt: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-ULqt)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-ULqt);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-ULqt);--background-color: var(--background-color-SCOPED-IN-command-ULqt);--on-background-color: var(--on-background-color-SCOPED-IN-command-ULqt)}\n"] }]
494
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-command-lM0S: var(--page-width-lv1);--primary-color-SCOPED-IN-command-lM0S: var(--primary-color);--on-primary-color-SCOPED-IN-command-lM0S: var(--on-primary-color);--background-color-SCOPED-IN-command-lM0S: var(--background-color);--on-background-color-SCOPED-IN-command-lM0S: var(--on-background-color)}:host templates-form{padding-left:0;box-sizing:border-box;transition:padding-left .3s}:host .template{--first-content-height: 0px;width:var(--page-width-lv1-SCOPED-IN-command-lM0S)}:host .template div[dashboard]{padding:0;box-sizing:border-box}:host *{--primary-color: var(--primary-color-SCOPED-IN-command-lM0S);--on-primary-color: var(--on-primary-color-SCOPED-IN-command-lM0S);--background-color: var(--background-color-SCOPED-IN-command-lM0S);--on-background-color: var(--on-background-color-SCOPED-IN-command-lM0S)}\n"] }]
495
495
  }], propDecorators: { onFileSelected: [] } });
496
496
 
497
497
  /**
@@ -738,7 +738,7 @@ class QueryPage extends NgAtomicComponent {
738
738
  <groups-query-form dashboard (action)="dispatch($event)" />
739
739
  </templates-index>
740
740
  </frames-router-outlet>
741
- `, isInline: true, styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-RRLB: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-RRLB: var(--page-width-lv3);--primary-color-SCOPED-IN-query-RRLB: var(--primary-color);--on-primary-color-SCOPED-IN-query-RRLB: var(--on-primary-color);--surface-color-SCOPED-IN-query-RRLB: var(--surface-color);--on-surface-color-SCOPED-IN-query-RRLB: var(--on-surface-color);--on-background-color-SCOPED-IN-query-RRLB: var(--on-background-color);--background-color-SCOPED-IN-query-RRLB: var(--background-color);--navigator-background-color-SCOPED-IN-query-RRLB: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-RRLB: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-RRLB: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-RRLB: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-RRLB: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-RRLB);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-RRLB);--surface-color: var(--surface-color-SCOPED-IN-query-RRLB);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-RRLB);--background-color: var(--background-color-SCOPED-IN-query-RRLB);--on-background-color: var(--on-background-color-SCOPED-IN-query-RRLB);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-RRLB);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-RRLB);--table-background-color: var(--table-background-color-SCOPED-IN-query-RRLB);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-RRLB);--is-debug: var(--is-debug-SCOPED-IN-query-RRLB)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-RRLB) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"], dependencies: [{ kind: "component", type: IndexTemplate, selector: "templates-index" }, { kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: NgAtomicFormSectionBuilder, selector: "ng-atomic-form-section-builder", inputs: ["form", "formFlatExcludes", "fieldMap", "fieldKeys"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
741
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-8Rol: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-8Rol: var(--page-width-lv3);--primary-color-SCOPED-IN-query-8Rol: var(--primary-color);--on-primary-color-SCOPED-IN-query-8Rol: var(--on-primary-color);--surface-color-SCOPED-IN-query-8Rol: var(--surface-color);--on-surface-color-SCOPED-IN-query-8Rol: var(--on-surface-color);--on-background-color-SCOPED-IN-query-8Rol: var(--on-background-color);--background-color-SCOPED-IN-query-8Rol: var(--background-color);--navigator-background-color-SCOPED-IN-query-8Rol: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-8Rol: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-8Rol: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-8Rol: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-8Rol: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-8Rol);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-8Rol);--surface-color: var(--surface-color-SCOPED-IN-query-8Rol);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-8Rol);--background-color: var(--background-color-SCOPED-IN-query-8Rol);--on-background-color: var(--on-background-color-SCOPED-IN-query-8Rol);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-8Rol);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-8Rol);--table-background-color: var(--table-background-color-SCOPED-IN-query-8Rol);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-8Rol);--is-debug: var(--is-debug-SCOPED-IN-query-8Rol)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-8Rol) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"], dependencies: [{ kind: "component", type: IndexTemplate, selector: "templates-index" }, { kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: NgAtomicFormSectionBuilder, selector: "ng-atomic-form-section-builder", inputs: ["form", "formFlatExcludes", "fieldMap", "fieldKeys"] }, { kind: "component", type: QueryFormGroup, selector: "groups-query-form", inputs: ["form", "keyActions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
742
742
  }
743
743
  __decorate([
744
744
  Effect(IndexTemplateStore.ActionId.BACK),
@@ -819,7 +819,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
819
819
  'pageSizeOptions'
820
820
  ]
821
821
  },
822
- ], styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-RRLB: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-RRLB: var(--page-width-lv3);--primary-color-SCOPED-IN-query-RRLB: var(--primary-color);--on-primary-color-SCOPED-IN-query-RRLB: var(--on-primary-color);--surface-color-SCOPED-IN-query-RRLB: var(--surface-color);--on-surface-color-SCOPED-IN-query-RRLB: var(--on-surface-color);--on-background-color-SCOPED-IN-query-RRLB: var(--on-background-color);--background-color-SCOPED-IN-query-RRLB: var(--background-color);--navigator-background-color-SCOPED-IN-query-RRLB: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-RRLB: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-RRLB: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-RRLB: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-RRLB: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-RRLB);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-RRLB);--surface-color: var(--surface-color-SCOPED-IN-query-RRLB);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-RRLB);--background-color: var(--background-color-SCOPED-IN-query-RRLB);--on-background-color: var(--on-background-color-SCOPED-IN-query-RRLB);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-RRLB);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-RRLB);--table-background-color: var(--table-background-color-SCOPED-IN-query-RRLB);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-RRLB);--is-debug: var(--is-debug-SCOPED-IN-query-RRLB)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-RRLB) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"] }]
822
+ ], styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-8Rol: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-8Rol: var(--page-width-lv3);--primary-color-SCOPED-IN-query-8Rol: var(--primary-color);--on-primary-color-SCOPED-IN-query-8Rol: var(--on-primary-color);--surface-color-SCOPED-IN-query-8Rol: var(--surface-color);--on-surface-color-SCOPED-IN-query-8Rol: var(--on-surface-color);--on-background-color-SCOPED-IN-query-8Rol: var(--on-background-color);--background-color-SCOPED-IN-query-8Rol: var(--background-color);--navigator-background-color-SCOPED-IN-query-8Rol: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-8Rol: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-8Rol: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-8Rol: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-8Rol: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-8Rol);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-8Rol);--surface-color: var(--surface-color-SCOPED-IN-query-8Rol);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-8Rol);--background-color: var(--background-color-SCOPED-IN-query-8Rol);--on-background-color: var(--on-background-color-SCOPED-IN-query-8Rol);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-8Rol);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-8Rol);--table-background-color: var(--table-background-color-SCOPED-IN-query-8Rol);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-8Rol);--is-debug: var(--is-debug-SCOPED-IN-query-8Rol)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-8Rol) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\n"] }]
823
823
  }], ctorParameters: () => [], propDecorators: { template: [{ type: i0.ViewChild, args: [i0.forwardRef(() => IndexTemplate), { isSignal: true }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], back: [], navigateToIframe: [], expandPage: [], itemClick: [] } });
824
824
 
825
825
  /**
@@ -120,7 +120,7 @@ class ThreadPage extends NgAtomicComponent {
120
120
  (action)="dispatch($event)"
121
121
  />
122
122
  </frames-router-outlet>
123
- `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-MBLE: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-MBLE: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-MBLE: var(--primary-color);--on-primary-color-SCOPED-IN-thread-MBLE: var(--on-primary-color);--surface-color-SCOPED-IN-thread-MBLE: var(--surface-color);--on-surface-color-SCOPED-IN-thread-MBLE: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-MBLE: var(--on-background-color);--background-color-SCOPED-IN-thread-MBLE: var(--background-color);--navigator-background-color-SCOPED-IN-thread-MBLE: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-MBLE: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-MBLE: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-MBLE: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-MBLE)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: ThreadTemplate, selector: "templates-messages" }] });
123
+ `, isInline: true, styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-edmz: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-edmz: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-edmz: var(--primary-color);--on-primary-color-SCOPED-IN-thread-edmz: var(--on-primary-color);--surface-color-SCOPED-IN-thread-edmz: var(--surface-color);--on-surface-color-SCOPED-IN-thread-edmz: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-edmz: var(--on-background-color);--background-color-SCOPED-IN-thread-edmz: var(--background-color);--navigator-background-color-SCOPED-IN-thread-edmz: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-edmz: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-edmz: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-edmz: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-edmz)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"], dependencies: [{ kind: "component", type: RouterOutletFrame, selector: "frames-router-outlet", outputs: ["events"] }, { kind: "component", type: ThreadTemplate, selector: "templates-messages" }] });
124
124
  }
125
125
  __decorate([
126
126
  Effect(ActionId.SEND_MESSAGE),
@@ -153,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
153
153
  'messages',
154
154
  ]
155
155
  },
156
- ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-MBLE: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-MBLE: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-MBLE: var(--primary-color);--on-primary-color-SCOPED-IN-thread-MBLE: var(--on-primary-color);--surface-color-SCOPED-IN-thread-MBLE: var(--surface-color);--on-surface-color-SCOPED-IN-thread-MBLE: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-MBLE: var(--on-background-color);--background-color-SCOPED-IN-thread-MBLE: var(--background-color);--navigator-background-color-SCOPED-IN-thread-MBLE: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-MBLE: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-MBLE: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-MBLE: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-MBLE)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"] }]
156
+ ], styles: [":host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-thread-edmz: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-thread-edmz: var(--page-width-lv3);--primary-color-SCOPED-IN-thread-edmz: var(--primary-color);--on-primary-color-SCOPED-IN-thread-edmz: var(--on-primary-color);--surface-color-SCOPED-IN-thread-edmz: var(--surface-color);--on-surface-color-SCOPED-IN-thread-edmz: var(--on-surface-color);--on-background-color-SCOPED-IN-thread-edmz: var(--on-background-color);--background-color-SCOPED-IN-thread-edmz: var(--background-color);--navigator-background-color-SCOPED-IN-thread-edmz: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-thread-edmz: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-thread-edmz: var(--table-background-color);--table-on-background-color-SCOPED-IN-thread-edmz: var(--table-on-background-color)}:host .template{width:var(--page-width-lv1-SCOPED-IN-thread-edmz)}:host .chat-container{display:flex;flex-direction:column;height:100%}:host .message{padding:10px;border-bottom:1px solid #ccc}\n"] }]
157
157
  }], propDecorators: { onCompositionStart: [{
158
158
  type: HostListener,
159
159
  args: ['compositionstart', ['$event']]
@@ -472,7 +472,7 @@ class AgentTemplate extends NgAtomicComponent {
472
472
  </div>
473
473
  </div>
474
474
  </frames-scroll>
475
- `, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-kJta: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-kJta: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-kJta: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-kJta: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-kJta: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-kJta);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-kJta);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-kJta);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-kJta);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-kJta);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-kJta);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-kJta);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-kJta);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-kJta)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-kJta),0 0 20px var(--accent-SCOPED-IN-entrance-kJta);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ScrollFrame, selector: "frames-scroll" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }, { kind: "directive", type: NavigatorOrganismStore, selector: "organisms-navigator", inputs: ["startActions", "endActions", "title"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
475
+ `, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-70Ww: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-70Ww: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-70Ww: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-70Ww: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-70Ww: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-70Ww);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-70Ww);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-70Ww);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-70Ww);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-70Ww);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-70Ww);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-70Ww);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-70Ww);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-70Ww)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-70Ww),0 0 20px var(--accent-SCOPED-IN-entrance-70Ww);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ScrollFrame, selector: "frames-scroll" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }, { kind: "directive", type: NavigatorOrganismStore, selector: "organisms-navigator", inputs: ["startActions", "endActions", "title"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
476
476
  }
477
477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AgentTemplate, decorators: [{
478
478
  type: Component,
@@ -553,7 +553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
553
553
  'fieldMap',
554
554
  ],
555
555
  },
556
- ], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-kJta: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-kJta: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-kJta: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-kJta: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-kJta: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-kJta);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-kJta);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-kJta);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-kJta);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-kJta);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-kJta);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-kJta);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-kJta);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-kJta)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-kJta),0 0 20px var(--accent-SCOPED-IN-entrance-kJta);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
556
+ ], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-70Ww: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-70Ww: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-70Ww: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-70Ww: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-70Ww: var(--border)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}:host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:transparent;font-family:SF Mono,Monaco,monospace;container-type:inline-size;container-name:agent-container;transition:all .3s ease}.terminal-window{--height: 100%;--contents-gap: 0;width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-70Ww);border-radius:8px;box-shadow:0 20px 40px #0000004d;animation:fadeIn .3s;transition:all .3s ease}.terminal-header{display:flex;justify-content:space-between;align-items:center;height:56px;min-height:56px;flex-shrink:0;padding:0;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-70Ww);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-70Ww);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-70Ww);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-70Ww);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-70Ww);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-70Ww);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .3s ease;padding:16px 20px}.input-line{display:block;position:relative}.input-line .input-prefix{display:none}.input-line .textarea-wrapper{display:flex;align-items:flex-start;position:relative;border:1px solid rgba(255,255,255,.2);border-radius:4px;transition:border-color .2s ease}.input-line .textarea-wrapper:focus-within{border-color:#fff6}.input-line .textarea-wrapper .arrow-prefix{color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;padding:12px 0 12px 16px;flex-shrink:0;pointer-events:none}.input-line .textarea-wrapper .input-container{flex:1;position:relative;overflow:hidden}.input-line .textarea-wrapper .terminal-input{width:100%;background:transparent;border:none;outline:none;color:#e0e0e0;font-family:SF Mono,Monaco,monospace;font-size:14px;font-weight:400;caret-color:transparent;padding:12px 16px 12px 8px;transition:none;resize:none;height:44px;min-height:44px;max-height:200px;overflow-y:auto;overflow-x:hidden;line-height:20px;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.input-line .textarea-wrapper .terminal-input{caret-shape:block}.input-line .textarea-wrapper .terminal-input:disabled{opacity:.5;cursor:not-allowed}.input-line .textarea-wrapper .terminal-input:-webkit-autofill{-webkit-text-fill-color:#e0e0e0;-webkit-box-shadow:0 0 0 1000px rgba(0,0,0,.9) inset}.input-line .textarea-wrapper .terminal-input::placeholder{color:#ffffff4d;opacity:1}.input-line .textarea-wrapper .block-cursor{position:absolute;width:10px;height:20px;background:#e0e0e0;opacity:0;pointer-events:none}.input-line .textarea-wrapper .block-cursor.visible{animation:blink 1s infinite}@keyframes blink{0%,50%{opacity:.8}51%,to{opacity:0}}:host:has(.terminal-window){height:100vh;height:100dvh;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0;padding-top:env(safe-area-inset-top)}.terminal-window{height:100%;max-height:100vh;max-height:100dvh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0}.terminal-header .terminal-title{font-size:12px}.terminal-header .terminal-status{font-size:11px}.terminal-header .close-button{margin-right:.25rem}}@container agent-container (min-width: 601px) and (max-width: 900px){.terminal-window{max-width:100%;height:100%;border-radius:0}}@container agent-container (max-width: 400px){.terminal-header{height:56px;padding:0}.terminal-header .close-button{margin-right:.2rem}.input-area{padding:12px 16px}.textarea-wrapper .arrow-prefix{font-size:13px;padding:10px 0 10px 12px}.textarea-wrapper .terminal-input{font-size:12px;padding:10px 12px 10px 6px;height:40px;min-height:40px;line-height:20px}}.ascii-art{font-family:Consolas,Monaco,Liberation Mono,Menlo,Courier New,monospace!important;font-size:10px!important;line-height:1.1!important;letter-spacing:0!important;font-weight:400!important;margin:1em 0!important;padding:1em!important;white-space:pre!important;overflow-x:auto!important;overflow-y:hidden!important;display:block!important;width:fit-content!important;background:#ffffff08;border:1px solid var(--border-SCOPED-IN-entrance-70Ww);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-70Ww)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-70Ww),0 0 20px var(--accent-SCOPED-IN-entrance-70Ww);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
557
557
  }], propDecorators: { endActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "endActions", required: false }] }], xtermComponent: [{ type: i0.ViewChild, args: ['xtermComponent', { isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: ['inputField', { isSignal: true }] }], onWindowResize: [{
558
558
  type: HostListener,
559
559
  args: ['window:resize']
@@ -235,7 +235,7 @@ class SessionNavigatorOrganism extends NgAtomicComponent {
235
235
  }
236
236
  </div>
237
237
  </mat-toolbar>
238
- `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-ccZU: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-ccZU: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-ccZU: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-ccZU: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-ccZU: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-ccZU: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-ccZU: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-ccZU: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-ccZU: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-ccZU);color:var(--on-primary-color-SCOPED-IN-session-navigator-ccZU);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-ccZU)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-ccZU)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-ccZU)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-ccZU)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-ccZU)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-ccZU)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-ccZU: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-ccZU: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-ccZU: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
238
+ `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-RvBK: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-RvBK: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-RvBK: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-RvBK: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-RvBK: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-RvBK: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-RvBK: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-RvBK: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-RvBK: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-RvBK);color:var(--on-primary-color-SCOPED-IN-session-navigator-RvBK);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-RvBK)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-RvBK)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-RvBK)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-RvBK)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-RvBK)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-RvBK)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-RvBK: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-RvBK: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-RvBK: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
239
239
  }
240
240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SessionNavigatorOrganism, decorators: [{
241
241
  type: Component,
@@ -269,7 +269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
269
269
  directive: SessionNavigatorOrganismStore,
270
270
  inputs: ['startActions', 'endActions', 'title'],
271
271
  }
272
- ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-ccZU: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-ccZU: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-ccZU: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-ccZU: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-ccZU: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-ccZU: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-ccZU: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-ccZU: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-ccZU: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-ccZU);color:var(--on-primary-color-SCOPED-IN-session-navigator-ccZU);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-ccZU)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-ccZU)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-ccZU)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-ccZU)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-ccZU)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-ccZU)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-ccZU: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-ccZU: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-ccZU: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
272
+ ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-RvBK: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-RvBK: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-RvBK: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-RvBK: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-RvBK: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-RvBK: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-RvBK: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-RvBK: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-RvBK: var(--on-background-color)}:host{display:block;width:100%;height:56px}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-RvBK);color:var(--on-primary-color-SCOPED-IN-session-navigator-RvBK);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-RvBK)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-RvBK)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-RvBK)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-RvBK)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-RvBK)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-RvBK)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-RvBK: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-RvBK: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-RvBK: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
273
273
  }] });
274
274
 
275
275
  var InvoiceAppActionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xxmachina/components",
3
- "version": "19.36.0",
3
+ "version": "19.37.0",
4
4
  "license": "MIT",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -14,6 +14,10 @@ declare enum XtermActionId {
14
14
  }
15
15
  /** DI token for providing serverUUID getter to ProxyLinksAddon */
16
16
  declare const XTERM_SERVER_UUID: InjectionToken<() => string | undefined>;
17
+ /** DI token for providing CLI token getter to ProxyLinksAddon */
18
+ declare const XTERM_PROXY_TOKEN: InjectionToken<() => string | undefined>;
19
+ /** DI token for providing deploy version getter to ProxyLinksAddon */
20
+ declare const XTERM_DEPLOY_VERSION: InjectionToken<() => string | null | undefined>;
17
21
  declare class XtermOrganismStore extends InjectableComponent {
18
22
  static readonly DI: {
19
23
  provide: (typeOrComponent: Parameters<(typeOrFactory: _ng_atomic_core.TypeOrTypeFactory<any>) => {
@@ -88,6 +92,10 @@ declare class XtermOrganismStore extends InjectableComponent {
88
92
  readonly totalWritten: _angular_core.InputSignal<number>;
89
93
  /** Injected serverUUID getter for proxy links (optional) */
90
94
  readonly getServerUUID: (() => string | undefined) | null;
95
+ /** Injected CLI token getter for proxy link auto-auth (optional) */
96
+ readonly getProxyToken: (() => string | undefined) | null;
97
+ /** Injected deploy version getter for proxy URL host suffix (optional) */
98
+ readonly getDeployVersion: (() => string | null | undefined) | null;
91
99
  constructor();
92
100
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<XtermOrganismStore, never>;
93
101
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XtermOrganismStore, "organisms-xterm", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "queryResult": { "alias": "queryResult"; "required": false; "isSignal": true; }; "useInteractiveTheme": { "alias": "useInteractiveTheme"; "required": false; "isSignal": true; }; "totalWritten": { "alias": "totalWritten"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -198,14 +206,30 @@ declare class WebLinksAddon implements ITerminalAddon {
198
206
  }
199
207
 
200
208
  type ServerUUIDGetter = () => string | undefined;
209
+ type TokenGetter = () => string | undefined;
210
+ type DeployVersionGetter = () => string | null | undefined;
211
+ /**
212
+ * deployVersion を proxy.machina.at のサブドメイン suffix に変換。
213
+ *
214
+ * 変換ルール:
215
+ * - null / 'stable' → '' (suffix なし)
216
+ * - 'pr-{N}' → '--pr-{N}'
217
+ * - 'dev' / 'develop' → '--dev'
218
+ * - 'v{X.Y.Z}' / 'v{X.Y.Z-pre.N}' → '--v{X-Y-Z}[--pre-N]' (dot → dash)
219
+ * - 'X.Y.Z' (v prefix なし) → 同上
220
+ * - その他 → '' (fallback)
221
+ */
222
+ declare function deployVersionToHostSuffix(version: string | null | undefined): string;
201
223
  declare class ProxyLinkProvider implements ILinkProvider {
202
224
  private readonly _terminal;
203
225
  private readonly _getServerUUID;
226
+ private readonly _getToken?;
204
227
  private readonly _handler;
205
- constructor(_terminal: Terminal, _getServerUUID: ServerUUIDGetter, _handler?: (event: MouseEvent, proxyUrl: string) => void);
228
+ private readonly _getDeployVersion?;
229
+ constructor(_terminal: Terminal, _getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: (event: MouseEvent, proxyUrl: string) => void, _getDeployVersion?: DeployVersionGetter | undefined);
206
230
  provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void;
207
231
  }
208
- declare function toProxyUrl(serverUUID: string, localhostUrl: string): string | null;
232
+ declare function toProxyUrl(serverUUID: string, localhostUrl: string, deployVersion?: string | null): string | null;
209
233
 
210
234
  /**
211
235
  * xterm.js addon: localhost URLをmachina web proxyにリダイレクトするリンクを表示。
@@ -218,9 +242,11 @@ declare function toProxyUrl(serverUUID: string, localhostUrl: string): string |
218
242
  */
219
243
  declare class ProxyLinksAddon implements ITerminalAddon {
220
244
  private readonly _getServerUUID;
245
+ private readonly _getToken?;
221
246
  private readonly _handler?;
247
+ private readonly _getDeployVersion?;
222
248
  private _linkProvider?;
223
- constructor(_getServerUUID: ServerUUIDGetter, _handler?: ((event: MouseEvent, proxyUrl: string) => void) | undefined);
249
+ constructor(_getServerUUID: ServerUUIDGetter, _getToken?: TokenGetter | undefined, _handler?: ((event: MouseEvent, proxyUrl: string) => void) | undefined, _getDeployVersion?: DeployVersionGetter | undefined);
224
250
  activate(terminal: Terminal): void;
225
251
  dispose(): void;
226
252
  }
@@ -255,6 +281,6 @@ declare function svgToSixel(svgString: string, options?: SvgToSixelOptions): Pro
255
281
  */
256
282
  declare function getMachinaAsciiArtSixel(options?: SvgToSixelOptions): Promise<string>;
257
283
 
258
- export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
259
- export type { GitHubLinkActivateHandler, ServerUUIDGetter, SvgToSixelOptions };
284
+ export { GitHubLinkProvider, GitHubLinksAddon, ProxyLinkProvider, ProxyLinksAddon, WebLinksAddon, XTERM_DEPLOY_VERSION, XTERM_PROXY_TOKEN, XTERM_SERVER_UUID, XtermActionId, XtermOrganism, XtermOrganismStore, asciiArtToSvg, deployVersionToHostSuffix, generateAsciiArt, getMachinaAsciiArtSixel, svgToSixel, toProxyUrl };
285
+ export type { DeployVersionGetter, GitHubLinkActivateHandler, ServerUUIDGetter, SvgToSixelOptions, TokenGetter };
260
286
  //# sourceMappingURL=xxmachina-components-organisms-xterm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-organisms-xterm.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;AAIA;AACE;AACA;AACA;AACA;AACA;AACD;AAED;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO4C;AAE1C;;;;;AAAuD;;;;;;;AAQvD;;;;AAMD;;AC3BD;AAkDA;;AAcE;AACA;;;;;;;;;;;;AAcA;;;;AAIA;;;;;;AAiDA;AAsBA;;;;;;;AAOG;AACH;;AAqDA;;AAqHA;;AAmCO;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;;;;AAsBP;;;;AAIG;AACI;AACL;AACA;;;AAGD;AAuBD;;AAEG;;;;AAIJ;;;;AC3cA;AAED;;;AAEE;AAGmB;AAInB;AA0CA;AAyBD;;AC/ED;;;;AAKqB;AAGnB;AAOA;AAGD;;AClBD;;;;AAIG;AACH;AAII;;AAAiB;AAGnB;AAMA;AAGD;;;ACVD;;;;AAEqB;AAOnB;AA4CD;AAED;;AClEA;;;;;;;;AAQG;AACH;;AAKI;;AADiB;AAInB;AAMA;AAGD;;AC7BD;;AAEG;;;;;;AAOF;AAED;;;AAGG;AACH;AAmBA;;AAEG;AACH;;;AAEyD;AAgCzD;;AAEG;AACH;AA6KA;;AAEG;AACH;;;"}
1
+ {"version":3,"file":"xxmachina-components-organisms-xterm.d.ts","sources":["../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.store.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/xterm.organism.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/github-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/web-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-link.provider.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/proxy-links.addon.ts","../../../../../packages/@xxmachina/components/src/lib/organisms/xterm/image.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;AAIA;AACE;AACA;AACA;AACA;AACA;AACD;AAED;AACA;AAEA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO4C;AAE1C;;;;;AAAuD;;;;;;;AAQvD;;AAGA;;;;;;AASD;;ACvCD;AAkDA;;AAcE;AACA;;;;;;;;;;;;AAcA;;;;AAIA;;;;;;AAiDA;AAsBA;;;;;;;AAOG;AACH;;AAqDA;;AAwHA;;AAmCO;AAIA;AAIA;AAIA;AAIA;AAIA;AAIA;;;;AAsBP;;;;AAIG;AACI;AACL;AACA;;;AAGD;AAuBD;;AAEG;;;;AAIJ;;;;AC9cA;AAED;;;AAEE;AAGmB;AAInB;AA0CA;AAyBD;;AC/ED;;;;AAKqB;AAGnB;AAOA;AAGD;;AClBD;;;;AAIG;AACH;AAII;;AAAiB;AAGnB;AAMA;AAGD;;;;ACLK;AAEN;;;;;;;;;;AAUG;AACH;AAiBA;;;AAII;;AAIA;AANiB;AASnB;AAkED;AAED;;AC7HA;;;;;;;;AAQG;AACH;;AAKI;AACA;AACA;;AAHiB;AAMnB;AAYA;AAGD;;ACrCD;;AAEG;;;;;;AAOF;AAED;;;AAGG;AACH;AAmBA;;AAEG;AACH;;;AAEyD;AAgCzD;;AAEG;AACH;AA6KA;;AAEG;AACH;;;"}