devchain-cli 0.17.0 → 0.17.2

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 (152) hide show
  1. package/dist/node_modules/@devchain/codebase-overview/tsconfig.tsbuildinfo +1 -1
  2. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  3. package/dist/server/app.main.module.js +2 -0
  4. package/dist/server/app.main.module.js.map +1 -1
  5. package/dist/server/app.normal.module.js +2 -0
  6. package/dist/server/app.normal.module.js.map +1 -1
  7. package/dist/server/modules/events/catalog/broadcast-registry.js +19 -12
  8. package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -1
  9. package/dist/server/modules/events/catalog/index.d.ts +23 -3
  10. package/dist/server/modules/events/catalog/session.transcript.updated.d.ts +23 -3
  11. package/dist/server/modules/events/catalog/session.transcript.updated.js +41 -19
  12. package/dist/server/modules/events/catalog/session.transcript.updated.js.map +1 -1
  13. package/dist/server/modules/metrics/controllers/metrics.controller.d.ts +6 -0
  14. package/dist/server/modules/metrics/controllers/metrics.controller.js +38 -0
  15. package/dist/server/modules/metrics/controllers/metrics.controller.js.map +1 -0
  16. package/dist/server/modules/metrics/helpers/byte-accounting.helper.d.ts +17 -0
  17. package/dist/server/modules/metrics/helpers/byte-accounting.helper.js +88 -0
  18. package/dist/server/modules/metrics/helpers/byte-accounting.helper.js.map +1 -0
  19. package/dist/server/modules/metrics/metrics.module.d.ts +2 -0
  20. package/dist/server/modules/metrics/metrics.module.js +23 -0
  21. package/dist/server/modules/metrics/metrics.module.js.map +1 -0
  22. package/dist/server/modules/metrics/services/metrics.service.d.ts +20 -0
  23. package/dist/server/modules/metrics/services/metrics.service.js +241 -0
  24. package/dist/server/modules/metrics/services/metrics.service.js.map +1 -0
  25. package/dist/server/modules/metrics/types/metrics.types.d.ts +100 -0
  26. package/dist/server/modules/metrics/types/metrics.types.js +3 -0
  27. package/dist/server/modules/metrics/types/metrics.types.js.map +1 -0
  28. package/dist/server/modules/projects/helpers/profile-mapping.helpers.d.ts +5 -3
  29. package/dist/server/modules/projects/helpers/profile-mapping.helpers.js +25 -13
  30. package/dist/server/modules/projects/helpers/profile-mapping.helpers.js.map +1 -1
  31. package/dist/server/modules/projects/helpers/project-import.js +9 -7
  32. package/dist/server/modules/projects/helpers/project-import.js.map +1 -1
  33. package/dist/server/modules/projects/helpers/template-loader.js +11 -9
  34. package/dist/server/modules/projects/helpers/template-loader.js.map +1 -1
  35. package/dist/server/modules/projects/template-codec/codec-registry.js.map +1 -1
  36. package/dist/server/modules/projects/template-codec/codecs/agents.codec.d.ts +1 -1
  37. package/dist/server/modules/projects/template-codec/codecs/agents.codec.js +4 -4
  38. package/dist/server/modules/projects/template-codec/codecs/agents.codec.js.map +1 -1
  39. package/dist/server/modules/projects/template-codec/codecs/profiles.codec.d.ts +1 -1
  40. package/dist/server/modules/projects/template-codec/codecs/profiles.codec.js +27 -8
  41. package/dist/server/modules/projects/template-codec/codecs/profiles.codec.js.map +1 -1
  42. package/dist/server/modules/projects/template-codec/codecs/watchers.codec.js +1 -1
  43. package/dist/server/modules/projects/template-codec/codecs/watchers.codec.js.map +1 -1
  44. package/dist/server/modules/projects/template-codec/import-context.d.ts +6 -1
  45. package/dist/server/modules/projects/template-codec/import-context.js.map +1 -1
  46. package/dist/server/modules/projects/template-codec/template-section-codec.d.ts +2 -3
  47. package/dist/server/modules/session-reader/adapters/antigravity-session-reader.adapter.d.ts +6 -0
  48. package/dist/server/modules/session-reader/adapters/antigravity-session-reader.adapter.js +66 -0
  49. package/dist/server/modules/session-reader/adapters/antigravity-session-reader.adapter.js.map +1 -1
  50. package/dist/server/modules/session-reader/adapters/claude-session-reader.adapter.d.ts +5 -0
  51. package/dist/server/modules/session-reader/adapters/claude-session-reader.adapter.js +12 -0
  52. package/dist/server/modules/session-reader/adapters/claude-session-reader.adapter.js.map +1 -1
  53. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.d.ts +5 -0
  54. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js +12 -0
  55. package/dist/server/modules/session-reader/adapters/codex-session-reader.adapter.js.map +1 -1
  56. package/dist/server/modules/session-reader/adapters/copilot-session-reader.adapter.d.ts +5 -0
  57. package/dist/server/modules/session-reader/adapters/copilot-session-reader.adapter.js +12 -0
  58. package/dist/server/modules/session-reader/adapters/copilot-session-reader.adapter.js.map +1 -1
  59. package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.d.ts +5 -0
  60. package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.js +15 -0
  61. package/dist/server/modules/session-reader/adapters/opencode-session-reader.adapter.js.map +1 -1
  62. package/dist/server/modules/session-reader/adapters/session-reader-adapter.interface.d.ts +10 -0
  63. package/dist/server/modules/session-reader/adapters/session-reader-adapter.interface.js +28 -1
  64. package/dist/server/modules/session-reader/adapters/session-reader-adapter.interface.js.map +1 -1
  65. package/dist/server/modules/session-reader/controllers/session-reader.controller.d.ts +10 -4
  66. package/dist/server/modules/session-reader/controllers/session-reader.controller.js +18 -19
  67. package/dist/server/modules/session-reader/controllers/session-reader.controller.js.map +1 -1
  68. package/dist/server/modules/session-reader/data/pricing.json +206 -0
  69. package/dist/server/modules/session-reader/parsers/claude-jsonl.parser.d.ts +1 -0
  70. package/dist/server/modules/session-reader/parsers/claude-jsonl.parser.js +7 -3
  71. package/dist/server/modules/session-reader/parsers/claude-jsonl.parser.js.map +1 -1
  72. package/dist/server/modules/session-reader/parsers/codex-jsonl.parser.d.ts +1 -0
  73. package/dist/server/modules/session-reader/parsers/codex-jsonl.parser.js +22 -11
  74. package/dist/server/modules/session-reader/parsers/codex-jsonl.parser.js.map +1 -1
  75. package/dist/server/modules/session-reader/parsers/copilot-jsonl.parser.d.ts +1 -0
  76. package/dist/server/modules/session-reader/parsers/copilot-jsonl.parser.js +21 -9
  77. package/dist/server/modules/session-reader/parsers/copilot-jsonl.parser.js.map +1 -1
  78. package/dist/server/modules/session-reader/readers/opencode-sqlite.reader.d.ts +5 -1
  79. package/dist/server/modules/session-reader/readers/opencode-sqlite.reader.js +102 -0
  80. package/dist/server/modules/session-reader/readers/opencode-sqlite.reader.js.map +1 -1
  81. package/dist/server/modules/session-reader/services/session-cache.service.d.ts +71 -4
  82. package/dist/server/modules/session-reader/services/session-cache.service.js +427 -68
  83. package/dist/server/modules/session-reader/services/session-cache.service.js.map +1 -1
  84. package/dist/server/modules/session-reader/services/session-reader.service.d.ts +21 -4
  85. package/dist/server/modules/session-reader/services/session-reader.service.js +126 -40
  86. package/dist/server/modules/session-reader/services/session-reader.service.js.map +1 -1
  87. package/dist/server/modules/session-reader/services/transcript-cursor.d.ts +1 -1
  88. package/dist/server/modules/session-reader/services/transcript-cursor.js +2 -2
  89. package/dist/server/modules/session-reader/services/transcript-cursor.js.map +1 -1
  90. package/dist/server/modules/session-reader/services/transcript-watcher.service.d.ts +2 -0
  91. package/dist/server/modules/session-reader/services/transcript-watcher.service.js +61 -11
  92. package/dist/server/modules/session-reader/services/transcript-watcher.service.js.map +1 -1
  93. package/dist/server/modules/session-reader/session-reader.module.js +3 -1
  94. package/dist/server/modules/session-reader/session-reader.module.js.map +1 -1
  95. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.d.ts +4 -4
  96. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js +11 -5
  97. package/dist/server/modules/sessions/services/session-runtime/__test-utils__/pipeline-harness.js.map +1 -1
  98. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.d.ts +3 -1
  99. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.js +11 -2
  100. package/dist/server/modules/sessions/services/session-runtime/session-restore-pipeline.service.js.map +1 -1
  101. package/dist/server/modules/terminal/dtos/ws-envelope.dto.d.ts +140 -1
  102. package/dist/server/modules/terminal/dtos/ws-envelope.dto.js +59 -2
  103. package/dist/server/modules/terminal/dtos/ws-envelope.dto.js.map +1 -1
  104. package/dist/server/modules/terminal/gateways/terminal.gateway.d.ts +33 -1
  105. package/dist/server/modules/terminal/gateways/terminal.gateway.js +471 -61
  106. package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -1
  107. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.d.ts +1 -0
  108. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.js +1 -0
  109. package/dist/server/modules/terminal/services/process-executor/fake-process-executor.js.map +1 -1
  110. package/dist/server/modules/terminal/services/pty.service.d.ts +8 -3
  111. package/dist/server/modules/terminal/services/pty.service.js +11 -2
  112. package/dist/server/modules/terminal/services/pty.service.js.map +1 -1
  113. package/dist/server/modules/terminal/services/terminal-io/capture.js +2 -0
  114. package/dist/server/modules/terminal/services/terminal-io/capture.js.map +1 -1
  115. package/dist/server/modules/terminal/services/terminal-io/delivery.d.ts +1 -0
  116. package/dist/server/modules/terminal/services/terminal-io/delivery.js.map +1 -1
  117. package/dist/server/modules/terminal/services/terminal-io/terminal-io.service.js +28 -1
  118. package/dist/server/modules/terminal/services/terminal-io/terminal-io.service.js.map +1 -1
  119. package/dist/server/modules/terminal/services/terminal-key-input/terminal-key-input.facade.d.ts +6 -0
  120. package/dist/server/modules/terminal/services/terminal-key-input/terminal-key-input.facade.js +26 -1
  121. package/dist/server/modules/terminal/services/terminal-key-input/terminal-key-input.facade.js.map +1 -1
  122. package/dist/server/modules/terminal/services/terminal-seed.service.d.ts +27 -3
  123. package/dist/server/modules/terminal/services/terminal-seed.service.js +75 -19
  124. package/dist/server/modules/terminal/services/terminal-seed.service.js.map +1 -1
  125. package/dist/server/modules/terminal/services/terminal-send-scheduler.service.d.ts +73 -0
  126. package/dist/server/modules/terminal/services/terminal-send-scheduler.service.js +387 -0
  127. package/dist/server/modules/terminal/services/terminal-send-scheduler.service.js.map +1 -0
  128. package/dist/server/modules/terminal/services/terminal-session/terminal-session.d.ts +4 -10
  129. package/dist/server/modules/terminal/services/terminal-session/terminal-session.js +20 -48
  130. package/dist/server/modules/terminal/services/terminal-session/terminal-session.js.map +1 -1
  131. package/dist/server/modules/terminal/services/terminal-socket-drain.adapter.d.ts +10 -0
  132. package/dist/server/modules/terminal/services/terminal-socket-drain.adapter.js +75 -0
  133. package/dist/server/modules/terminal/services/terminal-socket-drain.adapter.js.map +1 -0
  134. package/dist/server/modules/terminal/services/terminal-stream.service.d.ts +53 -6
  135. package/dist/server/modules/terminal/services/terminal-stream.service.js +190 -35
  136. package/dist/server/modules/terminal/services/terminal-stream.service.js.map +1 -1
  137. package/dist/server/modules/terminal/terminal.module.js +7 -0
  138. package/dist/server/modules/terminal/terminal.module.js.map +1 -1
  139. package/dist/server/templates/3-agents-dev.json +97 -93
  140. package/dist/server/templates/teams-dev.json +174 -160
  141. package/dist/server/tsconfig.tsbuildinfo +1 -1
  142. package/dist/server/ui/assets/{ReviewDetailPage-Dd40lXMW.js → ReviewDetailPage-C5BI5FSx.js} +1 -1
  143. package/dist/server/ui/assets/{ReviewsPage-CBSbsimJ.js → ReviewsPage-C4V7MJQc.js} +1 -1
  144. package/dist/server/ui/assets/index-BSx7QxmM.css +32 -0
  145. package/dist/server/ui/assets/index-nwIXVn_B.js +1142 -0
  146. package/dist/server/ui/assets/{useReviewSubscription-CpDyx3vJ.js → useReviewSubscription-Bd1R13V5.js} +1 -1
  147. package/dist/server/ui/index.html +2 -2
  148. package/dist/templates/3-agents-dev.json +97 -93
  149. package/dist/templates/teams-dev.json +174 -160
  150. package/package.json +16 -5
  151. package/dist/server/ui/assets/index-COvyD_66.css +0 -32
  152. package/dist/server/ui/assets/index-DtIjl-Lt.js +0 -1113
