@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.
- package/extras/flow/index.d.ts +13 -3
- package/extras/flow/index.d.ts.map +1 -1
- package/features/query/index.d.ts.map +1 -1
- package/fesm2022/xxmachina-components-extras-flow.mjs +110 -11
- package/fesm2022/xxmachina-components-extras-flow.mjs.map +1 -1
- package/fesm2022/xxmachina-components-groups-query-form.mjs.map +1 -1
- package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs +117 -0
- package/fesm2022/xxmachina-components-molecules-inline-edit-field.mjs.map +1 -0
- package/fesm2022/xxmachina-components-molecules-weekly-header.mjs +2 -2
- package/fesm2022/xxmachina-components-molecules-weekly-header.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-calendar-section.mjs +2 -2
- package/fesm2022/xxmachina-components-organisms-calendar-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs +19 -4
- package/fesm2022/xxmachina-components-organisms-terminal-input-section.mjs.map +1 -1
- package/fesm2022/xxmachina-components-organisms-xterm.mjs +849 -49
- package/fesm2022/xxmachina-components-organisms-xterm.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-command-harness.mjs +28 -0
- package/fesm2022/xxmachina-components-pages-command-harness.mjs.map +1 -0
- package/fesm2022/xxmachina-components-pages-command.mjs +10 -6
- package/fesm2022/xxmachina-components-pages-command.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-query.mjs +2 -2
- package/fesm2022/xxmachina-components-pages-query.mjs.map +1 -1
- package/fesm2022/xxmachina-components-pages-thread.mjs +2 -2
- package/fesm2022/xxmachina-components-pages-thread.mjs.map +1 -1
- package/fesm2022/xxmachina-components-services-message.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-agent.mjs +151 -123
- package/fesm2022/xxmachina-components-templates-agent.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-background.mjs +376 -242
- package/fesm2022/xxmachina-components-templates-background.mjs.map +1 -1
- package/fesm2022/xxmachina-components-templates-flow-nodes-group.mjs +164 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-group.mjs.map +1 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs +157 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-issue.mjs.map +1 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-task.mjs +154 -0
- package/fesm2022/xxmachina-components-templates-flow-nodes-task.mjs.map +1 -0
- package/fesm2022/xxmachina-components-templates-flow.mjs +337 -0
- package/fesm2022/xxmachina-components-templates-flow.mjs.map +1 -0
- package/fesm2022/xxmachina-components.mjs +2 -2
- package/fesm2022/xxmachina-components.mjs.map +1 -1
- package/groups/query-form/index.d.ts +3 -4
- package/groups/query-form/index.d.ts.map +1 -1
- package/index.d.ts.map +1 -1
- package/molecules/inline-edit-field/index.d.ts +32 -0
- package/molecules/inline-edit-field/index.d.ts.map +1 -0
- package/organisms/terminal-input-section/index.d.ts +2 -1
- package/organisms/terminal-input-section/index.d.ts.map +1 -1
- package/organisms/xterm/index.d.ts +176 -4
- package/organisms/xterm/index.d.ts.map +1 -1
- package/package.json +29 -13
- package/pages/command/harness/index.d.ts +14 -0
- package/pages/command/harness/index.d.ts.map +1 -0
- package/pages/command/index.d.ts +12 -4
- package/pages/command/index.d.ts.map +1 -1
- package/pages/query/index.d.ts +2 -2
- package/pages/query/index.d.ts.map +1 -1
- package/pages/query-v2/index.d.ts.map +1 -1
- package/services/command/index.d.ts.map +1 -1
- package/services/message/index.d.ts +3 -3
- package/services/message/index.d.ts.map +1 -1
- package/templates/agent/index.d.ts +11 -2
- package/templates/agent/index.d.ts.map +1 -1
- package/templates/background/index.d.ts +14 -20
- package/templates/background/index.d.ts.map +1 -1
- package/templates/flow/index.d.ts +61 -0
- package/templates/flow/index.d.ts.map +1 -0
- package/templates/flow/nodes/group/index.d.ts +44 -0
- package/templates/flow/nodes/group/index.d.ts.map +1 -0
- package/templates/flow/nodes/issue/index.d.ts +46 -0
- package/templates/flow/nodes/issue/index.d.ts.map +1 -0
- package/templates/flow/nodes/task/index.d.ts +37 -0
- package/templates/flow/nodes/task/index.d.ts.map +1 -0
- package/fesm2022/xxmachina-components-services-calendar.mjs +0 -25
- package/fesm2022/xxmachina-components-services-calendar.mjs.map +0 -1
- package/fesm2022/xxmachina-components-services-schedule.mjs +0 -51
- package/fesm2022/xxmachina-components-services-schedule.mjs.map +0 -1
- package/services/calendar/index.d.ts +0 -14
- package/services/calendar/index.d.ts.map +0 -1
- package/services/schedule/index.d.ts +0 -27
- 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
|
|
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
|
-
},
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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
|
-
<
|
|
387
|
-
<
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
<div class="
|
|
405
|
-
<span class="
|
|
406
|
-
<div class="
|
|
407
|
-
<
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
</
|
|
440
|
-
`, isInline: true, styles: [":host{--
|
|
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
|
-
<
|
|
458
|
-
<
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
<div class="
|
|
476
|
-
<span class="
|
|
477
|
-
<div class="
|
|
478
|
-
<
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
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
|
-
</
|
|
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{--
|
|
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),
|