@caoruhua/open-claude-remote 0.1.7 → 0.2.3

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 (132) hide show
  1. package/README.md +514 -11
  2. package/dist/backend/src/api/config-routes.d.ts +2 -2
  3. package/dist/backend/src/api/config-routes.d.ts.map +1 -1
  4. package/dist/backend/src/api/config-routes.js +21 -6
  5. package/dist/backend/src/api/config-routes.js.map +1 -1
  6. package/dist/backend/src/api/health-routes.d.ts +4 -1
  7. package/dist/backend/src/api/health-routes.d.ts.map +1 -1
  8. package/dist/backend/src/api/health-routes.js +20 -2
  9. package/dist/backend/src/api/health-routes.js.map +1 -1
  10. package/dist/backend/src/api/hook-routes.d.ts +2 -2
  11. package/dist/backend/src/api/hook-routes.d.ts.map +1 -1
  12. package/dist/backend/src/api/hook-routes.js +10 -3
  13. package/dist/backend/src/api/hook-routes.js.map +1 -1
  14. package/dist/backend/src/api/instance-routes.d.ts +5 -3
  15. package/dist/backend/src/api/instance-routes.d.ts.map +1 -1
  16. package/dist/backend/src/api/instance-routes.js +48 -45
  17. package/dist/backend/src/api/instance-routes.js.map +1 -1
  18. package/dist/backend/src/api/router.d.ts +4 -12
  19. package/dist/backend/src/api/router.d.ts.map +1 -1
  20. package/dist/backend/src/api/router.js +28 -20
  21. package/dist/backend/src/api/router.js.map +1 -1
  22. package/dist/backend/src/api/status-routes.d.ts +2 -2
  23. package/dist/backend/src/api/status-routes.d.ts.map +1 -1
  24. package/dist/backend/src/api/status-routes.js +11 -6
  25. package/dist/backend/src/api/status-routes.js.map +1 -1
  26. package/dist/backend/src/attach.d.ts +1 -1
  27. package/dist/backend/src/attach.d.ts.map +1 -1
  28. package/dist/backend/src/attach.js +25 -71
  29. package/dist/backend/src/attach.js.map +1 -1
  30. package/dist/backend/src/cli-utils.d.ts +24 -1
  31. package/dist/backend/src/cli-utils.d.ts.map +1 -1
  32. package/dist/backend/src/cli-utils.js +73 -37
  33. package/dist/backend/src/cli-utils.js.map +1 -1
  34. package/dist/backend/src/cli.d.ts +22 -2
  35. package/dist/backend/src/cli.d.ts.map +1 -1
  36. package/dist/backend/src/cli.js +328 -23
  37. package/dist/backend/src/cli.js.map +1 -1
  38. package/dist/backend/src/config.d.ts +48 -15
  39. package/dist/backend/src/config.d.ts.map +1 -1
  40. package/dist/backend/src/config.js +124 -24
  41. package/dist/backend/src/config.js.map +1 -1
  42. package/dist/backend/src/daemon/daemon-client.d.ts +69 -0
  43. package/dist/backend/src/daemon/daemon-client.d.ts.map +1 -0
  44. package/dist/backend/src/daemon/daemon-client.js +209 -0
  45. package/dist/backend/src/daemon/daemon-client.js.map +1 -0
  46. package/dist/backend/src/daemon/daemon-entry.d.ts +8 -0
  47. package/dist/backend/src/daemon/daemon-entry.d.ts.map +1 -0
  48. package/dist/backend/src/daemon/daemon-entry.js +37 -0
  49. package/dist/backend/src/daemon/daemon-entry.js.map +1 -0
  50. package/dist/backend/src/daemon/daemon-launcher.d.ts +13 -0
  51. package/dist/backend/src/daemon/daemon-launcher.d.ts.map +1 -0
  52. package/dist/backend/src/daemon/daemon-launcher.js +62 -0
  53. package/dist/backend/src/daemon/daemon-launcher.js.map +1 -0
  54. package/dist/backend/src/index.d.ts.map +1 -1
  55. package/dist/backend/src/index.js +115 -251
  56. package/dist/backend/src/index.js.map +1 -1
  57. package/dist/backend/src/instance/index.d.ts +4 -0
  58. package/dist/backend/src/instance/index.d.ts.map +1 -0
  59. package/dist/backend/src/instance/index.js +3 -0
  60. package/dist/backend/src/instance/index.js.map +1 -0
  61. package/dist/backend/src/instance/instance-manager.d.ts +62 -0
  62. package/dist/backend/src/instance/instance-manager.d.ts.map +1 -0
  63. package/dist/backend/src/instance/instance-manager.js +194 -0
  64. package/dist/backend/src/instance/instance-manager.js.map +1 -0
  65. package/dist/backend/src/instance/instance-session.d.ts +87 -0
  66. package/dist/backend/src/instance/instance-session.d.ts.map +1 -0
  67. package/dist/backend/src/instance/instance-session.js +359 -0
  68. package/dist/backend/src/instance/instance-session.js.map +1 -0
  69. package/dist/backend/src/instance/types.d.ts +39 -0
  70. package/dist/backend/src/instance/types.d.ts.map +1 -0
  71. package/dist/backend/src/instance/types.js +2 -0
  72. package/dist/backend/src/instance/types.js.map +1 -0
  73. package/dist/backend/src/notification/notification-manager.js +1 -1
  74. package/dist/backend/src/notification/notification-manager.js.map +1 -1
  75. package/dist/backend/src/notification/notification-service-factory.js +1 -1
  76. package/dist/backend/src/notification/notification-service-factory.js.map +1 -1
  77. package/dist/backend/src/pty/virtual-pty.d.ts.map +1 -1
  78. package/dist/backend/src/pty/virtual-pty.js +6 -0
  79. package/dist/backend/src/pty/virtual-pty.js.map +1 -1
  80. package/dist/backend/src/registry/shared-token.d.ts +2 -2
  81. package/dist/backend/src/registry/shared-token.js +11 -11
  82. package/dist/backend/src/registry/shared-token.js.map +1 -1
  83. package/dist/backend/src/registry/stop-instances.d.ts +0 -25
  84. package/dist/backend/src/registry/stop-instances.d.ts.map +1 -1
  85. package/dist/backend/src/registry/stop-instances.js +6 -206
  86. package/dist/backend/src/registry/stop-instances.js.map +1 -1
  87. package/dist/backend/src/skills/index.d.ts +4 -0
  88. package/dist/backend/src/skills/index.d.ts.map +1 -0
  89. package/dist/backend/src/skills/index.js +4 -0
  90. package/dist/backend/src/skills/index.js.map +1 -0
  91. package/dist/backend/src/skills/skill-command-merger.d.ts +32 -0
  92. package/dist/backend/src/skills/skill-command-merger.d.ts.map +1 -0
  93. package/dist/backend/src/skills/skill-command-merger.js +78 -0
  94. package/dist/backend/src/skills/skill-command-merger.js.map +1 -0
  95. package/dist/backend/src/skills/skill-commands.d.ts +25 -0
  96. package/dist/backend/src/skills/skill-commands.d.ts.map +1 -0
  97. package/dist/backend/src/skills/skill-commands.js +56 -0
  98. package/dist/backend/src/skills/skill-commands.js.map +1 -0
  99. package/dist/backend/src/skills/skill-scanner.d.ts +36 -0
  100. package/dist/backend/src/skills/skill-scanner.d.ts.map +1 -0
  101. package/dist/backend/src/skills/skill-scanner.js +143 -0
  102. package/dist/backend/src/skills/skill-scanner.js.map +1 -0
  103. package/dist/backend/src/terminal/terminal-relay.d.ts +1 -0
  104. package/dist/backend/src/terminal/terminal-relay.d.ts.map +1 -1
  105. package/dist/backend/src/terminal/terminal-relay.js +6 -0
  106. package/dist/backend/src/terminal/terminal-relay.js.map +1 -1
  107. package/dist/backend/src/update.d.ts.map +1 -1
  108. package/dist/backend/src/update.js +46 -1
  109. package/dist/backend/src/update.js.map +1 -1
  110. package/dist/backend/src/utils/banner.d.ts +15 -0
  111. package/dist/backend/src/utils/banner.d.ts.map +1 -0
  112. package/dist/backend/src/utils/banner.js +95 -0
  113. package/dist/backend/src/utils/banner.js.map +1 -0
  114. package/dist/backend/src/ws/ws-server.d.ts +13 -54
  115. package/dist/backend/src/ws/ws-server.d.ts.map +1 -1
  116. package/dist/backend/src/ws/ws-server.js +57 -155
  117. package/dist/backend/src/ws/ws-server.js.map +1 -1
  118. package/dist/shared/constants.d.ts +2 -1
  119. package/dist/shared/constants.d.ts.map +1 -1
  120. package/dist/shared/constants.js +2 -1
  121. package/dist/shared/constants.js.map +1 -1
  122. package/dist/shared/defaults.d.ts.map +1 -1
  123. package/dist/shared/defaults.js +1 -5
  124. package/dist/shared/defaults.js.map +1 -1
  125. package/dist/shared/instance.d.ts +4 -9
  126. package/dist/shared/instance.d.ts.map +1 -1
  127. package/dist/shared/instance.js +0 -2
  128. package/dist/shared/instance.js.map +1 -1
  129. package/frontend-dist/assets/index-CM2xfmS8.js +152 -0
  130. package/frontend-dist/index.html +1 -1
  131. package/package.json +2 -2
  132. package/frontend-dist/assets/index-Cfhr3h3e.js +0 -152