@@ -0,0 +1,75 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TerminalSocketDrainAdapter = exports.PINNED_ENGINE_IO_VERSION = exports.PINNED_SOCKET_IO_VERSION = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ exports.PINNED_SOCKET_IO_VERSION = '4.8.1';
12
+ exports.PINNED_ENGINE_IO_VERSION = '6.6.4';
13
+ let TerminalSocketDrainAdapter = class TerminalSocketDrainAdapter {
14
+ isWritable(socket) {
15
+ const connection = this.getConnection(socket);
16
+ return (socket.connected !== false &&
17
+ connection?.readyState === 'open' &&
18
+ connection.transport?.writable === true);
19
+ }
20
+ send(socket, envelope, onComplete) {
21
+ if (!this.isWritable(socket))
22
+ return false;
23
+ const transport = this.getConnection(socket).transport;
24
+ let complete = false;
25
+ const handleDrain = () => {
26
+ if (complete)
27
+ return;
28
+ complete = true;
29
+ onComplete();
30
+ };
31
+ transport.once('drain', handleDrain);
32
+ try {
33
+ socket.emit('message', envelope);
34
+ return true;
35
+ }
36
+ catch (error) {
37
+ transport.removeListener('drain', handleDrain);
38
+ throw error;
39
+ }
40
+ }
41
+ onWritable(socket, listener) {
42
+ const connection = this.getConnection(socket);
43
+ const transport = connection?.transport;
44
+ if (!transport)
45
+ return () => undefined;
46
+ let active = true;
47
+ const handleReady = () => {
48
+ if (!active)
49
+ return;
50
+ active = false;
51
+ transport.removeListener('ready', handleReady);
52
+ listener();
53
+ };
54
+ transport.once('ready', handleReady);
55
+ if (this.isWritable(socket))
56
+ queueMicrotask(handleReady);
57
+ return () => {
58
+ if (!active)
59
+ return;
60
+ active = false;
61
+ transport.removeListener('ready', handleReady);
62
+ };
63
+ }
64
+ getBufferedPacketCount(socket) {
65
+ return this.getConnection(socket)?.writeBuffer?.length ?? 0;
66
+ }
67
+ getConnection(socket) {
68
+ return socket.conn;
69
+ }
70
+ };
71
+ exports.TerminalSocketDrainAdapter = TerminalSocketDrainAdapter;
72
+ exports.TerminalSocketDrainAdapter = TerminalSocketDrainAdapter = __decorate([
73
+ (0, common_1.Injectable)()
74
+ ], TerminalSocketDrainAdapter);
75
+ //# sourceMappingURL=terminal-socket-drain.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-socket-drain.adapter.js","sourceRoot":"","sources":["../../../../src/modules/terminal/services/terminal-socket-drain.adapter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAG/B,QAAA,wBAAwB,GAAG,OAAO,CAAC;AACnC,QAAA,wBAAwB,GAAG,OAAO,CAAC;AAqBzC,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IACrC,UAAU,CAAC,MAAc;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,CACL,MAAM,CAAC,SAAS,KAAK,KAAK;YAC1B,UAAU,EAAE,UAAU,KAAK,MAAM;YACjC,UAAU,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CACxC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,QAAiB,EAAE,UAAsB;QAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAE,CAAC,SAAS,CAAC;QACxD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,EAAE,CAAC;QACf,CAAC,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,QAAoB;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,EAAE,SAAS,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;QAEvC,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,GAAG,KAAK,CAAC;YACf,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/C,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,cAAc,CAAC,WAAW,CAAC,CAAC;QAEzD,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,GAAG,KAAK,CAAC;YACf,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,MAAc;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;IAC9D,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,OAAO,MAAM,CAAC,IAAkD,CAAC;IACnE,CAAC;CACF,CAAA;AA7DY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;GACA,0BAA0B,CA6DtC"}
@@ -1,17 +1,64 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
1
2
  import { WsEnvelope } from '../dtos/ws-envelope.dto';
