@xxmachina/components 19.21.8 → 19.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/extras/flow/index.d.ts +13 -3
  2. package/extras/flow/index.d.ts.map +1 -1
  3. package/features/query/index.d.ts.map +1 -1
  4. package/fesm2022/xxmachina-components-extras-flow.mjs +110 -11
  5. package/fesm2022/xxmachina-components-extras-flow.mjs.map +1 -1
  6. package/fesm2022/xxmachina-components-groups-query-form.mjs.map +1 -1
  7. package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs +117 -0
  8. package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs.map +1 -0
  9. package/fesm2022/xxmachina-components-molecules-weekly-header.mjs +2 -2
  10. package/fesm2022/xxmachina-components-molecules-weekly-header.mjs.map +1 -1
  11. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs +2 -2
  12. package/fesm2022/xxmachina-components-organisms-calendar-section.mjs.map +1 -1
  13. package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs +19 -4
  14. package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs.map +1 -1
  15. package/fesm2022/xxmachina-components-organisms-xterm.mjs +849 -49
  16. package/fesm2022/xxmachina-components-organisms-xterm.mjs.map +1 -1
  17. package/fesm2022/xxmachina-components-pages-command-harness.mjs +28 -0
  18. package/fesm2022/xxmachina-components-pages-command-harness.mjs.map +1 -0
  19. package/fesm2022/xxmachina-components-pages-command.mjs +10 -6
  20. package/fesm2022/xxmachina-components-pages-command.mjs.map +1 -1
  21. package/fesm2022/xxmachina-components-pages-query.mjs +2 -2
  22. package/fesm2022/xxmachina-components-pages-query.mjs.map +1 -1
  23. package/fesm2022/xxmachina-components-pages-thread.mjs +2 -2
  24. package/fesm2022/xxmachina-components-pages-thread.mjs.map +1 -1
  25. package/fesm2022/xxmachina-components-services-message.mjs.map +1 -1
  26. package/fesm2022/xxmachina-components-templates-agent.mjs +151 -123
  27. package/fesm2022/xxmachina-components-templates-agent.mjs.map +1 -1
  28. package/fesm2022/xxmachina-components-templates-background.mjs +376 -242
  29. package/fesm2022/xxmachina-components-templates-background.mjs.map +1 -1
  30. package/fesm2022/xxmachina-components-templates-flow-nodes-group.mjs +164 -0
  31. package/fesm2022/xxmachina-components-templates-flow-nodes-group.mjs.map +1 -0
  32. package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs +157 -0
  33. package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs.map +1 -0
  34. package/fesm2022/xxmachina-components-templates-flow-nodes-task.mjs +154 -0
  35. package/fesm2022/xxmachina-components-templates-flow-nodes-task.mjs.map +1 -0
  36. package/fesm2022/xxmachina-components-templates-flow.mjs +337 -0
  37. package/fesm2022/xxmachina-components-templates-flow.mjs.map +1 -0
  38. package/fesm2022/xxmachina-components.mjs +2 -2
  39. package/fesm2022/xxmachina-components.mjs.map +1 -1
  40. package/groups/query-form/index.d.ts +3 -4
  41. package/groups/query-form/index.d.ts.map +1 -1
  42. package/index.d.ts.map +1 -1
  43. package/molecules/inline-edit-field/index.d.ts +32 -0
  44. package/molecules/inline-edit-field/index.d.ts.map +1 -0
  45. package/organisms/terminal-input-section/index.d.ts +2 -1
  46. package/organisms/terminal-input-section/index.d.ts.map +1 -1
  47. package/organisms/xterm/index.d.ts +176 -4
  48. package/organisms/xterm/index.d.ts.map +1 -1
  49. package/package.json +29 -13
  50. package/pages/command/harness/index.d.ts +14 -0
  51. package/pages/command/harness/index.d.ts.map +1 -0
  52. package/pages/command/index.d.ts +12 -4
  53. package/pages/command/index.d.ts.map +1 -1
  54. package/pages/query/index.d.ts +2 -2
  55. package/pages/query/index.d.ts.map +1 -1
  56. package/pages/query-v2/index.d.ts.map +1 -1
  57. package/services/command/index.d.ts.map +1 -1
  58. package/services/message/index.d.ts +3 -3
  59. package/services/message/index.d.ts.map +1 -1
  60. package/templates/agent/index.d.ts +11 -2
  61. package/templates/agent/index.d.ts.map +1 -1
  62. package/templates/background/index.d.ts +14 -20
  63. package/templates/background/index.d.ts.map +1 -1
  64. package/templates/flow/index.d.ts +61 -0
  65. package/templates/flow/index.d.ts.map +1 -0
  66. package/templates/flow/nodes/group/index.d.ts +44 -0
  67. package/templates/flow/nodes/group/index.d.ts.map +1 -0
  68. package/templates/flow/nodes/issue/index.d.ts +46 -0
  69. package/templates/flow/nodes/issue/index.d.ts.map +1 -0
  70. package/templates/flow/nodes/task/index.d.ts +37 -0
  71. package/templates/flow/nodes/task/index.d.ts.map +1 -0
  72. package/fesm2022/xxmachina-components-services-calendar.mjs +0 -25
  73. package/fesm2022/xxmachina-components-services-calendar.mjs.map +0 -1
  74. package/fesm2022/xxmachina-components-services-schedule.mjs +0 -51
  75. package/fesm2022/xxmachina-components-services-schedule.mjs.map +0 -1
  76. package/services/calendar/index.d.ts +0 -14
  77. package/services/calendar/index.d.ts.map +0 -1
  78. package/services/schedule/index.d.ts +0 -27
  79. package/services/schedule/index.d.ts.map +0 -1