@@ -0,0 +1,143 @@
1
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { resolve, join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { logger } from '../logger/logger.js';
5
+ /**
6
+ * 解析 Skill 文件的 YAML frontmatter
7
+ * @param content SKILL.md 文件内容
8
+ * @returns 解析出的 name 和 description,解析失败返回空对象
9
+ */
10
+ export function parseSkillFrontmatter(content) {
11
+ // 匹配 YAML frontmatter: ---\n...\n---
12
+ const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
13
+ if (!frontmatterMatch) {
14
+ return {};
15
+ }
16
+ const frontmatter = frontmatterMatch[1];
17
+ const result = {};
18
+ // 解析 name 字段
19
+ const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
20
+ if (nameMatch) {
21
+ result.name = nameMatch[1].trim();
22
+ }
23
+ // 解析 description 字段(支持多行 YAML 字符串)
24
+ const descMatch = frontmatter.match(/^description:\s*([>\|]?)\s*$/m);
25
+ if (descMatch) {
26
+ if (descMatch[1] === '>' || descMatch[1] === '|') {
27
+ // 多行字符串:取后续缩进行,直到遇到非缩进行
28
+ const lines = frontmatter.split('\n');
29
+ let inDesc = false;
30
+ const descLines = [];
31
+ for (const line of lines) {
32
+ if (inDesc) {
33
+ if (line.startsWith(' ') || line.startsWith('\t')) {
34
+ descLines.push(line.trim());
35
+ }
36
+ else if (line.trim() === '') {
37
+ // 空行结束多行字符串
38
+ break;
39
+ }
40
+ else {
41
+ break;
42
+ }
43
+ }
44
+ else if (line.startsWith('description:')) {
45
+ inDesc = true;
46
+ }
47
+ }
48
+ if (descLines.length > 0) {
49
+ result.description = descLines.join(' ').trim();
50
+ }
51
+ }
52
+ }
53
+ // 尝试单行 description
54
+ if (!result.description) {
55
+ const singleLineMatch = frontmatter.match(/^description:\s*(.+)$/m);
56
+ if (singleLineMatch) {
57
+ result.description = singleLineMatch[1].trim();
58
+ }
59
+ }
60
+ return result;
61
+ }
62
+ /**
63
+ * 扫描单个 Skill 目录
64
+ * @param dir Skill 目录路径
65
+ * @param source Skill 来源
66
+ * @returns Skill 信息数组
67
+ */
68
+ export function scanSkillDirectory(dir, source) {
69
+ const skills = [];
70
+ // 目录不存在则返回空数组
71
+ if (!existsSync(dir)) {
72
+ return skills;
73
+ }
74
+ try {
75
+ const entries = readdirSync(dir, { withFileTypes: true });
76
+ for (const entry of entries) {
77
+ // 只处理目录
78
+ if (!entry.isDirectory())
79
+ continue;
80
+ const skillDir = join(dir, entry.name);
81
+ const skillFilePath = join(skillDir, 'SKILL.md');
82
+ // SKILL.md 不存在则跳过
83
+ if (!existsSync(skillFilePath)) {
84
+ continue;
85
+ }
86
+ try {
87
+ const content = readFileSync(skillFilePath, 'utf-8');
88
+ const frontmatter = parseSkillFrontmatter(content);
89
+ // 缺少 name 字段则跳过
90
+ if (!frontmatter.name) {
91
+ logger.warn({ skillFilePath, source }, 'Skill missing name field in frontmatter, skipping');
92
+ continue;
93
+ }
94
+ skills.push({
95
+ name: frontmatter.name,
96
+ description: frontmatter.description,
97
+ path: skillFilePath,
98
+ source,
99
+ });
100
+ }
101
+ catch (err) {
102
+ logger.warn({ skillFilePath, source, err }, 'Failed to parse SKILL.md, skipping');
103
+ }
104
+ }
105
+ }
106
+ catch (err) {
107
+ logger.warn({ dir, source, err }, 'Failed to scan skill directory');
108
+ }
109
+ return skills;
110
+ }
111
+ /**
112
+ * 扫描全局和项目级 Skill 目录
113
+ * @param projectDir 项目工作目录
114
+ * @returns 合并后的 Skill 信息数组(项目级优先覆盖全局同名 Skill)
115
+ */
116
+ export function scanSkills(projectDir) {
117
+ const home = homedir();
118
+ // 全局 Skill 目录: ~/.claude/skills/
119
+ const globalSkillDir = resolve(home, '.claude', 'skills');
120
+ // 项目级 Skill 目录: <projectDir>/.claude/skills/
121
+ const projectSkillDir = resolve(projectDir, '.claude', 'skills');
122
+ // 扫描两个目录
123
+ const globalSkills = scanSkillDirectory(globalSkillDir, 'global');
124
+ const projectSkills = scanSkillDirectory(projectSkillDir, 'project');
125
+ // 合并:项目级优先覆盖全局同名 Skill
126
+ const skillMap = new Map();
127
+ // 先添加全局 Skills
128
+ for (const skill of globalSkills) {
129
+ skillMap.set(skill.name, skill);
130
+ }
131
+ // 再添加项目级 Skills(覆盖同名)
132
+ for (const skill of projectSkills) {
133
+ skillMap.set(skill.name, skill);
134
+ }
135
+ const result = Array.from(skillMap.values());
136
+ logger.debug({
137
+ globalCount: globalSkills.length,
138
+ projectCount: projectSkills.length,
139
+ totalCount: result.length,
140
+ }, 'Skills scanned');
141
+ return result;
142
+ }
143
+ //# sourceMappingURL=skill-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-scanner.js","sourceRoot":"","sources":["../../../../backend/src/skills/skill-scanner.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export declare class TerminalRelay {
23
23
  resumeResize(): void;
24
24
  /**
25
25
  * Stop relaying and restore terminal state.
26
+ * Order: setRawMode(false) → resume() → pause() to ensure terminal state is fully restored.
26
27
  */
27
28
  stop(): void;
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-relay.d.ts","sourceRoot":"","sources":["../../../../backend/src/terminal/terminal-relay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAcnD,qBAAa,aAAa;IAOZ,OAAO,CAAC,UAAU;IAN9B,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAkB;gBAElB,UAAU,EAAE,WAAW;IAE3C;;OAEG;IACH,KAAK,IAAI,IAAI;IA8Cb;;;OAGG;IACH,WAAW,IAAI,IAAI;IAKnB;;;OAGG;IACH,YAAY,IAAI,IAAI;IAUpB;;OAEG;IACH,IAAI,IAAI,IAAI;CAiBb"}
1
+ {"version":3,"file":"terminal-relay.d.ts","sourceRoot":"","sources":["../../../../backend/src/terminal/terminal-relay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAcnD,qBAAa,aAAa;IAOZ,OAAO,CAAC,UAAU;IAN9B,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAkB;gBAElB,UAAU,EAAE,WAAW;IAE3C;;OAEG;IACH,KAAK,IAAI,IAAI;IA8Cb;;;OAGG;IACH,WAAW,IAAI,IAAI;IAKnB;;;OAGG;IACH,YAAY,IAAI,IAAI;IAUpB;;;OAGG;IACH,IAAI,IAAI,IAAI;CAsBb"}
@@ -86,6 +86,7 @@ export class TerminalRelay {
86
86
  }
87
87
  /**
88
88
  * Stop relaying and restore terminal state.
89
+ * Order: setRawMode(false) → resume() → pause() to ensure terminal state is fully restored.
89
90
  */
90
91
  stop() {
91
92
  if (this.stdinHandler) {
@@ -97,7 +98,12 @@ export class TerminalRelay {
97
98
  this.resizeHandler = null;
98
99
  }
99
100
  if (process.stdin.isTTY) {
101
+ // Restore terminal state in correct order:
102
+ // 1. Disable raw mode first (so terminal processes special chars again)
103
+ // 2. Resume to allow any pending data to flow
104
+ // 3. Pause to clean up the stream
100
105
  process.stdin.setRawMode(this.wasRaw);
106
+ process.stdin.resume();
101
107
  process.stdin.pause();
102
108
  }
103
109
  logger.info('Terminal relay stopped');
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-relay.js","sourceRoot":"","sources":["../../../../backend/src/terminal/terminal-relay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,GAAG,MAAM,CAAC;AACtB,qDAAqD;AACrD,qFAAqF;AACrF,6DAA6D;AAC7D,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAC7D,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,OAAO,aAAa;IAOJ;IANZ,YAAY,GAAoC,IAAI,CAAC;IACrD,aAAa,GAAwB,IAAI,CAAC;IAC1C,MAAM,GAAY,KAAK,CAAC;IACxB,aAAa,GAAW,CAAC,CAAC;IAC1B,YAAY,GAAY,KAAK,CAAC;IAEtC,YAAoB,UAAuB;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAE/C;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;QACd,IAAI,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3B,oEAAoE;YACpE,6EAA6E;YAC7E,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,GAAG,KAAK,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,EAAE,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;oBACvE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,+BAA+B;QAC/B,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,oDAAoD,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"terminal-relay.js","sourceRoot":"","sources":["../../../../backend/src/terminal/terminal-relay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,GAAG,MAAM,CAAC;AACtB,qDAAqD;AACrD,qFAAqF;AACrF,6DAA6D;AAC7D,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAC7D,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,OAAO,aAAa;IAOJ;IANZ,YAAY,GAAoC,IAAI,CAAC;IACrD,aAAa,GAAwB,IAAI,CAAC;IAC1C,MAAM,GAAY,KAAK,CAAC;IACxB,aAAa,GAAW,CAAC,CAAC;IAC1B,YAAY,GAAY,KAAK,CAAC;IAEtC,YAAoB,UAAuB;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAE/C;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;QACd,IAAI,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3B,oEAAoE;YACpE,6EAA6E;YAC7E,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,GAAG,KAAK,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,EAAE,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;oBACvE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,+BAA+B;QAC/B,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,oDAAoD,CAAC,CAAC;IACpF,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,2CAA2C;YAC3C,wEAAwE;YACxE,8CAA8C;YAC9C,kCAAkC;YAClC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../backend/src/update.ts"],"names":[],"mappings":"AAcA,2BAA2B;AAC3B,wBAAgB,oBAAoB,IAAI,KAAK,GAAG,MAAM,CAUrD;AAED,6BAA6B;AAC7B,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBpD;AAED,mDAAmD;AACnD,wBAAgB,iBAAiB,IAAI,MAAM,CAgB1C;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOvE;AAED,eAAe;AACf,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4EnD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../backend/src/update.ts"],"names":[],"mappings":"AAcA,2BAA2B;AAC3B,wBAAgB,oBAAoB,IAAI,KAAK,GAAG,MAAM,CAUrD;AAED,6BAA6B;AAC7B,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBpD;AAKD,mDAAmD;AACnD,wBAAgB,iBAAiB,IAAI,MAAM,CAmB1C;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOvE;AAED,eAAe;AACf,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgFnD"}
@@ -49,8 +49,12 @@ export function fetchLatestVersion() {
49
49
  });
50
50
  });
