devchain-cli 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/server/app.module.js +2 -0
- package/dist/server/app.module.js.map +1 -1
- package/dist/server/common/constants/terminal.d.ts +3 -0
- package/dist/server/common/constants/terminal.js +7 -0
- package/dist/server/common/constants/terminal.js.map +1 -0
- package/dist/server/common/validation/template-validation.d.ts +8 -0
- package/dist/server/common/validation/template-validation.js +18 -0
- package/dist/server/common/validation/template-validation.js.map +1 -0
- package/dist/server/modules/epics/services/epics.service.d.ts +2 -0
- package/dist/server/modules/epics/services/epics.service.js +194 -32
- package/dist/server/modules/epics/services/epics.service.js.map +1 -1
- package/dist/server/modules/events/catalog/epic.assigned.d.ts +9 -13
- package/dist/server/modules/events/catalog/epic.assigned.js +5 -5
- package/dist/server/modules/events/catalog/epic.assigned.js.map +1 -1
- package/dist/server/modules/events/catalog/epic.created.d.ts +39 -0
- package/dist/server/modules/events/catalog/epic.created.js +20 -0
- package/dist/server/modules/events/catalog/epic.created.js.map +1 -0
- package/dist/server/modules/events/catalog/epic.updated.d.ts +178 -0
- package/dist/server/modules/events/catalog/epic.updated.js +43 -0
- package/dist/server/modules/events/catalog/epic.updated.js.map +1 -0
- package/dist/server/modules/events/catalog/index.d.ts +221 -12
- package/dist/server/modules/events/catalog/index.js +9 -1
- package/dist/server/modules/events/catalog/index.js.map +1 -1
- package/dist/server/modules/events/catalog/settings.terminal.changed.d.ts +12 -0
- package/dist/server/modules/events/catalog/settings.terminal.changed.js +11 -0
- package/dist/server/modules/events/catalog/settings.terminal.changed.js.map +1 -0
- package/dist/server/modules/events/services/events.service.js +0 -7
- package/dist/server/modules/events/services/events.service.js.map +1 -1
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.d.ts +5 -2
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js +44 -24
- package/dist/server/modules/events/subscribers/chat-message-delivery.subscriber.js.map +1 -1
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.d.ts +5 -8
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js +37 -56
- package/dist/server/modules/events/subscribers/epic-assignment-notifier.subscriber.js.map +1 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +8 -6
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
- package/dist/server/modules/mcp/mcp.module.js +2 -0
- package/dist/server/modules/mcp/mcp.module.js.map +1 -1
- package/dist/server/modules/mcp/services/mcp.service.d.ts +5 -1
- package/dist/server/modules/mcp/services/mcp.service.js +65 -33
- package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +140 -6
- package/dist/server/modules/projects/controllers/projects.controller.js +91 -31
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
- package/dist/server/modules/projects/dtos/export.dto.d.ts +83 -0
- package/dist/server/modules/projects/dtos/export.dto.js +34 -0
- package/dist/server/modules/projects/dtos/export.dto.js.map +1 -0
- package/dist/server/modules/projects/projects.module.js +1 -0
- package/dist/server/modules/projects/projects.module.js.map +1 -1
- package/dist/server/modules/projects/services/projects.service.d.ts +37 -3
- package/dist/server/modules/projects/services/projects.service.js +353 -526
- package/dist/server/modules/projects/services/projects.service.js.map +1 -1
- package/dist/server/modules/registry/controllers/registry.controller.d.ts +98 -0
- package/dist/server/modules/registry/controllers/registry.controller.js +352 -0
- package/dist/server/modules/registry/controllers/registry.controller.js.map +1 -0
- package/dist/server/modules/registry/controllers/templates.controller.d.ts +35 -0
- package/dist/server/modules/registry/controllers/templates.controller.js +157 -0
- package/dist/server/modules/registry/controllers/templates.controller.js.map +1 -0
- package/dist/server/modules/registry/dtos/registry-error.d.ts +11 -0
- package/dist/server/modules/registry/dtos/registry-error.js +30 -0
- package/dist/server/modules/registry/dtos/registry-error.js.map +1 -0
- package/dist/server/modules/registry/dtos/registry.dto.d.ts +7 -0
- package/dist/server/modules/registry/dtos/registry.dto.js +50 -0
- package/dist/server/modules/registry/dtos/registry.dto.js.map +1 -0
- package/dist/server/modules/registry/index.d.ts +7 -0
- package/dist/server/modules/registry/index.js +24 -0
- package/dist/server/modules/registry/index.js.map +1 -0
- package/dist/server/modules/registry/interfaces/registry.interface.d.ts +68 -0
- package/dist/server/modules/registry/interfaces/registry.interface.js +3 -0
- package/dist/server/modules/registry/interfaces/registry.interface.js.map +1 -0
- package/dist/server/modules/registry/registry.module.d.ts +2 -0
- package/dist/server/modules/registry/registry.module.js +45 -0
- package/dist/server/modules/registry/registry.module.js.map +1 -0
- package/dist/server/modules/registry/services/registry-client.service.d.ts +14 -0
- package/dist/server/modules/registry/services/registry-client.service.js +226 -0
- package/dist/server/modules/registry/services/registry-client.service.js.map +1 -0
- package/dist/server/modules/registry/services/registry-orchestration.service.d.ts +45 -0
- package/dist/server/modules/registry/services/registry-orchestration.service.js +165 -0
- package/dist/server/modules/registry/services/registry-orchestration.service.js.map +1 -0
- package/dist/server/modules/registry/services/template-cache.service.d.ts +66 -0
- package/dist/server/modules/registry/services/template-cache.service.js +310 -0
- package/dist/server/modules/registry/services/template-cache.service.js.map +1 -0
- package/dist/server/modules/registry/services/template-upgrade.service.d.ts +41 -0
- package/dist/server/modules/registry/services/template-upgrade.service.js +212 -0
- package/dist/server/modules/registry/services/template-upgrade.service.js.map +1 -0
- package/dist/server/modules/registry/services/unified-template.service.d.ts +35 -0
- package/dist/server/modules/registry/services/unified-template.service.js +228 -0
- package/dist/server/modules/registry/services/unified-template.service.js.map +1 -0
- package/dist/server/modules/sessions/controllers/sessions.controller.d.ts +32 -1
- package/dist/server/modules/sessions/controllers/sessions.controller.js +150 -8
- package/dist/server/modules/sessions/controllers/sessions.controller.js.map +1 -1
- package/dist/server/modules/sessions/services/message-activity-stream.service.d.ts +12 -0
- package/dist/server/modules/sessions/services/message-activity-stream.service.js +51 -0
- package/dist/server/modules/sessions/services/message-activity-stream.service.js.map +1 -0
- package/dist/server/modules/sessions/services/sessions-message-pool.service.d.ts +125 -0
- package/dist/server/modules/sessions/services/sessions-message-pool.service.js +599 -0
- package/dist/server/modules/sessions/services/sessions-message-pool.service.js.map +1 -0
- package/dist/server/modules/sessions/services/sessions.service.d.ts +2 -9
- package/dist/server/modules/sessions/services/sessions.service.js +32 -27
- package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
- package/dist/server/modules/sessions/sessions.module.js +16 -2
- package/dist/server/modules/sessions/sessions.module.js.map +1 -1
- package/dist/server/modules/settings/dtos/settings.dto.d.ts +231 -0
- package/dist/server/modules/settings/dtos/settings.dto.js +40 -1
- package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
- package/dist/server/modules/settings/services/settings.service.d.ts +56 -15
- package/dist/server/modules/settings/services/settings.service.js +295 -10
- package/dist/server/modules/settings/services/settings.service.js.map +1 -1
- package/dist/server/modules/subscribers/actions/action.interface.d.ts +2 -0
- package/dist/server/modules/subscribers/actions/send-message.action.js +34 -11
- package/dist/server/modules/subscribers/actions/send-message.action.js.map +1 -1
- package/dist/server/modules/subscribers/events/event-fields-catalog.js +109 -6
- package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -1
- package/dist/server/modules/subscribers/services/subscriber-executor.service.d.ts +3 -1
- package/dist/server/modules/subscribers/services/subscriber-executor.service.js +13 -1
- package/dist/server/modules/subscribers/services/subscriber-executor.service.js.map +1 -1
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.d.ts +20 -0
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.js +8 -1
- package/dist/server/modules/terminal/dtos/ws-envelope.dto.js.map +1 -1
- package/dist/server/modules/terminal/gateways/terminal.gateway.d.ts +1 -3
- package/dist/server/modules/terminal/gateways/terminal.gateway.js +50 -11
- package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -1
- package/dist/server/modules/terminal/services/pty.service.d.ts +1 -3
- package/dist/server/modules/terminal/services/pty.service.js +2 -14
- package/dist/server/modules/terminal/services/pty.service.js.map +1 -1
- package/dist/server/modules/terminal/services/terminal-seed.service.d.ts +6 -4
- package/dist/server/modules/terminal/services/terminal-seed.service.js +74 -67
- package/dist/server/modules/terminal/services/terminal-seed.service.js.map +1 -1
- package/dist/server/modules/terminal/services/tmux.service.js +3 -2
- package/dist/server/modules/terminal/services/tmux.service.js.map +1 -1
- package/dist/server/modules/terminal/terminal.module.js +0 -3
- package/dist/server/modules/terminal/terminal.module.js.map +1 -1
- package/dist/server/templates/claude-codex-advanced.json +130 -69
- package/dist/server/templates/claude-opus.json +30 -19
- package/dist/server/templates/simple-codex.json +30 -19
- package/dist/server/test-setup.js +19 -0
- package/dist/server/test-setup.js.map +1 -1
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/index-4Q4XuabC.js +733 -0
- package/dist/server/ui/assets/index-BkGGbapJ.css +32 -0
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/claude-codex-advanced.json +130 -69
- package/dist/templates/claude-opus.json +30 -19
- package/dist/templates/simple-codex.json +30 -19
- package/package.json +9 -2
- package/dist/server/modules/terminal/services/terminal-emulator.service.d.ts +0 -40
- package/dist/server/modules/terminal/services/terminal-emulator.service.js +0 -356
- package/dist/server/modules/terminal/services/terminal-emulator.service.js.map +0 -1
- package/dist/server/templates/claude-codex-advanced-swe.json +0 -130
- package/dist/server/ui/assets/index-C9GXCjnF.js +0 -700
- package/dist/server/ui/assets/index-o0FbZg-1.css +0 -32
- package/dist/templates/claude-codex-advanced-swe.json +0 -130
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.TerminalEmulatorService = void 0;
|
|
13
|
-
const common_1 = require("@nestjs/common");
|
|
14
|
-
const headless_1 = require("@xterm/headless");
|
|
15
|
-
const logger_1 = require("../../../common/logging/logger");
|
|
16
|
-
const settings_service_1 = require("../../settings/services/settings.service");
|
|
17
|
-
let TerminalEmulatorService = class TerminalEmulatorService {
|
|
18
|
-
constructor(settingsService) {
|
|
19
|
-
this.settingsService = settingsService;
|
|
20
|
-
this.sessions = new Map();
|
|
21
|
-
this.logger = (0, logger_1.createLogger)('TerminalEmulatorService');
|
|
22
|
-
this.DEFAULT_COLS = 80;
|
|
23
|
-
this.DEFAULT_ROWS = 24;
|
|
24
|
-
this.DEFAULT_SCROLLBACK = 10000;
|
|
25
|
-
this.MIN_SCROLLBACK = 100;
|
|
26
|
-
this.MAX_SCROLLBACK = 50000;
|
|
27
|
-
this.scrollbackLines = this.resolveScrollbackSetting();
|
|
28
|
-
this.logger.info({ scrollback: this.scrollbackLines }, 'Terminal emulator service ready');
|
|
29
|
-
}
|
|
30
|
-
onModuleDestroy() {
|
|
31
|
-
for (const sessionId of this.sessions.keys()) {
|
|
32
|
-
this.disposeSession(sessionId);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
initializeSession(sessionId) {
|
|
36
|
-
this.getOrCreateSession(sessionId);
|
|
37
|
-
}
|
|
38
|
-
getScrollbackLines() {
|
|
39
|
-
return this.scrollbackLines;
|
|
40
|
-
}
|
|
41
|
-
write(sessionId, data) {
|
|
42
|
-
const session = this.getOrCreateSession(sessionId);
|
|
43
|
-
try {
|
|
44
|
-
session.terminal.write(data);
|
|
45
|
-
if (Math.random() < 0.05) {
|
|
46
|
-
const normalBuffer = session.terminal.buffer.normal;
|
|
47
|
-
const activeBuffer = session.terminal.buffer.active;
|
|
48
|
-
this.logger.debug({
|
|
49
|
-
sessionId,
|
|
50
|
-
normalBufferLength: normalBuffer.length,
|
|
51
|
-
activeBufferLength: activeBuffer.length,
|
|
52
|
-
normalViewportY: normalBuffer.viewportY,
|
|
53
|
-
activeViewportY: activeBuffer.viewportY,
|
|
54
|
-
isInAltScreen: activeBuffer === session.terminal.buffer.alternate,
|
|
55
|
-
scrollbackSetting: this.scrollbackLines,
|
|
56
|
-
actualScrollback: session.terminal.options?.scrollback ??
|
|
57
|
-
this.scrollbackLines,
|
|
58
|
-
terminalRows: session.terminal.rows,
|
|
59
|
-
terminalCols: session.terminal.cols,
|
|
60
|
-
dataLength: data.length,
|
|
61
|
-
}, 'Emulator write - buffer state');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
this.logger.error({ sessionId, error }, 'Failed to write PTY chunk into emulator');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
getDimensions(sessionId) {
|
|
69
|
-
const s = this.sessions.get(sessionId);
|
|
70
|
-
return { cols: s?.cols ?? this.DEFAULT_COLS, rows: s?.rows ?? this.DEFAULT_ROWS };
|
|
71
|
-
}
|
|
72
|
-
resize(sessionId, cols, rows) {
|
|
73
|
-
const session = this.getOrCreateSession(sessionId);
|
|
74
|
-
const safeCols = this.sanitizeDimension(cols, session.cols, this.DEFAULT_COLS);
|
|
75
|
-
const safeRows = this.sanitizeDimension(rows, session.rows, this.DEFAULT_ROWS);
|
|
76
|
-
if (safeCols === session.cols && safeRows === session.rows) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
try {
|
|
80
|
-
session.terminal.resize(safeCols, safeRows);
|
|
81
|
-
session.cols = safeCols;
|
|
82
|
-
session.rows = safeRows;
|
|
83
|
-
this.logger.debug({ sessionId, cols: safeCols, rows: safeRows }, 'Emulator resized');
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
this.logger.error({ sessionId, cols: safeCols, rows: safeRows, error }, 'Failed to resize emulator');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
getSnapshotANSI(sessionId, options) {
|
|
90
|
-
const session = this.sessions.get(sessionId);
|
|
91
|
-
if (!session) {
|
|
92
|
-
this.logger.debug({ sessionId }, 'Requested ANSI snapshot for missing session');
|
|
93
|
-
return '';
|
|
94
|
-
}
|
|
95
|
-
const { visibleOnly, withScrollback, maxBytes } = options ?? {};
|
|
96
|
-
const isInAltScreen = session.terminal.buffer.active === session.terminal.buffer.alternate;
|
|
97
|
-
try {
|
|
98
|
-
if (isInAltScreen) {
|
|
99
|
-
this.logger.debug({ sessionId }, 'In alt-screen, manually extracting primary buffer');
|
|
100
|
-
const buffer = session.terminal.buffer.normal;
|
|
101
|
-
const scrollbackLines = visibleOnly || withScrollback === false ? 0 : this.scrollbackLines;
|
|
102
|
-
const start = 0;
|
|
103
|
-
const end = Math.min(buffer.length, scrollbackLines + session.rows);
|
|
104
|
-
const lines = [];
|
|
105
|
-
for (let y = start; y < end; y++) {
|
|
106
|
-
const line = buffer.getLine(y);
|
|
107
|
-
if (line) {
|
|
108
|
-
lines.push(line.translateToString(true));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
const snapshot = lines.join('\r\n');
|
|
112
|
-
this.logger.debug({
|
|
113
|
-
sessionId,
|
|
114
|
-
lines: lines.length,
|
|
115
|
-
bytes: Buffer.byteLength(snapshot, 'utf8'),
|
|
116
|
-
}, 'Manually extracted primary buffer (alt-screen mode)');
|
|
117
|
-
return this.applyMaxBytes(snapshot, maxBytes, sessionId, 'ansi');
|
|
118
|
-
}
|
|
119
|
-
const scrollback = visibleOnly || withScrollback === false ? 0 : this.scrollbackLines;
|
|
120
|
-
const serialized = session.serializeAddon.serialize({
|
|
121
|
-
scrollback,
|
|
122
|
-
excludeAltBuffer: true,
|
|
123
|
-
excludeModes: true,
|
|
124
|
-
});
|
|
125
|
-
if (!serialized) {
|
|
126
|
-
this.logger.warn({ sessionId }, 'Empty ANSI snapshot');
|
|
127
|
-
return '';
|
|
128
|
-
}
|
|
129
|
-
const applied = this.applyMaxBytes(serialized, maxBytes, sessionId, 'ansi');
|
|
130
|
-
this.logger.debug({
|
|
131
|
-
sessionId,
|
|
132
|
-
bytes: Buffer.byteLength(applied, 'utf8'),
|
|
133
|
-
}, 'Prepared ANSI snapshot');
|
|
134
|
-
return applied;
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
138
|
-
this.logger.error({ sessionId, error: message }, 'Failed to serialize ANSI snapshot');
|
|
139
|
-
return '';
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
getSnapshotText(sessionId, options) {
|
|
143
|
-
const session = this.sessions.get(sessionId);
|
|
144
|
-
if (!session) {
|
|
145
|
-
this.logger.debug({ sessionId }, 'Requested text snapshot for missing session');
|
|
146
|
-
return '';
|
|
147
|
-
}
|
|
148
|
-
const buffer = session.terminal.buffer.active;
|
|
149
|
-
const includeScrollback = options?.visibleOnly === true ? false : (options?.withScrollback ?? true);
|
|
150
|
-
let start;
|
|
151
|
-
let end;
|
|
152
|
-
if (options?.visibleOnly) {
|
|
153
|
-
start = buffer.viewportY;
|
|
154
|
-
end = Math.min(buffer.length, start + session.rows);
|
|
155
|
-
}
|
|
156
|
-
else if (includeScrollback) {
|
|
157
|
-
start = 0;
|
|
158
|
-
end = buffer.length;
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
end = buffer.length;
|
|
162
|
-
start = Math.max(0, end - session.rows);
|
|
163
|
-
}
|
|
164
|
-
const lines = [];
|
|
165
|
-
for (let y = start; y < end; y += 1) {
|
|
166
|
-
const line = buffer.getLine(y);
|
|
167
|
-
if (!line) {
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
lines.push(line.translateToString(true));
|
|
171
|
-
}
|
|
172
|
-
const snapshot = lines.join('\n');
|
|
173
|
-
return this.applyMaxBytes(snapshot, options?.maxBytes, sessionId, 'text');
|
|
174
|
-
}
|
|
175
|
-
getHistoryText(sessionId, viewportRows, maxBytes) {
|
|
176
|
-
const session = this.sessions.get(sessionId);
|
|
177
|
-
if (!session) {
|
|
178
|
-
this.logger.debug({ sessionId }, 'Requested history for missing session');
|
|
179
|
-
return '';
|
|
180
|
-
}
|
|
181
|
-
const buffer = session.terminal.buffer.active;
|
|
182
|
-
const viewportStart = buffer.viewportY;
|
|
183
|
-
const start = 0;
|
|
184
|
-
const end = viewportStart;
|
|
185
|
-
if (end <= start) {
|
|
186
|
-
this.logger.debug({ sessionId, viewportY: viewportStart, bufferLength: buffer.length }, 'No history before viewport');
|
|
187
|
-
return '';
|
|
188
|
-
}
|
|
189
|
-
const lines = [];
|
|
190
|
-
for (let y = start; y < end; y += 1) {
|
|
191
|
-
const line = buffer.getLine(y);
|
|
192
|
-
if (!line)
|
|
193
|
-
continue;
|
|
194
|
-
lines.push(line.translateToString(true));
|
|
195
|
-
}
|
|
196
|
-
this.logger.debug({ sessionId, historyLines: lines.length, viewportY: viewportStart }, 'Extracted history excluding viewport');
|
|
197
|
-
const snapshot = lines.join('\n');
|
|
198
|
-
return this.applyMaxBytes(snapshot, maxBytes, sessionId, 'text');
|
|
199
|
-
}
|
|
200
|
-
getHistoryANSI(sessionId, maxBytes) {
|
|
201
|
-
const session = this.sessions.get(sessionId);
|
|
202
|
-
if (!session) {
|
|
203
|
-
this.logger.debug({ sessionId }, 'Requested ANSI history for missing session');
|
|
204
|
-
return '';
|
|
205
|
-
}
|
|
206
|
-
const buffer = session.terminal.buffer.active;
|
|
207
|
-
const viewportStart = buffer.viewportY;
|
|
208
|
-
if (viewportStart <= 0) {
|
|
209
|
-
this.logger.debug({ sessionId, viewportY: viewportStart }, 'No history before viewport');
|
|
210
|
-
return '';
|
|
211
|
-
}
|
|
212
|
-
try {
|
|
213
|
-
const fullSnapshot = session.serializeAddon.serialize({
|
|
214
|
-
scrollback: this.scrollbackLines,
|
|
215
|
-
excludeAltBuffer: false,
|
|
216
|
-
excludeModes: true,
|
|
217
|
-
});
|
|
218
|
-
this.logger.debug({
|
|
219
|
-
sessionId,
|
|
220
|
-
viewportY: viewportStart,
|
|
221
|
-
snapshotBytes: fullSnapshot.length,
|
|
222
|
-
}, 'Prepared ANSI history');
|
|
223
|
-
return this.applyMaxBytes(fullSnapshot, maxBytes, sessionId, 'ansi');
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
227
|
-
this.logger.error({ sessionId, error: message }, 'Failed to serialize ANSI history');
|
|
228
|
-
return '';
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
getTotalLines(sessionId) {
|
|
232
|
-
const session = this.sessions.get(sessionId);
|
|
233
|
-
if (!session)
|
|
234
|
-
return 0;
|
|
235
|
-
return session.terminal.buffer.normal.length;
|
|
236
|
-
}
|
|
237
|
-
getViewportStart(sessionId) {
|
|
238
|
-
const session = this.sessions.get(sessionId);
|
|
239
|
-
if (!session)
|
|
240
|
-
return 0;
|
|
241
|
-
return session.terminal.buffer.normal.viewportY;
|
|
242
|
-
}
|
|
243
|
-
hasHistory(sessionId) {
|
|
244
|
-
const session = this.sessions.get(sessionId);
|
|
245
|
-
if (!session)
|
|
246
|
-
return false;
|
|
247
|
-
const buffer = session.terminal.buffer.normal;
|
|
248
|
-
const activeBuffer = session.terminal.buffer.active;
|
|
249
|
-
const isInAltScreen = activeBuffer === session.terminal.buffer.alternate;
|
|
250
|
-
const hasHistory = buffer.length > session.rows;
|
|
251
|
-
this.logger.debug({
|
|
252
|
-
sessionId,
|
|
253
|
-
normalBufferLength: buffer.length,
|
|
254
|
-
activeBufferLength: activeBuffer.length,
|
|
255
|
-
rows: session.rows,
|
|
256
|
-
isInAltScreen,
|
|
257
|
-
hasHistory,
|
|
258
|
-
}, 'Checking hasHistory');
|
|
259
|
-
return hasHistory;
|
|
260
|
-
}
|
|
261
|
-
disposeSession(sessionId) {
|
|
262
|
-
const session = this.sessions.get(sessionId);
|
|
263
|
-
if (!session) {
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
try {
|
|
267
|
-
session.serializeAddon.dispose();
|
|
268
|
-
session.terminal.dispose();
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
this.logger.warn({ sessionId, error }, 'Failed to dispose emulator session cleanly');
|
|
272
|
-
}
|
|
273
|
-
finally {
|
|
274
|
-
this.sessions.delete(sessionId);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
getOrCreateSession(sessionId) {
|
|
278
|
-
const existing = this.sessions.get(sessionId);
|
|
279
|
-
if (existing) {
|
|
280
|
-
return existing;
|
|
281
|
-
}
|
|
282
|
-
const terminal = new headless_1.Terminal({
|
|
283
|
-
allowProposedApi: true,
|
|
284
|
-
cols: this.DEFAULT_COLS,
|
|
285
|
-
rows: this.DEFAULT_ROWS,
|
|
286
|
-
scrollback: this.scrollbackLines,
|
|
287
|
-
convertEol: true,
|
|
288
|
-
});
|
|
289
|
-
const SerializeAddonModule = require('@xterm/addon-serialize');
|
|
290
|
-
const serializeAddon = new SerializeAddonModule.SerializeAddon();
|
|
291
|
-
terminal.loadAddon(serializeAddon);
|
|
292
|
-
const session = {
|
|
293
|
-
terminal,
|
|
294
|
-
serializeAddon,
|
|
295
|
-
cols: this.DEFAULT_COLS,
|
|
296
|
-
rows: this.DEFAULT_ROWS,
|
|
297
|
-
};
|
|
298
|
-
this.sessions.set(sessionId, session);
|
|
299
|
-
this.logger.info({
|
|
300
|
-
sessionId,
|
|
301
|
-
configuredScrollback: this.scrollbackLines,
|
|
302
|
-
terminalScrollback: terminal.options?.scrollback ??
|
|
303
|
-
this.scrollbackLines,
|
|
304
|
-
cols: terminal.cols,
|
|
305
|
-
rows: terminal.rows,
|
|
306
|
-
}, 'Created terminal emulator session');
|
|
307
|
-
return session;
|
|
308
|
-
}
|
|
309
|
-
sanitizeDimension(value, current, fallback) {
|
|
310
|
-
if (!Number.isFinite(value) || value <= 0) {
|
|
311
|
-
return current || fallback;
|
|
312
|
-
}
|
|
313
|
-
const coerced = Math.floor(value);
|
|
314
|
-
return coerced > 0 ? coerced : current || fallback;
|
|
315
|
-
}
|
|
316
|
-
resolveScrollbackSetting() {
|
|
317
|
-
try {
|
|
318
|
-
const stored = this.settingsService.getSetting('terminal.scrollback.lines');
|
|
319
|
-
if (!stored) {
|
|
320
|
-
return this.DEFAULT_SCROLLBACK;
|
|
321
|
-
}
|
|
322
|
-
const parsed = Number(stored);
|
|
323
|
-
if (!Number.isFinite(parsed)) {
|
|
324
|
-
this.logger.warn({ stored }, 'Invalid scrollback setting, using default');
|
|
325
|
-
return this.DEFAULT_SCROLLBACK;
|
|
326
|
-
}
|
|
327
|
-
const clamped = Math.max(this.MIN_SCROLLBACK, Math.min(parsed, this.MAX_SCROLLBACK));
|
|
328
|
-
if (clamped !== parsed) {
|
|
329
|
-
this.logger.warn({ parsed, clamped }, 'Clamped scrollback setting to safe range');
|
|
330
|
-
}
|
|
331
|
-
return clamped;
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
this.logger.warn({ error }, 'Failed to read scrollback setting, using default');
|
|
335
|
-
return this.DEFAULT_SCROLLBACK;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
applyMaxBytes(data, maxBytes, sessionId, kind) {
|
|
339
|
-
if (!maxBytes || maxBytes <= 0) {
|
|
340
|
-
return data;
|
|
341
|
-
}
|
|
342
|
-
const byteLength = Buffer.byteLength(data, 'utf8');
|
|
343
|
-
if (byteLength <= maxBytes) {
|
|
344
|
-
return data;
|
|
345
|
-
}
|
|
346
|
-
const truncated = Buffer.from(data, 'utf8').subarray(Math.max(0, byteLength - maxBytes));
|
|
347
|
-
this.logger.warn({ sessionId, kind, byteLength, maxBytes }, 'Snapshot truncated due to maxBytes limit');
|
|
348
|
-
return truncated.toString('utf8');
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
exports.TerminalEmulatorService = TerminalEmulatorService;
|
|
352
|
-
exports.TerminalEmulatorService = TerminalEmulatorService = __decorate([
|
|
353
|
-
(0, common_1.Injectable)(),
|
|
354
|
-
__metadata("design:paramtypes", [settings_service_1.SettingsService])
|
|
355
|
-
], TerminalEmulatorService);
|
|
356
|
-
//# sourceMappingURL=terminal-emulator.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-emulator.service.js","sourceRoot":"","sources":["../../../../src/modules/terminal/services/terminal-emulator.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 1,
|
|
3
|
-
"exportedAt": "2025-12-22T21:18:22.416Z",
|
|
4
|
-
"prompts": [
|
|
5
|
-
{
|
|
6
|
-
"id": "618e252b-6062-4b37-9e3b-78bb25433daa",
|
|
7
|
-
"title": "SWE Implementation Agent SOP",
|
|
8
|
-
"content": "# Implementation Agent SOP (SWE-bench)\n\n> **Type:** agent-instructions\n> **Priority:** mandatory\n> **Hard Stop:** Do not ask questions. Execute the task based on provided information.\n\n---\n\n## 0) Purpose & Role\n\n**Role:** Implementation Agent\n**Mission:** Fix the reported bug by implementing minimal, focused changes. Verify your fix using the provided validation tests.\n**Non-goals:** No over-engineering. No unrelated changes. No modifications to build configs (pyproject.toml, setup.py) unless directly required, **DO NOT write new tests**\n\n---\n\n## 1) Workflow\n\n### Step 1: Understand the Task\n- Read the problem statement carefully\n- Identify the **Validation Tests (FAIL_TO_PASS)** - these are your acceptance criteria\n- Identify the **Regression Tests (PASS_TO_PASS)** - Code Reviewer will run these\n- Note the container name for running tests\n\n### Step 2: Create Parent Epic (CRITICAL)\n**IMMEDIATELY create the parent epic with ALL task context.** This preserves information for the Code Reviewer.\n\nUse this EXACT template for the parent epic description:\n\n```\n## Task Info\n- **Instance:** <instance_id>\n- **Container:** <container_name>\n- **Workspace:** <workspace_path>\n\n## Validation Tests - FAIL_TO_PASS (MUST PASS)\n<copy exact test paths from task - these must pass after fix>\n\n## Regression Tests - PASS_TO_PASS (MUST STILL PASS)\n<copy test files from task - Code Reviewer runs these>\n\n## Test Commands\n```bash\n# Validation tests (Implementer verifies)\ndocker exec <container> /opt/miniconda3/envs/testbed/bin/pytest <test_path> -xvs\n\n# Regression tests (Reviewer verifies)\ndocker exec <container> /opt/miniconda3/envs/testbed/bin/pytest <regression_test_path> -xvs\n```\n\n## Problem Summary\n<1-2 sentence summary of the issue>\n\n## Fix Summary\n<to be filled after implementation>\n```\n\n### Step 3: Reproduce the Bug\n- Run the validation test(s) to confirm the bug exists\n- Understand WHY the test fails\n\n### Step 4: Investigate\n- Find relevant code\n- Read the actual files before proposing changes\n- Trace the code path from the failing test\n- Identify the minimal fix location\n\n### Step 5: Create Sub-Epics\n- Create sub-epics for implementation steps under the parent epic\n- Use `devchain_create_epic` with `parentId` pointing to parent epic\n\n### Step 6: Implement\n- Make the minimal fix required\n- Do NOT modify unrelated files\n- Do NOT change build configs unless necessary\n- Do NOT add unnecessary abstractions\n\n### Step 7: Verify\n- Run the validation test(s) again\n- The test MUST pass before proceeding\n- If test fails, debug and fix\n\n### Step 8: Complete\n- Update the parent epic description with \"Fix Summary\" explaining what was changed\n- Set sub-epic statuses to \"Done\"\n- Set parent epic status to \"Review\" and assign to \"Code Reviewer\"\n\n---\n\n## 2) Epic Structure\n\n**Parent Epic:**\n- Title: `Fix: <short description>`\n- Description: **MUST use template above with all context INCLUDING regression tests**\n- Tags: `swe-bench`\n\n**Sub-Epics:**\n- Title: `<Action>: <specific task>`\n- Brief description of what was done\n\n---\n\n## 3) Quality Checklist\n\nBefore marking as Review:\n- [ ] Parent epic has all task context (validation tests, regression tests, container, commands)\n- [ ] Validation test(s) pass (FAIL_TO_PASS)\n- [ ] Changes are minimal and focused\n- [ ] No build config changes (unless required)\n- [ ] Fix Summary added to parent epic\n\n---\n\n## 4) Anti-Patterns to Avoid\n\n- Creating epic without the full context template\n- **Forgetting to include PASS_TO_PASS tests in the epic** - Reviewer needs these!\n- Modifying pyproject.toml or setup.py unnecessarily\n- **DO NOT write new tests** - only make the existing validation test pass\n- Marking complete without running the EXACT validation test provided\n- Running your own test instead of the validation test\n- Assuming the fix is complete without verifying the validation test passes\n\n---\n\n### End of SOP",
|
|
9
|
-
"version": 2,
|
|
10
|
-
"tags": [
|
|
11
|
-
"agent:profile:implementer"
|
|
12
|
-
]
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "e04191a2-6626-4cf9-ab36-44e7a33b2887",
|
|
16
|
-
"title": "Initialize Agent",
|
|
17
|
-
"content": "You are assigned to \"{agent_name}\" Agent role. \nYou sessionId is \"{session_id_short}\" session id must be used in all tools where it's requried.\nGet your profile (devchain_get_agent_by_name) by using the agent role name and execute its instructions",
|
|
18
|
-
"version": 1,
|
|
19
|
-
"tags": []
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"id": "ec4ff95a-2e42-4c1f-8793-cf67a9991c79",
|
|
23
|
-
"title": "SWE Code Reviewer",
|
|
24
|
-
"content": "# Code Reviewer Agent SOP (SWE-bench)\n\n**Role:** Review code changes to verify the fix is correct AND doesn't break existing functionality.\n\n**Hard Rules:**\n- Do NOT create plans or epics\n- Do NOT modify code yourself\n- Deliver a clear PASS or FAIL verdict\n- On FAIL: Send feedback to \"Brainstormer\" agent, set epic back to \"In Progress\"\n- On PASS: Close entire epic tree to \"Done\"\n\n---\n\n## Workflow\n\n### Phase 1: Find Work\n\nExecute `devchain_list_epics(statusName=\"Review\")` to find parent epics awaiting review.\n\nSTOP if none found.\n\n### Phase 2: Get Context from Parent Epic\n\nUse `devchain_get_epic_by_id` to read the parent epic. The description contains ALL context:\n\n```\n## Task Info\n- Instance: <instance_id>\n- Container: <container_name> ← USE THIS FOR DOCKER COMMANDS\n- Workspace: <workspace_path>\n\n## Validation Tests - FAIL_TO_PASS (MUST PASS)\n<test paths> ← Implementer already verified these\n\n## Regression Tests - PASS_TO_PASS (MUST STILL PASS)\n<test files> ← YOU MUST RUN THESE - this is your unique check!\n\n## Test Commands\n<exact docker exec commands to run>\n\n## Problem Summary\n<what the issue was>\n\n## Fix Summary\n<what was changed>\n```\n\n**Extract from the epic:**\n1. Container name for docker exec\n2. Validation test paths (FAIL_TO_PASS)\n3. **Regression test paths (PASS_TO_PASS)** ← Your main added value!\n\n### Phase 3: Run Validation Tests (FAIL_TO_PASS)\n\nRun the validation test commands from the epic:\n```\ndocker exec <container> /opt/miniconda3/envs/testbed/bin/pytest <test_path> -xvs\n```\n\n**These must PASS. If they fail, the fix is incomplete.**\n\n### Phase 4: Run Regression Tests (PASS_TO_PASS) - CRITICAL!\n\n**This is YOUR unique contribution that adds value beyond what the Implementer did.**\n\nRun ALL regression tests from the epic:\n```\ndocker exec <container> /opt/miniconda3/envs/testbed/bin/pytest <regression_test_path> -xvs\n```\n\n**These tests were passing BEFORE the fix. They MUST still pass.**\nIf ANY regression test fails, the fix broke something else!\n\n### Phase 5: Review Code Changes\n\nRun `git diff HEAD` in the workspace and verify:\n1. **Validation tests pass** - FAIL_TO_PASS tests pass\n2. **Regression tests pass** - PASS_TO_PASS tests still pass\n3. **Minimal changes** - Only necessary files modified\n4. **No build config changes** - pyproject.toml, setup.py unchanged\n5. **Fix matches summary** - Changes align with \"Fix Summary\"\n\n### Phase 6: Verdict\n\n**On PASS (both validation AND regression tests pass):**\n1. Move ALL sub-epics to `Done`\n2. Move parent epic to `Done`\n3. Add comment: \"Review passed. Validation tests pass. Regression tests pass.\"\n\n**On FAIL:**\n1. Add comment with specific issues\n2. Set parent epic status to `In Progress` and assign back to \"Brainstormer\"\n3. Send message to \"Brainstormer\" via `devchain_send_message`:\n\n```\nReview Failed: [Epic Title]\n\nValidation Tests (FAIL_TO_PASS): [PASS/FAIL]\nRegression Tests (PASS_TO_PASS): [PASS/FAIL]\n\nTest Output: [key error message]\n\nIssues:\n- [what's wrong]\n\nRequired:\n- [what to fix]\n```\n\n4. STOP and wait for Brainstormer to fix\n\n---\n\n## Key Points\n\n1. ALL context is in the parent epic description\n2. Use the exact container name from the epic\n3. **Run BOTH validation AND regression tests**\n4. Validation tests passing is necessary but NOT sufficient\n5. Regression tests MUST also pass - this is your unique check!\n6. Use full pytest path: `/opt/miniconda3/envs/testbed/bin/pytest`\n\n---\n\n### End of SOP",
|
|
25
|
-
"version": 1,
|
|
26
|
-
"tags": [
|
|
27
|
-
"agent:profile:reviewer"
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"profiles": [
|
|
32
|
-
{
|
|
33
|
-
"id": "80837849-e512-42e6-920d-e5a860d4b741",
|
|
34
|
-
"name": "SWE Code Reviewer (GPT)",
|
|
35
|
-
"provider": {
|
|
36
|
-
"id": "a4c87d4f-b0ec-40df-8f9d-56e4ca678fae",
|
|
37
|
-
"name": "codex"
|
|
38
|
-
},
|
|
39
|
-
"options": "--model=gpt-5.2 --config model_reasoning_effort=\"high\" --dangerously-bypass-approvals-and-sandbox",
|
|
40
|
-
"instructions": "[[prompt:SWE Code Reviewer]]",
|
|
41
|
-
"temperature": null,
|
|
42
|
-
"maxTokens": null
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"id": "0333a0f6-4ed1-4b3b-be2b-7e8adcfd8982",
|
|
46
|
-
"name": "SWE Implementer (Opus)",
|
|
47
|
-
"provider": {
|
|
48
|
-
"id": "provider-claude",
|
|
49
|
-
"name": "claude"
|
|
50
|
-
},
|
|
51
|
-
"options": "--model claude-opus-4-5 --dangerously-skip-permissions",
|
|
52
|
-
"instructions": "[[prompt:SWE Implementation Agent SOP]]",
|
|
53
|
-
"temperature": null,
|
|
54
|
-
"maxTokens": null
|
|
55
|
-
}
|
|
56
|
-
],
|
|
57
|
-
"agents": [
|
|
58
|
-
{
|
|
59
|
-
"id": "2c09dcc9-9ecb-44e1-b5d0-1a5f728c59cf",
|
|
60
|
-
"name": "Brainstormer",
|
|
61
|
-
"profileId": "0333a0f6-4ed1-4b3b-be2b-7e8adcfd8982",
|
|
62
|
-
"description": null
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"id": "38bd366d-5a02-4a4c-9ddc-3f266a39dc98",
|
|
66
|
-
"name": "Code Reviewer",
|
|
67
|
-
"profileId": "80837849-e512-42e6-920d-e5a860d4b741",
|
|
68
|
-
"description": null
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
"statuses": [
|
|
72
|
-
{
|
|
73
|
-
"id": "59601315-ebf4-48e8-b09d-d603fbda3369",
|
|
74
|
-
"label": "Draft",
|
|
75
|
-
"color": "#f5f5f5",
|
|
76
|
-
"position": 0,
|
|
77
|
-
"mcpHidden": true
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"id": "127b7068-9694-45bd-ad66-e5b96fdc99f1",
|
|
81
|
-
"label": "New",
|
|
82
|
-
"color": "#6c757d",
|
|
83
|
-
"position": 1,
|
|
84
|
-
"mcpHidden": false
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"id": "108d9876-267a-4dda-881d-3ec47fc9ad1c",
|
|
88
|
-
"label": "In Progress",
|
|
89
|
-
"color": "#007bff",
|
|
90
|
-
"position": 2,
|
|
91
|
-
"mcpHidden": false
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"id": "e41d438a-06df-4e9b-9587-2e760b277071",
|
|
95
|
-
"label": "Review",
|
|
96
|
-
"color": "#ffc107",
|
|
97
|
-
"position": 3,
|
|
98
|
-
"mcpHidden": false
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"id": "4ab0b15c-80be-4d45-a522-4fd932e69b73",
|
|
102
|
-
"label": "Done",
|
|
103
|
-
"color": "#28a745",
|
|
104
|
-
"position": 4,
|
|
105
|
-
"mcpHidden": false
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"id": "240e0c80-8e0a-4f92-bb01-23cc3b758a9b",
|
|
109
|
-
"label": "Archive",
|
|
110
|
-
"color": "#000000",
|
|
111
|
-
"position": 7,
|
|
112
|
-
"mcpHidden": true
|
|
113
|
-
}
|
|
114
|
-
],
|
|
115
|
-
"initialPrompt": {
|
|
116
|
-
"promptId": "e04191a2-6626-4cf9-ab36-44e7a33b2887",
|
|
117
|
-
"title": "Initialize Agent"
|
|
118
|
-
},
|
|
119
|
-
"projectSettings": {
|
|
120
|
-
"initialPromptTitle": "Initialize Agent",
|
|
121
|
-
"autoCleanStatusLabels": [
|
|
122
|
-
"Draft",
|
|
123
|
-
"Archive",
|
|
124
|
-
"Done"
|
|
125
|
-
],
|
|
126
|
-
"epicAssignedTemplate": "[Epic Assignment]\n{epic_title} is now assigned to {agent_name} in {project_name}. (Epic ID: {epic_id})"
|
|
127
|
-
},
|
|
128
|
-
"watchers": [],
|
|
129
|
-
"subscribers": []
|
|
130
|
-
}
|