@@ -1,24 +1,24 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, viewChild, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, computed, input, viewChild, HostListener, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NgAtomicComponent, provideComponent } from '@ng-atomic/core';
4
4
  import * as i2 from '@angular/forms';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { CommonModule } from '@angular/common';
7
7
  import { AutoLayoutFrame } from '@ng-atomic/components/frames/auto-layout';
8
8
  import { CardFrame } from '@ng-atomic/components/frames/card';
9
+ import { ScrollFrame } from '@ng-atomic/components/frames/scroll';
9
10
  import { ActionButtonsSectionOrganism } from '@ng-atomic/components/organisms/action-buttons-section';
10
11
  import { HeadingOrganism } from '@ng-atomic/components/organisms/heading';
11
12
  import { NgAtomicFormSectionBuilder } from '@ng-atomic/components/templates/form';
12
13
  import * as i1 from '@ng-atomic/components/templates/entrance';
13
14
  import { EntranceTemplateStore } from '@ng-atomic/components/templates/entrance';
14
15
  import { AppService } from '@ng-atomic/common/services/app';
15
- import * as i3 from '@angular/material/button';
16
+ import { injectAuthState } from '@ng-atomic/common/services/auth';
16
17
  import { MatButtonModule } from '@angular/material/button';
17
- import * as i4 from '@angular/material/icon';
18
18
  import { MatIconModule } from '@angular/material/icon';
19
- import * as i5 from '@angular/material/tooltip';
20
19
  import { MatTooltipModule } from '@angular/material/tooltip';
21
- import { XtermOrganism } from '@xxmachina/components/organisms/xterm';
20
+ import { svgToSixel, XtermOrganism } from '@xxmachina/components/organisms/xterm';
21
+ import { NavigatorOrganismStore } from '@ng-atomic/components/organisms/navigator';
22
22
  import chalk from 'chalk';
23
23
 