51
51
  }
52
+ /** 进程级版本缓存 — 版本在进程生命周期内不会变化 */
53
+ let cachedVersion = null;
52
54
  /** 从 import.meta.url 向上查找项目 package.json 获取当前版本 */
53
55
  export function getCurrentVersion() {
56
+ if (cachedVersion)
57
+ return cachedVersion;
54
58
  // 从当前文件向上逐级查找 package.json
55
59
  let dir = dirname(fileURLToPath(import.meta.url));
56
60
  for (let i = 0; i < 10; i++) {
@@ -58,6 +62,7 @@ export function getCurrentVersion() {
58
62
  if (existsSync(pkgPath)) {
59
63
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
60
64
  if (pkg.name === PKG_NAME && pkg.version) {
65
+ cachedVersion = pkg.version;
61
66
  return pkg.version;
62
67
  }
63
68
  }
@@ -130,7 +135,10 @@ export async function updatePackage() {
130
135
  if (code === 0) {
131
136
  process.stdout.write(`\nSuccessfully updated to ${latestVersion}!\n`);
132
137
  logger.info({ latestVersion }, 'Package updated successfully');
133
- promiseResolve();
138
+ // 检查 daemon 是否需要重启
139
+ handlePostUpdateRestart().then(() => {
140
+ promiseResolve();
141
+ });
134
142
  }
135
143
  else {
136
144
  const manualCmd = `${pm} ${args.join(' ')}`;
@@ -150,4 +158,41 @@ export async function updatePackage() {
150
158
  });
151
159
  });
152
160
  }
161
+ /**
162
+ * 更新完成后检查并重启 daemon
163
+ */
164
+ async function handlePostUpdateRestart() {
165
+ try {
166
+ const { checkDaemonVersion, smartRestartDaemon, listInstances, isDaemonRunning } = await import('./daemon/daemon-client.js');
167
+ // 检查 daemon 是否运行
168
+ if (!(await isDaemonRunning())) {
169
+ return; // daemon 未运行,无需重启
170
+ }
171
+ // 检查版本
172
+ const versionCheck = await checkDaemonVersion();
173
+ if (!versionCheck.needsRestart) {
174
+ return; // 版本匹配,无需重启
175
+ }
176
+ // 版本不匹配,尝试重启
177
+ const instances = await listInstances().catch(() => []);
178
+ if (instances.length === 0) {
179
+ process.stdout.write('\nRestarting daemon with new version...\n');
180
+ const result = await smartRestartDaemon();
181
+ if (result.restarted) {
182
+ process.stdout.write('✅ Daemon restarted.\n');
183
+ }
184
+ else {
185
+ process.stdout.write('⚠️ Failed to restart daemon. Run manually: claude-remote stop && claude-remote\n');
186
+ }
187
+ }
188
+ else {
189
+ process.stdout.write('\n⚠️ Daemon is still running old version.\n');
190
+ process.stdout.write(' Restart manually: claude-remote stop && claude-remote\n');
191
+ }
192
+ }
193
+ catch (err) {
194
+ // 不影响更新流程,静默失败
195
+ logger.debug({ err }, 'Post-update daemon restart check failed');
196
+ }
197
+ }
153
198
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../backend/src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../backend/src/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface BannerOptions {
2
+ url: string;
3
+ token: string;
4
+ instanceName: string;
5
+ logDir: string;
6
+ pid: number;
7
+ instanceId?: string;
8
+ warnings?: string[];
9
+ showExitHint?: boolean;
10
+ }
11
+ /**
12
+ * 将 banner 打印到 stderr(CLI 使用)
13
+ */
14
+ export declare function printBanner(options: BannerOptions): void;
15
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../../backend/src/utils/banner.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CA0FxD"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Banner 打印模块
3
+ *
4
+ * 从 index.ts 提取出来,供 CLI 和 daemon 共用。
5
+ */
6
+ import { generateQRCodeLines } from './qrcode-banner.js';
7
+ import { getCurrentVersion } from '../update.js';
8
+ /**
9
+ * 将 banner 打印到 stderr(CLI 使用)
10
+ */
11
+ export function printBanner(options) {
12
+ const { url, token, instanceName, logDir, pid, instanceId, warnings = [], showExitHint = true } = options;
13
+ const qrUrl = `${url}?token=${token}`;
14
+ const qrLines = generateQRCodeLines(qrUrl);
15
+ let version = '';
16
+ try {
17
+ version = getCurrentVersion();
18
+ }
19
+ catch { /* ignore */ }
20
+ // Format instance line with optional ID
21
+ const shortId = instanceId ? instanceId.substring(0, 8) : null;
22
+ const instanceLine = shortId
23
+ ? `Instance: ${instanceName} (${shortId})`
24
+ : `Instance: ${instanceName}`;
25
+ const leftLines = [];
26
+ leftLines.push(instanceLine);
27
+ leftLines.push(`URL: ${url}`);
28
+ leftLines.push(`PID: ${pid}`);
29
+ leftLines.push(`Logs: ${logDir}`);
30
+ leftLines.push('');
31
+ leftLines.push('Commands:');
32
+ leftLines.push(` attach: claude-remote attach ${instanceName}`);
33
+ leftLines.push(' list: claude-remote list');
34
+ leftLines.push(' status: claude-remote status');
35
+ leftLines.push(' stop: claude-remote stop');
36
+ leftLines.push(' update: claude-remote update');
37
+ const qrLabel = 'Scan QR to connect';
38
+ const rightLines = [...qrLines, ''];
39
+ const targetHeight = Math.max(leftLines.length, rightLines.length + 1);
40
+ while (rightLines.length < targetHeight - 1) {
41
+ rightLines.push('');
42
+ }
43
+ rightLines.push(qrLabel);
44
+ const qrWidth = Math.max(qrLines[0]?.length || 0, qrLabel.length);
45
+ const leftWidth = Math.max(...leftLines.map(l => l.length), 35);
46
+ const totalWidth = leftWidth + qrWidth + 6;
47
+ const topBorder = '╔' + '═'.repeat(totalWidth - 2) + '╗';
48
+ const title = version ? `Claude Code Remote v${version}` : 'Claude Code Remote';
49
+ const titleLine = '║' + title.padStart(Math.floor((totalWidth - 2 + title.length) / 2)).padEnd(totalWidth - 2) + '║';
50
+ const sepLine = '╠' + '═'.repeat(leftWidth + 1) + '╤' + '═'.repeat(qrWidth + 2) + '╣';
51
+ const midSep = '╠' + '═'.repeat(leftWidth + 1) + '╧' + '═'.repeat(qrWidth + 2) + '╣';
52
+ const tokenLine = '║ ' + `Token: ${token}`.padEnd(totalWidth - 4) + ' ║';
53
+ const bottomBorder = '╚' + '═'.repeat(totalWidth - 2) + '╝';
54
+ process.stderr.write('\n');
55
+ process.stderr.write(topBorder + '\n');
56
+ process.stderr.write(titleLine + '\n');
57
+ process.stderr.write(sepLine + '\n');
58
+ const maxLines = Math.max(leftLines.length, rightLines.length);
59
+ for (let i = 0; i < maxLines; i++) {
60
+ const left = (leftLines[i] || '').padEnd(leftWidth);
61
+ let right;
62
+ if (i < qrLines.length && rightLines[i]) {
63
+ right = ` ${rightLines[i]} `.padEnd(qrWidth + 2);
64
+ }
65
+ else if (rightLines[i]) {
66
+ const centered = rightLines[i].padStart(Math.floor((qrWidth + rightLines[i].length) / 2)).padEnd(qrWidth);
67
+ right = ` ${centered} `;
68
+ }
69
+ else {
70
+ right = ' '.repeat(qrWidth + 2);
71
+ }
72
+ process.stderr.write(`║ ${left}│${right}║\n`);
73
+ }
74
+ process.stderr.write(midSep + '\n');
75
+ process.stderr.write(tokenLine + '\n');
76
+ // Warning section
77
+ if (warnings.length > 0) {
78
+ const warningSep = '╠' + '═'.repeat(totalWidth - 2) + '╣';
79
+ process.stderr.write(warningSep + '\n');
80
+ for (const warning of warnings) {
81
+ const warningLine = '║ ' + `⚠️ ${warning}`.padEnd(totalWidth - 4) + ' ║';
82
+ process.stderr.write(warningLine + '\n');
83
+ }
84
+ }
85
+ // Exit hint
86
+ if (showExitHint) {
87
+ const exitSep = '╠' + '═'.repeat(totalWidth - 2) + '╣';
88
+ process.stderr.write(exitSep + '\n');
89
+ const exitLine = '║ ' + '💡 Press Ctrl+C twice to exit'.padEnd(totalWidth - 4) + ' ║';
90
+ process.stderr.write(exitLine + '\n');
91
+ }
92
+ process.stderr.write(bottomBorder + '\n');
93
+ process.stderr.write('\n');
94
+ }
95
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../../backend/src/utils/banner.ts"],"names":[],"mappings":"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"}
@@ -1,75 +1,34 @@
1
1
  import { Server as HttpServer } from 'node:http';
2
- import { WebSocket } from 'ws';
3
- import type { ServerMessage } from '../../../shared/index.js';
4
2
  import { AuthModule } from '../auth/auth-middleware.js';
5
- /** 客户端类型:attach(从控端)或 webapp(主控端) */
6
- export type ClientType = 'attach' | 'webapp';
3
+ import type { InstanceManager } from '../instance/instance-manager.js';
7
4
  /**
8
- * WebSocket server with session-based auth and heartbeat.
9
- * 支持双重认证:
10
- * 1. Cookie Session 认证(现有)
11
- * 2. URL 参数 ?token=xxx 认证(用于 attach 命令)
5
+ * WebSocket server with instance-based routing.
6
+ * URL pattern: /ws/:instanceId
7
+ * Authentication: Cookie Session or ?token=xxx
8
+ *
9
+ * Each WS connection is routed to the corresponding InstanceSession,
10
+ * which manages its own client set and message handling.
12
11
  */
13
12
  export declare class WsServer {
14
13
  private httpServer;
15
14
  private authModule;
16
15
  private wss;
17
- private clients;
18
16
  private heartbeatInterval;
19
- private messageHandler;
20
- private connectHandler;
21
- private disconnectHandler;
22
- private upgradeClientTypes;
17
+ private instanceManager;
23
18
  constructor(httpServer: HttpServer, authModule: AuthModule);
24
19
  /**
25
- * Set a handler for incoming messages from clients.
20
+ * Inject InstanceManager for routing WS connections.
26
21
  */
27
- onMessage(handler: (ws: WebSocket, data: string, clientType: ClientType) => void): void;
22
+ setInstanceManager(manager: InstanceManager): void;
28
23
  /**
29
- * Set a handler for new client connections.
30
- */
31
- onConnect(handler: (ws: WebSocket, clientType: ClientType) => void): void;
32
- /**
33
- * Set a handler for client disconnections (after client is removed from set).
34
- */
35
- onDisconnect(handler: (clientCounts: {
36
- attach: number;
37
- webapp: number;
38
- }) => void): void;
39
- /**
40
- * HTTP upgrade → authenticate via cookie or token, then establish WS.
41
- * 支持两种认证方式:
42
- * 1. Cookie Session 认证(现有流程)
43
- * 2. URL 参数 ?token=xxx 认证(用于 attach 命令)
24
+ * HTTP upgrade authenticate route to InstanceSession.
25
+ * URL: /ws/:instanceId
44
26
  */
45
27
  private setupUpgrade;
46
28
  /**
47
- * Handle new WebSocket connections.
48
- */
49
- private setupConnection;
50
- /**
51
- * Broadcast a message to all connected clients.
52
- */
53
- broadcast(message: ServerMessage): void;
54
- /**
55
- * Send a message to a specific client.
56
- */
57
- sendTo(ws: WebSocket, message: ServerMessage): void;
58
- /**
59
- * Start heartbeat pings.
29
+ * Start heartbeat pings for all instances.
60
30
  */
61
31
  private startHeartbeat;
62
- /**
63
- * Get connected client count.
64
- */
65
- get clientCount(): number;
66
- /**
67
- * Get client counts by type.
68
- */
69
- getClientCounts(): {
70
- attach: number;
71
- webapp: number;
72
- };
73
32
  /**
74
33
  * Shutdown the WebSocket server.
75
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ws-server.d.ts","sourceRoot":"","sources":["../../../../backend/src/ws/ws-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,WAAW,CAAC;AAClE,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAQ7C;;;;;GAKG;AACH,qBAAa,QAAQ;IAUjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAVpB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,cAAc,CAAgF;IACtG,OAAO,CAAC,cAAc,CAAkE;IACxF,OAAO,CAAC,iBAAiB,CAA6E;IACtG,OAAO,CAAC,kBAAkB,CAA8C;gBAG9D,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU;IAQhC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAIvF;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAIzE;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAIvF;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA2DpB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASvC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAMnD;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,eAAe,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAarD;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB"}
1
+ {"version":3,"file":"ws-server.d.ts","sourceRoot":"","sources":["../../../../backend/src/ws/ws-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,WAAW,CAAC;AAIlE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIvE;;;;;;;GAOG;AACH,qBAAa,QAAQ;IAMjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,eAAe,CAAgC;gBAG7C,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU;IAOhC;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAIlD;;;OAGG;IACH,OAAO,CAAC,YAAY;IAyEpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}