2
- export declare class TerminalStreamService {
3
+ import { MetricsService } from '../../metrics/services/metrics.service';
4
+ import type { FrameBufferStats } from '../../metrics/types/metrics.types';
5
+ export declare const MAX_TERMINAL_FRAME_BYTES: number;
6
+ export declare const MAX_REPLAY_BUFFER_BYTES: number;
7
+ export interface SequenceCursor {
8
+ sequenceEpoch: string;
9
+ currentSequence: number;
10
+ }
11
+ export interface ReconnectCursor {
12
+ sequenceEpoch: string;
13
+ sequence: number;
14
+ }
15
+ export type FrameReplayResult = {
16
+ status: 'covered';
17
+ frames: WsEnvelope[];
18
+ currentSequence: number;
19
+ } | {
20
+ status: 'gap';
21
+ currentSequence: number;
22
+ earliestAvailableSequence?: number;
23
+ discontinuitySequence?: number;
24
+ };
25
+ export type ReconnectReplayResult = FrameReplayResult & {
26
+ sequenceEpoch: string;
27
+ domainMismatch?: boolean;
28
+ };
29
+ export declare class TerminalStreamService implements OnModuleInit, OnModuleDestroy {
30
+ private readonly metricsService;
3
31
  private frameBuffers;
4
- private sequenceCounters;
32
+ private discontinuitySequences;
33
+ private retentionPaused;
5
34
  private readonly MAX_BUFFER_SIZE;
6
- private readonly MAX_FRAME_SIZE;
35
+ private readonly scheduledClears;
36
+ private clearExpiryHandler?;
37
+ constructor(metricsService: MetricsService);
38
+ onModuleInit(): void;
39
+ onModuleDestroy(): void;
40
+ getFrameBufferStats(): FrameBufferStats;
7
41
  initializeBuffer(sessionId: string): void;
8
- addFrame(sessionId: string, data: string): WsEnvelope;
9
- getFramesSince(sessionId: string, lastSequence?: number): WsEnvelope[];
42
+ private ensureBuffer;
43
+ addFrame(sessionId: string, data: string): WsEnvelope[];
44
+ markDiscontinuous(sessionId: string): number;
45
+ resumeRetention(sessionId: string): void;
46
+ private chunkUtf8;
47
+ getFramesSince(sessionId: string, lastSequence?: number): FrameReplayResult;
10
48
  clearBuffer(sessionId: string): void;
49
+ setClearExpiryHandler(handler: (sessionId: string) => void): void;
50
+ scheduleClear(sessionId: string, delayMs: number): void;
51
+ cancelScheduledClear(sessionId: string): number | null;
52
+ hasScheduledClear(sessionId: string): boolean;
11
53
  getCurrentSequence(sessionId: string): number;
12
- private getNextSequence;
54
+ getSequenceEpoch(sessionId: string): string | undefined;
55
+ sampleCursor(sessionId: string): SequenceCursor;
56
+ nextRecoveryCounter(sessionId: string): number;
57
+ getReconnectReplay(sessionId: string, cursor: ReconnectCursor): ReconnectReplayResult;
58
+ private nextSequence;
13
59
  getBufferStats(sessionId: string): {
14
60
  size: number;
61
+ bytes: number;
15
62
  sequence: number;
16
63
  } | null;
17
64
  }
@@ -5,70 +5,223 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TerminalStreamService = void 0;
12
+ exports.TerminalStreamService = exports.MAX_REPLAY_BUFFER_BYTES = exports.MAX_TERMINAL_FRAME_BYTES = void 0;
10
13
  const common_1 = require("@nestjs/common");
14
+ const node_crypto_1 = require("node:crypto");
11
15
  const logger_1 = require("../../../common/logging/logger");
12
16
  const ws_envelope_dto_1 = require("../dtos/ws-envelope.dto");
17
+ const metrics_service_1 = require("../../metrics/services/metrics.service");
18
+ const byte_accounting_helper_1 = require("../../metrics/helpers/byte-accounting.helper");
13
19
  const logger = (0, logger_1.createLogger)('TerminalStreamService');
20
+ exports.MAX_TERMINAL_FRAME_BYTES = 64 * 1024;
21
+ exports.MAX_REPLAY_BUFFER_BYTES = 1024 * 1024;
14
22
  let TerminalStreamService = class TerminalStreamService {
15
- constructor() {
23
+ constructor(metricsService) {
24
+ this.metricsService = metricsService;
16
25
  this.frameBuffers = new Map();
17
- this.sequenceCounters = new Map();
26
+ this.discontinuitySequences = new Map();
27
+ this.retentionPaused = new Set();
18
28
  this.MAX_BUFFER_SIZE = 100;
19
- this.MAX_FRAME_SIZE = 64 * 1024;
29
+ this.scheduledClears = new Map();
30
+ }
31
+ onModuleInit() {
32
+ this.metricsService.registerStatsProvider('frameBuffers', () => this.getFrameBufferStats());
33
+ }
34
+ onModuleDestroy() {
35
+ for (const { timer } of this.scheduledClears.values())
36
+ clearTimeout(timer);
37
+ this.scheduledClears.clear();
38
+ }
39
+ getFrameBufferStats() {
40
+ let totalFrames = 0;
41
+ let bytesEstimated = 0;
42
+ for (const buffer of this.frameBuffers.values()) {
43
+ totalFrames += buffer.frames.length;
44
+ bytesEstimated += (0, byte_accounting_helper_1.estimateObjectBytes)(buffer.frames);
45
+ }
46
+ return {
47
+ sessions: this.frameBuffers.size,
48
+ totalFrames,
49
+ bytesEstimated,
50
+ maxBufferCapacity: this.MAX_BUFFER_SIZE,
51
+ };
20
52
  }
21
53
  initializeBuffer(sessionId) {
22
- if (!this.frameBuffers.has(sessionId)) {
23
- this.frameBuffers.set(sessionId, {
54
+ this.ensureBuffer(sessionId);
55
+ }
56
+ ensureBuffer(sessionId) {
57
+ let buffer = this.frameBuffers.get(sessionId);
58
+ if (!buffer) {
59
+ buffer = {
24
60
  frames: [],
61
+ bytes: 0,
25
62
  maxSize: this.MAX_BUFFER_SIZE,
26
- });
27
- this.sequenceCounters.set(sessionId, 0);
28
- logger.info({ sessionId }, 'Initialized frame buffer');
63
+ sequenceEpoch: (0, node_crypto_1.randomUUID)(),
64
+ currentSequence: 0,
65
+ recoveryCounter: 0,
66
+ };
67
+ this.frameBuffers.set(sessionId, buffer);
68
+ logger.info({ sessionId, sequenceEpoch: buffer.sequenceEpoch }, 'Initialized frame buffer');
29
69
  }
70
+ return buffer;
30
71
  }
31
72
  addFrame(sessionId, data) {
32
- this.initializeBuffer(sessionId);
33
- const sequence = this.getNextSequence(sessionId);
34
- const buffer = this.frameBuffers.get(sessionId);
35
- if (data.length > this.MAX_FRAME_SIZE) {
36
- logger.warn({ sessionId, dataLength: data.length }, 'Data exceeds max frame size, chunking...');
73
+ const buffer = this.ensureBuffer(sessionId);
74
+ const envelopes = [];
75
+ for (const chunk of this.chunkUtf8(data)) {
76
+ const sequence = this.nextSequence(buffer);
77
+ const payload = { data: chunk, sequence };
78
+ const envelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'data', payload);
79
+ const chunkBytes = Buffer.byteLength(chunk, 'utf8');
80
+ buffer.frames.push(envelope);
81
+ buffer.bytes += chunkBytes;
82
+ envelopes.push(envelope);
83
+ while (buffer.frames.length > buffer.maxSize || buffer.bytes > exports.MAX_REPLAY_BUFFER_BYTES) {
84
+ const evicted = buffer.frames.shift();
85
+ if (!evicted)
86
+ break;
87
+ buffer.bytes -= Buffer.byteLength(evicted.payload.data, 'utf8');
88
+ }
37
89
  }
38
- const payload = { data, sequence };
39
- const envelope = (0, ws_envelope_dto_1.createEnvelope)(`terminal/${sessionId}`, 'data', payload);
40
- buffer.frames.push(envelope);
41
- if (buffer.frames.length > buffer.maxSize) {
42
- buffer.frames.shift();
90
+ return envelopes;
91
+ }
92
+ markDiscontinuous(sessionId) {
93
+ const buffer = this.ensureBuffer(sessionId);
94
+ const existing = this.discontinuitySequences.get(sessionId);
95
+ if (this.retentionPaused.has(sessionId) && existing !== undefined)
96
+ return existing;
97
+ const discontinuitySequence = this.nextSequence(buffer);
98
+ this.discontinuitySequences.set(sessionId, discontinuitySequence);
99
+ this.retentionPaused.add(sessionId);
100
+ return discontinuitySequence;
101
+ }
102
+ resumeRetention(sessionId) {
103
+ this.retentionPaused.delete(sessionId);
104
+ }
105
+ chunkUtf8(data) {
106
+ if (Buffer.byteLength(data, 'utf8') <= exports.MAX_TERMINAL_FRAME_BYTES)
107
+ return [data];
108
+ const chunks = [];
109
+ let chunk = '';
110
+ let chunkBytes = 0;
111
+ for (const codePoint of data) {
112
+ const codePointBytes = Buffer.byteLength(codePoint, 'utf8');
113
+ if (chunkBytes + codePointBytes > exports.MAX_TERMINAL_FRAME_BYTES && chunk.length > 0) {
114
+ chunks.push(chunk);
115
+ chunk = '';
116
+ chunkBytes = 0;
117
+ }
118
+ chunk += codePoint;
119
+ chunkBytes += codePointBytes;
43
120
  }
44
- return envelope;
121
+ if (chunk.length > 0)
122
+ chunks.push(chunk);
123
+ return chunks;
45
124
  }
46
125
  getFramesSince(sessionId, lastSequence) {
47
126
  const buffer = this.frameBuffers.get(sessionId);
127
+ const currentSequence = this.getCurrentSequence(sessionId);
48
128
  if (!buffer) {
49
- return [];
129
+ return lastSequence === undefined || lastSequence === currentSequence
130
+ ? { status: 'covered', frames: [], currentSequence }
131
+ : { status: 'gap', currentSequence };
50
132
  }
51
133
  if (lastSequence === undefined) {
52
- return [...buffer.frames];
134
+ return { status: 'covered', frames: [...buffer.frames], currentSequence };
135
+ }
136
+ const firstFrame = buffer.frames[0];
137
+ const earliestAvailableSequence = firstFrame
138
+ ? firstFrame.payload.sequence
139
+ : undefined;
140
+ const hasMissingPrefix = earliestAvailableSequence !== undefined && lastSequence < earliestAvailableSequence - 1;
141
+ const predatesUnretainedOutput = buffer.frames.length === 0 && lastSequence < currentSequence;
142
+ const isAheadOfStream = lastSequence > currentSequence;
143
+ const discontinuitySequence = this.discontinuitySequences.get(sessionId);
144
+ const predatesDiscontinuity = discontinuitySequence !== undefined && lastSequence < discontinuitySequence;
145
+ if (hasMissingPrefix || predatesUnretainedOutput || isAheadOfStream || predatesDiscontinuity) {
146
+ return {
147
+ status: 'gap',
148
+ currentSequence,
149
+ ...(earliestAvailableSequence !== undefined && { earliestAvailableSequence }),
150
+ ...(predatesDiscontinuity && { discontinuitySequence }),
151
+ };
53
152
  }
54
- return buffer.frames.filter((frame) => {
55
- const payload = frame.payload;
56
- return payload.sequence !== undefined && payload.sequence > lastSequence;
57
- });
153
+ return {
154
+ status: 'covered',
155
+ currentSequence,
156
+ frames: buffer.frames.filter((frame) => {
157
+ const payload = frame.payload;
158
+ return payload.sequence !== undefined && payload.sequence > lastSequence;
159
+ }),
160
+ };
58
161
  }
59
162
  clearBuffer(sessionId) {
60
163
  this.frameBuffers.delete(sessionId);
61
- this.sequenceCounters.delete(sessionId);
164
+ this.discontinuitySequences.delete(sessionId);
165
+ this.retentionPaused.delete(sessionId);
62
166
  logger.info({ sessionId }, 'Cleared frame buffer');
63
167
  }
168
+ setClearExpiryHandler(handler) {
169
+ this.clearExpiryHandler = handler;
170
+ }
171
+ scheduleClear(sessionId, delayMs) {
172
+ this.cancelScheduledClear(sessionId);
173
+ const timer = setTimeout(() => {
174
+ this.scheduledClears.delete(sessionId);
175
+ this.clearBuffer(sessionId);
176
+ this.clearExpiryHandler?.(sessionId);
177
+ }, delayMs);
178
+ timer.unref();
179
+ this.scheduledClears.set(sessionId, { timer, delayMs });
180
+ }
181
+ cancelScheduledClear(sessionId) {
182
+ const pending = this.scheduledClears.get(sessionId);
183
+ if (!pending)
184
+ return null;
185
+ clearTimeout(pending.timer);
186
+ this.scheduledClears.delete(sessionId);
187
+ return pending.delayMs;
188
+ }
189
+ hasScheduledClear(sessionId) {
190
+ return this.scheduledClears.has(sessionId);
191
+ }
64
192
  getCurrentSequence(sessionId) {
65
- return this.sequenceCounters.get(sessionId) || 0;
193
+ return this.frameBuffers.get(sessionId)?.currentSequence ?? 0;
194
+ }
195
+ getSequenceEpoch(sessionId) {
196
+ return this.frameBuffers.get(sessionId)?.sequenceEpoch;
197
+ }
198
+ sampleCursor(sessionId) {
199
+ const buffer = this.ensureBuffer(sessionId);
200
+ return { sequenceEpoch: buffer.sequenceEpoch, currentSequence: buffer.currentSequence };
201
+ }
202
+ nextRecoveryCounter(sessionId) {
203
+ const buffer = this.ensureBuffer(sessionId);
204
+ buffer.recoveryCounter += 1;
205
+ return buffer.recoveryCounter;
206
+ }
207
+ getReconnectReplay(sessionId, cursor) {
208
+ const buffer = this.ensureBuffer(sessionId);
209
+ if (cursor.sequenceEpoch !== buffer.sequenceEpoch) {
210
+ return {
211
+ status: 'gap',
212
+ currentSequence: buffer.currentSequence,
213
+ sequenceEpoch: buffer.sequenceEpoch,
214
+ domainMismatch: true,
215
+ };
216
+ }
217
+ return {
218
+ ...this.getFramesSince(sessionId, cursor.sequence),
219
+ sequenceEpoch: buffer.sequenceEpoch,
220
+ };
66
221
  }
67
- getNextSequence(sessionId) {
68
- const current = this.sequenceCounters.get(sessionId) || 0;
69
- const next = current + 1;
70
- this.sequenceCounters.set(sessionId, next);
71
- return next;
222
+ nextSequence(buffer) {
223
+ buffer.currentSequence += 1;
224
+ return buffer.currentSequence;
72
225
  }
73
226
  getBufferStats(sessionId) {
74
227
  const buffer = this.frameBuffers.get(sessionId);
@@ -77,12 +230,14 @@ let TerminalStreamService = class TerminalStreamService {
77
230
  }
78
231
  return {
79
232
  size: buffer.frames.length,
80
- sequence: this.getCurrentSequence(sessionId),
233
+ bytes: buffer.bytes,
234
+ sequence: buffer.currentSequence,
81
235
  };
82
236
  }
83
237
  };
84
238
  exports.TerminalStreamService = TerminalStreamService;
85
239
  exports.TerminalStreamService = TerminalStreamService = __decorate([
86
- (0, common_1.Injectable)()
240
+ (0, common_1.Injectable)(),
241
+ __metadata("design:paramtypes", [metrics_service_1.MetricsService])
87
242
  ], TerminalStreamService);
88
243
  //# sourceMappingURL=terminal-stream.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-stream.service.js","sourceRoot":"","sources":["../../../../src/modules/terminal/services/terminal-stream.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-stream.service.js","sourceRoot":"","sources":["../../../../src/modules/terminal/services/terminal-stream.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,6CAAyC;AACzC,2DAA8D;AAC9D,6DAA0F;AAC1F,4EAAwE;AACxE,yFAAmF;AAGnF,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,uBAAuB,CAAC,CAAC;AAkBxC,QAAA,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,QAAA,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAAC;AAyC5C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAehC,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAdnD,iBAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;QACnD,2BAAsB,GAAwB,IAAI,GAAG,EAAE,CAAC;QACxD,oBAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;QAChC,oBAAe,GAAG,GAAG,CAAC;QAOtB,oBAAe,GAAG,IAAI,GAAG,EAAsD,CAAC;IAInC,CAAC;IAE/D,YAAY;QACV,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,eAAe;QACb,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,mBAAmB;QACjB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACpC,cAAc,IAAI,IAAA,4CAAmB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;YAChC,WAAW;YACX,cAAc;YACd,iBAAiB,EAAE,IAAI,CAAC,eAAe;SACxC,CAAC;IACJ,CAAC;IAQD,gBAAgB,CAAC,SAAiB;QAChC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAEO,YAAY,CAAC,SAAiB;QACpC,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG;gBACP,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI,CAAC,eAAe;gBAC7B,aAAa,EAAE,IAAA,wBAAU,GAAE;gBAC3B,eAAe,EAAE,CAAC;gBAClB,eAAe,EAAE,CAAC;aACnB,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,QAAQ,CAAC,SAAiB,EAAE,IAAY;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAiB,EAAE,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAwB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAA,gCAAc,EAAC,YAAY,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,GAAG,+BAAuB,EAAE,CAAC;gBACvF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO;oBAAE,MAAM;gBACpB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAE,OAAO,CAAC,OAA+B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD,iBAAiB,CAAC,SAAiB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAEnF,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,gCAAwB;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,UAAU,GAAG,cAAc,GAAG,gCAAwB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,KAAK,GAAG,EAAE,CAAC;gBACX,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,IAAI,SAAS,CAAC;YACnB,UAAU,IAAI,cAAc,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,cAAc,CAAC,SAAiB,EAAE,YAAqB;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,eAAe;gBACnE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE;gBACpD,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QACzC,CAAC;QAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,yBAAyB,GAAG,UAAU;YAC1C,CAAC,CAAE,UAAU,CAAC,OAA+B,CAAC,QAAQ;YACtD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,gBAAgB,GACpB,yBAAyB,KAAK,SAAS,IAAI,YAAY,GAAG,yBAAyB,GAAG,CAAC,CAAC;QAC1F,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,GAAG,eAAe,CAAC;QAC9F,MAAM,eAAe,GAAG,YAAY,GAAG,eAAe,CAAC;QACvD,MAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,qBAAqB,GACzB,qBAAqB,KAAK,SAAS,IAAI,YAAY,GAAG,qBAAqB,CAAC;QAE9E,IAAI,gBAAgB,IAAI,wBAAwB,IAAI,eAAe,IAAI,qBAAqB,EAAE,CAAC;YAC7F,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,eAAe;gBACf,GAAG,CAAC,yBAAyB,KAAK,SAAS,IAAI,EAAE,yBAAyB,EAAE,CAAC;gBAC7E,GAAG,CAAC,qBAAqB,IAAI,EAAE,qBAAqB,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,eAAe;YACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAA8B,CAAC;gBACrD,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC3E,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAOD,WAAW,CAAC,SAAiB;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACrD,CAAC;IAQD,qBAAqB,CAAC,OAAoC;QACxD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACpC,CAAC;IASD,aAAa,CAAC,SAAiB,EAAE,OAAe;QAC9C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAOD,oBAAoB,CAAC,SAAiB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAGD,iBAAiB,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAKD,kBAAkB,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,eAAe,IAAI,CAAC,CAAC;IAChE,CAAC;IAKD,gBAAgB,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACzD,CAAC;IAQD,YAAY,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;IAC1F,CAAC;IAOD,mBAAmB,CAAC,SAAiB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,eAAe,CAAC;IAChC,CAAC;IAQD,kBAAkB,CAAC,SAAiB,EAAE,MAAuB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YAClD,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC;YAClD,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,MAAmB;QACtC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,eAAe,CAAC;IAChC,CAAC;IAKD,cAAc,CAAC,SAAiB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,eAAe;SACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAzTY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAgBkC,gCAAc;GAfhD,qBAAqB,CAyTjC"}
@@ -21,6 +21,9 @@ const terminal_registry_rehydrator_service_1 = require("./services/terminal-regi
21
21
  const terminal_activity_service_1 = require("./services/terminal-activity.service");
22
22
  const realtime_broadcast_module_1 = require("../realtime/realtime-broadcast.module");
23
23
  const terminal_delivery_module_1 = require("./terminal-delivery.module");
24
+ const metrics_module_1 = require("../metrics/metrics.module");
25
+ const terminal_socket_drain_adapter_1 = require("./services/terminal-socket-drain.adapter");
26
+ const terminal_send_scheduler_service_1 = require("./services/terminal-send-scheduler.service");
24
27
  let TerminalModule = class TerminalModule {
25
28
  };
26
29
  exports.TerminalModule = TerminalModule;
@@ -32,12 +35,15 @@ exports.TerminalModule = TerminalModule = __decorate([
32
35
  settings_module_1.SettingsModule,
33
36
  (0, common_1.forwardRef)(() => sessions_module_1.SessionsModule),
34
37
  realtime_broadcast_module_1.RealtimeBroadcastModule,
38
+ metrics_module_1.MetricsModule,
35
39
  ],
36
40
  providers: [
37
41
  terminal_stream_service_1.TerminalStreamService,
38
42
  pty_service_1.PtyService,
39
43
  terminal_gateway_1.TerminalGateway,
40
44
  terminal_seed_service_1.TerminalSeedService,
45
+ terminal_socket_drain_adapter_1.TerminalSocketDrainAdapter,
46
+ terminal_send_scheduler_service_1.TerminalSendSchedulerService,
41
47
  {
42
48
  provide: terminal_session_registry_1.TerminalSessionRegistry,
43
49
  useFactory: (settingsService) => new terminal_session_registry_1.TerminalSessionRegistry(() => {
@@ -55,6 +61,7 @@ exports.TerminalModule = TerminalModule = __decorate([
55
61
  pty_service_1.PtyService,
56
62
  terminal_gateway_1.TerminalGateway,
57
63
  terminal_seed_service_1.TerminalSeedService,
64
+ terminal_send_scheduler_service_1.TerminalSendSchedulerService,
58
65
  terminal_delivery_module_1.TerminalDeliveryModule,
59
66
  terminal_session_registry_1.TerminalSessionRegistry,
60
67
  terminal_activity_service_1.TerminalActivityService,
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.module.js","sourceRoot":"","sources":["../../../src/modules/terminal/terminal.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,gFAA2E;AAC3E,wDAAoD;AACpD,kEAA8D;AAC9D,qEAAgE;AAChE,iEAA6D;AAC7D,iEAA6D;AAC7D,4EAAuE;AACvE,qGAAgG;AAChG,4EAAwE;AACxE,0GAA6F;AAC7F,oFAA+E;AAC/E,qFAAgF;AAChF,yEAAoE;AAsC7D,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IApC1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,iDAAsB;YACtB,qCAAgB;YAChB,gCAAc;YACd,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;YAChC,mDAAuB;SACxB;QACD,SAAS,EAAE;YACT,+CAAqB;YACrB,wBAAU;YACV,kCAAe;YACf,2CAAmB;YACnB;gBACE,OAAO,EAAE,mDAAuB;gBAChC,UAAU,EAAE,CAAC,eAAgC,EAAE,EAAE,CAC/C,IAAI,mDAAuB,CAAC,GAAG,EAAE;oBAC/B,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;oBACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,CAAC,CAAC;gBACJ,MAAM,EAAE,CAAC,kCAAe,CAAC;aAC1B;YACD,iEAA0B;YAC1B,mDAAuB;SACxB;QACD,OAAO,EAAE;YACP,+CAAqB;YACrB,wBAAU;YACV,kCAAe;YACf,2CAAmB;YACnB,iDAAsB;YACtB,mDAAuB;YACvB,mDAAuB;SACxB;KACF,CAAC;GACW,cAAc,CAAG"}
1
+ {"version":3,"file":"terminal.module.js","sourceRoot":"","sources":["../../../src/modules/terminal/terminal.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,gFAA2E;AAC3E,wDAAoD;AACpD,kEAA8D;AAC9D,qEAAgE;AAChE,iEAA6D;AAC7D,iEAA6D;AAC7D,4EAAuE;AACvE,qGAAgG;AAChG,4EAAwE;AACxE,0GAA6F;AAC7F,oFAA+E;AAC/E,qFAAgF;AAChF,yEAAoE;AACpE,8DAA0D;AAC1D,4FAAsF;AACtF,gGAA0F;AA0CnF,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAxC1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,iDAAsB;YACtB,qCAAgB;YAChB,gCAAc;YACd,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;YAChC,mDAAuB;YACvB,8BAAa;SACd;QACD,SAAS,EAAE;YACT,+CAAqB;YACrB,wBAAU;YACV,kCAAe;YACf,2CAAmB;YACnB,0DAA0B;YAC1B,8DAA4B;YAC5B;gBACE,OAAO,EAAE,mDAAuB;gBAChC,UAAU,EAAE,CAAC,eAAgC,EAAE,EAAE,CAC/C,IAAI,mDAAuB,CAAC,GAAG,EAAE;oBAC/B,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;oBACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,CAAC,CAAC;gBACJ,MAAM,EAAE,CAAC,kCAAe,CAAC;aAC1B;YACD,iEAA0B;YAC1B,mDAAuB;SACxB;QACD,OAAO,EAAE;YACP,+CAAqB;YACrB,wBAAU;YACV,kCAAe;YACf,2CAAmB;YACnB,8DAA4B;YAC5B,iDAAsB;YACtB,mDAAuB;YACvB,mDAAuB;SACxB;KACF,CAAC;GACW,cAAc,CAAG"}