24
24
  /**
@@ -82,6 +82,15 @@ class AgentTemplate extends NgAtomicComponent {
82
82
  store = inject(EntranceTemplateStore);
83
83
  cdr = inject(ChangeDetectorRef);
84
84
  app = inject(AppService);
85
+ // 認証状態のチェック(非ログイン時は閉じるボタンを非表示)
86
+ authState = injectAuthState();
87
+ isLoggedIn = computed(() => !!this.authState());
88
+ endActions = input([]);
89
+ navStartActions = computed(() => {
90
+ if (!this.isLoggedIn())
91
+ return [];
92
+ return [{ id: 'close-side-app', icon: 'close', name: '閉じる' }];
93
+ });
85
94
  xtermComponent = viewChild('xtermComponent');
86
95
  inputField = viewChild('inputField');
87
96
  statusText = 'Ready';
@@ -106,14 +115,22 @@ class AgentTemplate extends NgAtomicComponent {
106
115
  }
107
116
  }, 100);
108
117
  }
118
+ onWindowResize() {
119
+ // ウィンドウリサイズ時にターミナルをフィット
120
+ this.xtermComponent()?.fit();
121
+ }
109
122
  onTerminalReady(terminal) {
110
123
  this.terminal = terminal;
124
+ // 初期化時にターミナルをコンテナサイズにフィット
125
+ setTimeout(() => {
126
+ this.xtermComponent()?.fit();
127
+ }, 50);
111
128
  // 初期メッセージの表示
112
129
  this.showWelcomeMessage();
113
130
  // 初回ロード時は最上部にスクロール(アスキーアートから見えるように)
114
131
  setTimeout(() => {
115
132
  this.terminal.scrollToTop();
116
- }, 50);
133
+ }, 100);
117
134
  // 入力フィールドにフォーカスと高さ調整
118
135
  const textarea = this.inputField()?.nativeElement;
119
136
  if (textarea) {
@@ -125,16 +142,26 @@ class AgentTemplate extends NgAtomicComponent {
125
142
  const url = `https://github.com/nontangent/x_x_machina/issues/${issueNumber}`;
126
143
  window.open(url, '_blank');
127
144
  }
128
- showWelcomeMessage() {
129
- // アスキーアート(lain風の色で)
145
+ async showWelcomeMessage() {
130
146
  this.terminal.writeln('');
131
- this.terminal.writeln('');
132
- this.terminal.writeln(`${chalk.cyan('███╗ ███╗ █████╗ ██████╗██╗ ██╗██╗███╗ ██╗ █████╗ ')}`);
133
- this.terminal.writeln(`${chalk.cyan('████╗ ████║██╔══██╗██╔════╝██║ ██║██║████╗ ██║██╔══██╗')}`);
134
- this.terminal.writeln(`${chalk.cyan('██╔████╔██║███████║██║ ███████║██║██╔██╗ ██║███████║')}`);
135
- this.terminal.writeln(`${chalk.cyan('██║╚██╔╝██║██╔══██║██║ ██╔══██║██║██║╚██╗██║██╔══██║')}`);
136
- this.terminal.writeln(`${chalk.cyan('██║ ╚═╝ ██║██║ ██║╚██████╗██║ ██║██║██║ ╚████║██║ ██║')}`);
137
- this.terminal.writeln(`${chalk.cyan('╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝')}`);
147
+ // assetsからSVGを読み込んでSIXELフォーマットで表示
148
+ try {
149
+ const response = await fetch('/assets/machina-ascii-art.svg');
150
+ const svgString = await response.text();
151
+ const sixelData = await svgToSixel(svgString, { width: 400, height: 130 });
152
+ this.terminal.write(sixelData);
153
+ this.terminal.writeln('');
154
+ }
155
+ catch (error) {
156
+ console.warn('SIXEL logo display failed, using ASCII fallback:', error);
157
+ // フォールバック: ASCII artでX_Xロゴを表示
158
+ this.terminal.writeln(`${chalk.cyan(' ██╗ ██╗ ██╗ ██╗')}`);
159
+ this.terminal.writeln(`${chalk.cyan(' ╚██╗██╔╝ ╚██╗██╔╝ ')}`);
160
+ this.terminal.writeln(`${chalk.cyan(' ╚███╔╝ ╚███╔╝ ')}`);
161
+ this.terminal.writeln(`${chalk.cyan(' ██╔██╗ ██╔██╗ ')}`);
162
+ this.terminal.writeln(`${chalk.cyan(' ██╔╝ ██╗ ██╔╝ ██╗ ')}`);
163
+ this.terminal.writeln(`${chalk.cyan(' ╚═╝ ╚═╝ ╚═╝ ╚═╝ ')}`);
164
+ }
138
165
  this.terminal.writeln('');
139
166
  // ウェルカムメッセージを表示
140
167
  WELCOME_MESSAGE.split('\n').forEach(line => this.terminal.writeln(line));
@@ -308,10 +335,12 @@ class AgentTemplate extends NgAtomicComponent {
308
335
  this.cdr.markForCheck();
309
336
  }, 500);
310
337
  }
311
- // sideAppを閉じる
312
- closeSideApp(event) {
313
- event.stopPropagation();
314
- this.app.sideApp.collapse();
338
+ onNavAction(action) {
339
+ if (action.id === 'close-side-app') {
340
+ this.app.sideApp.collapse();
341
+ return;
342
+ }
343
+ this.dispatch(action);
315
344
  }
316
345
  // 入力フィールドにフォーカスを設定
317
346
  focusInput() {
@@ -382,62 +411,59 @@ class AgentTemplate extends NgAtomicComponent {
382
411
  }
383
412
  }
384
413
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AgentTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component });
385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.5", type: AgentTemplate, isStandalone: true, selector: "templates-agent", host: { classAttribute: "template" }, viewQueries: [{ propertyName: "xtermComponent", first: true, predicate: ["xtermComponent"], descendants: true, isSignal: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.EntranceTemplateStore, inputs: ["form", "form", "actions", "actions", "title", "title", "fieldMap", "fieldMap"] }], ngImport: i0, template: `
386
- <div class="terminal-window">
387
- <div class="terminal-header">
388
- <button mat-icon-button class="close-button" (click)="closeSideApp($event)" matTooltip="閉じる">
389
- <mat-icon>close</mat-icon>
390
- </button>
391
- <div class="terminal-title">Machina Agent</div>
392
- <div class="terminal-status">{{ statusText }}</div>
393
- </div>
394
-
395
- <div class="terminal-body">
396
- <organisms-xterm
397
- class="terminal-display"
398
- (terminalReady)="onTerminalReady($event)"
399
- (githubLinkClick)="onGitHubLinkClick($event)"
400
- (click)="focusInput()"
401
- #xtermComponent
402
- ></organisms-xterm>
403
- <div class="input-area">
404
- <div class="input-line">
405
- <span class="input-prefix">></span>
406
- <div class="textarea-wrapper">
407
- <span class="arrow-prefix">></span>
408
- <div class="input-container">
409
- <textarea
410
- #inputField
411
- class="terminal-input"
412
- [(ngModel)]="currentInput"
413
- (keydown.enter)="handleEnter($event)"
414
- (keydown.arrowUp)="navigateHistory($event, -1)"
415
- (keydown.arrowDown)="navigateHistory($event, 1)"
416
- (keydown.control.k)="generateCommand($event)"
417
- (keydown.meta.k)="generateCommand($event)"
418
- (keydown)="preventPrefixDeletion($event)"
419
- (input)="handleInput($event)"
420
- (focus)="handleFocus()"
421
- (blur)="handleBlur()"
422
- (keyup)="updateCursorPosition()"
423
- (click)="updateCursorPosition()"
424
- (scroll)="updateCursorPosition()"
425
- [disabled]="isProcessing"
426
- placeholder="Type a command..."
427
- rows="1"
428
- ></textarea>
429
- <div class="block-cursor"
430
- [class.visible]="showCursor"
431
- [style.left.px]="cursorLeft"
432
- [style.top.px]="cursorTop"
433
- ></div>
434
- </div>
414
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.5", type: AgentTemplate, isStandalone: true, selector: "templates-agent", inputs: { endActions: { classPropertyName: "endActions", publicName: "endActions", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onWindowResize()" }, classAttribute: "template" }, viewQueries: [{ propertyName: "xtermComponent", first: true, predicate: ["xtermComponent"], descendants: true, isSignal: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.EntranceTemplateStore, inputs: ["form", "form", "actions", "actions", "title", "title", "fieldMap", "fieldMap"] }], ngImport: i0, template: `
415
+ <frames-scroll class="terminal-window">
416
+ <organisms-navigator top injectable class="terminal-header"
417
+ [startActions]="navStartActions()"
418
+ [endActions]="endActions()"
419
+ (action)="onNavAction($event)"
420
+ >Machina Agent</organisms-navigator>
421
+
422
+ <organisms-xterm
423
+ class="terminal-display"
424
+ (terminalReady)="onTerminalReady($event)"
425
+ (githubLinkClick)="onGitHubLinkClick($event)"
426
+ (click)="focusInput()"
427
+ #xtermComponent
428
+ />
429
+
430
+ <div bottom class="input-area">
431
+ <div class="input-line">
432
+ <span class="input-prefix">></span>
433
+ <div class="textarea-wrapper">
434
+ <span class="arrow-prefix">></span>
435
+ <div class="input-container">
436
+ <textarea
437
+ #inputField
438
+ class="terminal-input"
439
+ [(ngModel)]="currentInput"
440
+ (keydown.enter)="handleEnter($event)"
441
+ (keydown.arrowUp)="navigateHistory($event, -1)"
442
+ (keydown.arrowDown)="navigateHistory($event, 1)"
443
+ (keydown.control.k)="generateCommand($event)"
444
+ (keydown.meta.k)="generateCommand($event)"
445
+ (keydown)="preventPrefixDeletion($event)"
446
+ (input)="handleInput($event)"
447
+ (focus)="handleFocus()"
448
+ (blur)="handleBlur()"
449
+ (keyup)="updateCursorPosition()"
450
+ (click)="updateCursorPosition()"
451
+ (scroll)="updateCursorPosition()"
452
+ [disabled]="isProcessing"
453
+ placeholder="Type a command..."
454
+ rows="1"
455
+ ></textarea>
456
+ <div class="block-cursor"
457
+ [class.visible]="showCursor"
458
+ [style.left.px]="cursorLeft"
459
+ [style.top.px]="cursorTop"
460
+ ></div>
435
461
  </div>
436
462
  </div>
437
463
  </div>
438
464
  </div>
439
- </div>
440
- `, isInline: true, styles: [":host{--h-pad: 20px;--h-pad-SCOPED-IN-entrance-MsBK: var(--h-pad);--text: #e0e0e0;--text-SCOPED-IN-entrance-MsBK: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-MsBK: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-MsBK: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-MsBK: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-MsBK: 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{width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-MsBK);border-radius:8px;overflow:hidden;display:flex;flex-direction:column;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;padding:0 20px;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-MsBK);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-MsBK);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-MsBK);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-MsBK);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-MsBK);opacity:.7}.terminal-body{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative;transition:all .3s ease}.terminal-body .terminal-display{flex:1;position:relative;background:#0a0a0a;overflow:hidden}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-MsBK);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;caret-shape:block}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.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;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0}.terminal-window{height:100%;max-height:100vh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0 16px}.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 12px}.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-MsBK);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-MsBK)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-MsBK),0 0 20px var(--accent-SCOPED-IN-entrance-MsBK);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}@media (prefers-color-scheme: light){:host{--text: #333;--text-SCOPED-IN-entrance-MsBK: var(--text);--user: #0066cc;--user-SCOPED-IN-entrance-MsBK: var(--user);--sys: #666;--sys-SCOPED-IN-entrance-MsBK: var(--sys);--border: #ddd;--border-SCOPED-IN-entrance-MsBK: var(--border)}.terminal-window{background:#ffffffd9;box-shadow:0 10px 30px #00000014}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: XtermOrganism, selector: "organisms-xterm", outputs: ["terminalReady", "githubLinkClick"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
465
+ </frames-scroll>
466
+ `, isInline: true, styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-cVkf: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-cVkf: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-cVkf: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-cVkf: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-cVkf: 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-cVkf);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 20px;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-cVkf);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-cVkf);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-cVkf);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-cVkf);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-cVkf);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-cVkf);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;caret-shape:block}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.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 16px}.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 12px}.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-cVkf);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-cVkf)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-cVkf),0 0 20px var(--accent-SCOPED-IN-entrance-cVkf);-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: CommonModule }, { 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 });
441
467
  }
442
468
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AgentTemplate, decorators: [{
443
469
  type: Component,
@@ -446,6 +472,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
446
472
  FormsModule,
447
473
  AutoLayoutFrame,
448
474
  CardFrame,
475
+ ScrollFrame,
449
476
  ActionButtonsSectionOrganism,
450
477
  HeadingOrganism,
451
478
  NgAtomicFormSectionBuilder,
@@ -453,61 +480,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
453
480
  MatIconModule,
454
481
  MatTooltipModule,
455
482
  XtermOrganism,
483
+ NavigatorOrganismStore,
456
484
  ], template: `
457
- <div class="terminal-window">
458
- <div class="terminal-header">
459
- <button mat-icon-button class="close-button" (click)="closeSideApp($event)" matTooltip="閉じる">
460
- <mat-icon>close</mat-icon>
461
- </button>
462
- <div class="terminal-title">Machina Agent</div>
463
- <div class="terminal-status">{{ statusText }}</div>
464
- </div>
465
-
466
- <div class="terminal-body">
467
- <organisms-xterm
468
- class="terminal-display"
469
- (terminalReady)="onTerminalReady($event)"
470
- (githubLinkClick)="onGitHubLinkClick($event)"
471
- (click)="focusInput()"
472
- #xtermComponent
473
- ></organisms-xterm>
474
- <div class="input-area">
475
- <div class="input-line">
476
- <span class="input-prefix">></span>
477
- <div class="textarea-wrapper">
478
- <span class="arrow-prefix">></span>
479
- <div class="input-container">
480
- <textarea
481
- #inputField
482
- class="terminal-input"
483
- [(ngModel)]="currentInput"
484
- (keydown.enter)="handleEnter($event)"
485
- (keydown.arrowUp)="navigateHistory($event, -1)"
486
- (keydown.arrowDown)="navigateHistory($event, 1)"
487
- (keydown.control.k)="generateCommand($event)"
488
- (keydown.meta.k)="generateCommand($event)"
489
- (keydown)="preventPrefixDeletion($event)"
490
- (input)="handleInput($event)"
491
- (focus)="handleFocus()"
492
- (blur)="handleBlur()"
493
- (keyup)="updateCursorPosition()"
494
- (click)="updateCursorPosition()"
495
- (scroll)="updateCursorPosition()"
496
- [disabled]="isProcessing"
497
- placeholder="Type a command..."
498
- rows="1"
499
- ></textarea>
500
- <div class="block-cursor"
501
- [class.visible]="showCursor"
502
- [style.left.px]="cursorLeft"
503
- [style.top.px]="cursorTop"
504
- ></div>
505
- </div>
485
+ <frames-scroll class="terminal-window">
486
+ <organisms-navigator top injectable class="terminal-header"
487
+ [startActions]="navStartActions()"
488
+ [endActions]="endActions()"
489
+ (action)="onNavAction($event)"
490
+ >Machina Agent</organisms-navigator>
491
+
492
+ <organisms-xterm
493
+ class="terminal-display"
494
+ (terminalReady)="onTerminalReady($event)"
495
+ (githubLinkClick)="onGitHubLinkClick($event)"
496
+ (click)="focusInput()"
497
+ #xtermComponent
498
+ />
499
+
500
+ <div bottom class="input-area">
501
+ <div class="input-line">
502
+ <span class="input-prefix">></span>
503
+ <div class="textarea-wrapper">
504
+ <span class="arrow-prefix">></span>
505
+ <div class="input-container">
506
+ <textarea
507
+ #inputField
508
+ class="terminal-input"
509
+ [(ngModel)]="currentInput"
510
+ (keydown.enter)="handleEnter($event)"
511
+ (keydown.arrowUp)="navigateHistory($event, -1)"
512
+ (keydown.arrowDown)="navigateHistory($event, 1)"
513
+ (keydown.control.k)="generateCommand($event)"
514
+ (keydown.meta.k)="generateCommand($event)"
515
+ (keydown)="preventPrefixDeletion($event)"
516
+ (input)="handleInput($event)"
517
+ (focus)="handleFocus()"
518
+ (blur)="handleBlur()"
519
+ (keyup)="updateCursorPosition()"
520
+ (click)="updateCursorPosition()"
521
+ (scroll)="updateCursorPosition()"
522
+ [disabled]="isProcessing"
523
+ placeholder="Type a command..."
524
+ rows="1"
525
+ ></textarea>
526
+ <div class="block-cursor"
527
+ [class.visible]="showCursor"
528
+ [style.left.px]="cursorLeft"
529
+ [style.top.px]="cursorTop"
530
+ ></div>
506
531
  </div>
507
532
  </div>
508
533
  </div>
509
534
  </div>
510
- </div>
535
+ </frames-scroll>
511
536
  `, host: {
512
537
  class: 'template'
513
538
  }, changeDetection: ChangeDetectionStrategy.Default, hostDirectives: [
@@ -520,8 +545,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
520
545
  'fieldMap',
521
546
  ],
522
547
  },
523
- ], styles: [":host{--h-pad: 20px;--h-pad-SCOPED-IN-entrance-MsBK: var(--h-pad);--text: #e0e0e0;--text-SCOPED-IN-entrance-MsBK: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-MsBK: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-MsBK: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-MsBK: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-MsBK: 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{width:100%;max-width:900px;height:600px;background:#0a0a0a;border:1px solid var(--border-SCOPED-IN-entrance-MsBK);border-radius:8px;overflow:hidden;display:flex;flex-direction:column;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;padding:0 20px;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-MsBK);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-MsBK);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-MsBK);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-MsBK);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-MsBK);opacity:.7}.terminal-body{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative;transition:all .3s ease}.terminal-body .terminal-display{flex:1;position:relative;background:#0a0a0a;overflow:hidden}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-MsBK);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;caret-shape:block}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.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;overflow-y:auto}@container agent-container (max-width: 600px){:host{padding:0}.terminal-window{height:100%;max-height:100vh;max-width:100%;border-radius:0;border:none;box-shadow:none}.terminal-header{height:56px;padding:0 16px}.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 12px}.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-MsBK);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-MsBK)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-MsBK),0 0 20px var(--accent-SCOPED-IN-entrance-MsBK);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}@media (prefers-color-scheme: light){:host{--text: #333;--text-SCOPED-IN-entrance-MsBK: var(--text);--user: #0066cc;--user-SCOPED-IN-entrance-MsBK: var(--user);--sys: #666;--sys-SCOPED-IN-entrance-MsBK: var(--sys);--border: #ddd;--border-SCOPED-IN-entrance-MsBK: var(--border)}.terminal-window{background:#ffffffd9;box-shadow:0 10px 30px #00000014}}\n"] }]
524
- }] });
548
+ ], styles: [":host{--text: #e0e0e0;--text-SCOPED-IN-entrance-cVkf: var(--text);--user: #00ff00;--user-SCOPED-IN-entrance-cVkf: var(--user);--sys: #888;--sys-SCOPED-IN-entrance-cVkf: var(--sys);--accent: #ff79c6;--accent-SCOPED-IN-entrance-cVkf: var(--accent);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-entrance-cVkf: 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-cVkf);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 20px;background:#1a1a1a99;border-bottom:1px solid var(--border-SCOPED-IN-entrance-cVkf);transition:all .3s ease;position:relative}.terminal-header .close-button{color:var(--sys-SCOPED-IN-entrance-cVkf);margin-right:.5rem;opacity:.7}.terminal-header .close-button:hover{color:var(--text-SCOPED-IN-entrance-cVkf);opacity:1}.terminal-header .terminal-title{font-size:13px;color:var(--text-SCOPED-IN-entrance-cVkf);font-weight:500;flex:1}.terminal-header .terminal-status{font-size:12px;color:var(--sys-SCOPED-IN-entrance-cVkf);opacity:.7}.terminal-display{width:100%;height:100%;background:#0a0a0a}.input-area{background:#000000e6;border-top:1px solid var(--border-SCOPED-IN-entrance-cVkf);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;caret-shape:block}.input-line .textarea-wrapper .terminal-input::selection{background:#ffffff4d}.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 16px}.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 12px}.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-cVkf);border-radius:4px;color:var(--accent-SCOPED-IN-entrance-cVkf)!important;opacity:.9;text-shadow:0 0 10px var(--accent-SCOPED-IN-entrance-cVkf),0 0 20px var(--accent-SCOPED-IN-entrance-cVkf);-webkit-font-smoothing:none!important;-moz-osx-font-smoothing:unset!important;font-variant-ligatures:none!important;text-rendering:optimizeLegibility!important}\n"] }]
549
+ }], propDecorators: { onWindowResize: [{
550
+ type: HostListener,
551
+ args: ['window:resize']
552
+ }] } });
525
553
  function provideAgentTemplate() {
526
554
  return [
527
555
  provideComponent(EntranceTemplateStore, () => AgentTemplate),