@octo-cyber/sea-king 0.5.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.
Files changed (172) hide show
  1. package/dist/controllers/character.controller.d.ts +10 -0
  2. package/dist/controllers/character.controller.d.ts.map +1 -0
  3. package/dist/controllers/character.controller.js +58 -0
  4. package/dist/controllers/character.controller.js.map +1 -0
  5. package/dist/controllers/chat.controller.d.ts +13 -0
  6. package/dist/controllers/chat.controller.d.ts.map +1 -0
  7. package/dist/controllers/chat.controller.js +113 -0
  8. package/dist/controllers/chat.controller.js.map +1 -0
  9. package/dist/controllers/crisis.controller.d.ts +10 -0
  10. package/dist/controllers/crisis.controller.d.ts.map +1 -0
  11. package/dist/controllers/crisis.controller.js +69 -0
  12. package/dist/controllers/crisis.controller.js.map +1 -0
  13. package/dist/controllers/index.d.ts +10 -0
  14. package/dist/controllers/index.d.ts.map +1 -0
  15. package/dist/controllers/index.js +24 -0
  16. package/dist/controllers/index.js.map +1 -0
  17. package/dist/controllers/leaderboard.controller.d.ts +9 -0
  18. package/dist/controllers/leaderboard.controller.d.ts.map +1 -0
  19. package/dist/controllers/leaderboard.controller.js +51 -0
  20. package/dist/controllers/leaderboard.controller.js.map +1 -0
  21. package/dist/controllers/live-chat.controller.d.ts +14 -0
  22. package/dist/controllers/live-chat.controller.d.ts.map +1 -0
  23. package/dist/controllers/live-chat.controller.js +95 -0
  24. package/dist/controllers/live-chat.controller.js.map +1 -0
  25. package/dist/controllers/matchmaking.controller.d.ts +22 -0
  26. package/dist/controllers/matchmaking.controller.d.ts.map +1 -0
  27. package/dist/controllers/matchmaking.controller.js +157 -0
  28. package/dist/controllers/matchmaking.controller.js.map +1 -0
  29. package/dist/controllers/phrase.controller.d.ts +11 -0
  30. package/dist/controllers/phrase.controller.d.ts.map +1 -0
  31. package/dist/controllers/phrase.controller.js +78 -0
  32. package/dist/controllers/phrase.controller.js.map +1 -0
  33. package/dist/controllers/profile.controller.d.ts +9 -0
  34. package/dist/controllers/profile.controller.d.ts.map +1 -0
  35. package/dist/controllers/profile.controller.js +44 -0
  36. package/dist/controllers/profile.controller.js.map +1 -0
  37. package/dist/controllers/turing.controller.d.ts +18 -0
  38. package/dist/controllers/turing.controller.d.ts.map +1 -0
  39. package/dist/controllers/turing.controller.js +103 -0
  40. package/dist/controllers/turing.controller.js.map +1 -0
  41. package/dist/entities/chat-character.entity.d.ts +34 -0
  42. package/dist/entities/chat-character.entity.d.ts.map +1 -0
  43. package/dist/entities/chat-character.entity.js +101 -0
  44. package/dist/entities/chat-character.entity.js.map +1 -0
  45. package/dist/entities/chat-message.entity.d.ts +26 -0
  46. package/dist/entities/chat-message.entity.d.ts.map +1 -0
  47. package/dist/entities/chat-message.entity.js +84 -0
  48. package/dist/entities/chat-message.entity.js.map +1 -0
  49. package/dist/entities/chat-session.entity.d.ts +31 -0
  50. package/dist/entities/chat-session.entity.d.ts.map +1 -0
  51. package/dist/entities/chat-session.entity.js +95 -0
  52. package/dist/entities/chat-session.entity.js.map +1 -0
  53. package/dist/entities/chat-thread.entity.d.ts +30 -0
  54. package/dist/entities/chat-thread.entity.d.ts.map +1 -0
  55. package/dist/entities/chat-thread.entity.js +105 -0
  56. package/dist/entities/chat-thread.entity.js.map +1 -0
  57. package/dist/entities/crisis-event.entity.d.ts +30 -0
  58. package/dist/entities/crisis-event.entity.d.ts.map +1 -0
  59. package/dist/entities/crisis-event.entity.js +90 -0
  60. package/dist/entities/crisis-event.entity.js.map +1 -0
  61. package/dist/entities/index.d.ts +38 -0
  62. package/dist/entities/index.d.ts.map +1 -0
  63. package/dist/entities/index.js +62 -0
  64. package/dist/entities/index.js.map +1 -0
  65. package/dist/entities/leaderboard-entry.entity.d.ts +22 -0
  66. package/dist/entities/leaderboard-entry.entity.d.ts.map +1 -0
  67. package/dist/entities/leaderboard-entry.entity.js +75 -0
  68. package/dist/entities/leaderboard-entry.entity.js.map +1 -0
  69. package/dist/entities/live-message.entity.d.ts +34 -0
  70. package/dist/entities/live-message.entity.d.ts.map +1 -0
  71. package/dist/entities/live-message.entity.js +99 -0
  72. package/dist/entities/live-message.entity.js.map +1 -0
  73. package/dist/entities/live-thread.entity.d.ts +50 -0
  74. package/dist/entities/live-thread.entity.d.ts.map +1 -0
  75. package/dist/entities/live-thread.entity.js +144 -0
  76. package/dist/entities/live-thread.entity.js.map +1 -0
  77. package/dist/entities/match-room.entity.d.ts +44 -0
  78. package/dist/entities/match-room.entity.d.ts.map +1 -0
  79. package/dist/entities/match-room.entity.js +131 -0
  80. package/dist/entities/match-room.entity.js.map +1 -0
  81. package/dist/entities/phrase-template.entity.d.ts +28 -0
  82. package/dist/entities/phrase-template.entity.d.ts.map +1 -0
  83. package/dist/entities/phrase-template.entity.js +84 -0
  84. package/dist/entities/phrase-template.entity.js.map +1 -0
  85. package/dist/entities/player-profile.entity.d.ts +36 -0
  86. package/dist/entities/player-profile.entity.d.ts.map +1 -0
  87. package/dist/entities/player-profile.entity.js +112 -0
  88. package/dist/entities/player-profile.entity.js.map +1 -0
  89. package/dist/entities/player-queue.entity.d.ts +24 -0
  90. package/dist/entities/player-queue.entity.d.ts.map +1 -0
  91. package/dist/entities/player-queue.entity.js +76 -0
  92. package/dist/entities/player-queue.entity.js.map +1 -0
  93. package/dist/entities/turing-guess.entity.d.ts +29 -0
  94. package/dist/entities/turing-guess.entity.d.ts.map +1 -0
  95. package/dist/entities/turing-guess.entity.js +94 -0
  96. package/dist/entities/turing-guess.entity.js.map +1 -0
  97. package/dist/index.d.ts +14 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +70 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/schemas/sea-king.schema.d.ts +109 -0
  102. package/dist/schemas/sea-king.schema.d.ts.map +1 -0
  103. package/dist/schemas/sea-king.schema.js +103 -0
  104. package/dist/schemas/sea-king.schema.js.map +1 -0
  105. package/dist/sea-king.module.d.ts +19 -0
  106. package/dist/sea-king.module.d.ts.map +1 -0
  107. package/dist/sea-king.module.js +114 -0
  108. package/dist/sea-king.module.js.map +1 -0
  109. package/dist/services/character.service.d.ts +30 -0
  110. package/dist/services/character.service.d.ts.map +1 -0
  111. package/dist/services/character.service.js +75 -0
  112. package/dist/services/character.service.js.map +1 -0
  113. package/dist/services/chat.service.d.ts +49 -0
  114. package/dist/services/chat.service.d.ts.map +1 -0
  115. package/dist/services/chat.service.js +332 -0
  116. package/dist/services/chat.service.js.map +1 -0
  117. package/dist/services/crisis.service.d.ts +17 -0
  118. package/dist/services/crisis.service.d.ts.map +1 -0
  119. package/dist/services/crisis.service.js +177 -0
  120. package/dist/services/crisis.service.js.map +1 -0
  121. package/dist/services/index.d.ts +13 -0
  122. package/dist/services/index.d.ts.map +1 -0
  123. package/dist/services/index.js +28 -0
  124. package/dist/services/index.js.map +1 -0
  125. package/dist/services/leaderboard.service.d.ts +29 -0
  126. package/dist/services/leaderboard.service.d.ts.map +1 -0
  127. package/dist/services/leaderboard.service.js +64 -0
  128. package/dist/services/leaderboard.service.js.map +1 -0
  129. package/dist/services/live-chat.service.d.ts +71 -0
  130. package/dist/services/live-chat.service.d.ts.map +1 -0
  131. package/dist/services/live-chat.service.js +273 -0
  132. package/dist/services/live-chat.service.js.map +1 -0
  133. package/dist/services/matchmaking.service.d.ts +60 -0
  134. package/dist/services/matchmaking.service.d.ts.map +1 -0
  135. package/dist/services/matchmaking.service.js +208 -0
  136. package/dist/services/matchmaking.service.js.map +1 -0
  137. package/dist/services/phrase.service.d.ts +27 -0
  138. package/dist/services/phrase.service.d.ts.map +1 -0
  139. package/dist/services/phrase.service.js +70 -0
  140. package/dist/services/phrase.service.js.map +1 -0
  141. package/dist/services/profile.service.d.ts +41 -0
  142. package/dist/services/profile.service.d.ts.map +1 -0
  143. package/dist/services/profile.service.js +107 -0
  144. package/dist/services/profile.service.js.map +1 -0
  145. package/dist/services/seed.service.d.ts +19 -0
  146. package/dist/services/seed.service.d.ts.map +1 -0
  147. package/dist/services/seed.service.js +550 -0
  148. package/dist/services/seed.service.js.map +1 -0
  149. package/dist/services/turing.service.d.ts +74 -0
  150. package/dist/services/turing.service.d.ts.map +1 -0
  151. package/dist/services/turing.service.js +175 -0
  152. package/dist/services/turing.service.js.map +1 -0
  153. package/dist/services/ws-hub.service.d.ts +51 -0
  154. package/dist/services/ws-hub.service.d.ts.map +1 -0
  155. package/dist/services/ws-hub.service.js +174 -0
  156. package/dist/services/ws-hub.service.js.map +1 -0
  157. package/dist/types.d.ts +12 -0
  158. package/dist/types.d.ts.map +1 -0
  159. package/dist/types.js +8 -0
  160. package/dist/types.js.map +1 -0
  161. package/package.json +69 -0
  162. package/web/index.ts +30 -0
  163. package/web/manifest.ts +40 -0
  164. package/web/messages/en-US.json +113 -0
  165. package/web/messages/zh-CN.json +113 -0
  166. package/web/pages/AnalysisPage.tsx +198 -0
  167. package/web/pages/ChatPage.tsx +482 -0
  168. package/web/pages/DashboardPage.tsx +281 -0
  169. package/web/pages/LeaderboardPage.tsx +208 -0
  170. package/web/pages/PhrasesPage.tsx +221 -0
  171. package/web/services/sea-king-service.ts +151 -0
  172. package/web/types/sea-king.ts +249 -0
@@ -0,0 +1,157 @@
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.MatchmakingController = void 0;
13
+ const core_1 = require("@octo-cyber/core");
14
+ const zod_1 = require("zod");
15
+ const types_js_1 = require("../types.js");
16
+ const CreateRoomSchema = zod_1.z.object({
17
+ mode: zod_1.z.enum(['blind', 'turing', 'ranked']).default('blind'),
18
+ maxPlayers: zod_1.z.number().int().min(3).max(10).default(6),
19
+ password: zod_1.z.string().max(50).optional(),
20
+ roundTimeLimit: zod_1.z.number().int().min(30).max(300).optional(),
21
+ totalRounds: zod_1.z.number().int().min(3).max(30).optional(),
22
+ });
23
+ const JoinQueueSchema = zod_1.z.object({
24
+ displayName: zod_1.z.string().min(1).max(50),
25
+ preferredMode: zod_1.z.enum(['blind', 'turing', 'ranked']).default('blind'),
26
+ persona: zod_1.z.object({
27
+ name: zod_1.z.string().min(1).max(30),
28
+ avatar: zod_1.z.string().min(1).max(10),
29
+ personality: zod_1.z.string().min(1),
30
+ backstory: zod_1.z.string().min(1).max(500),
31
+ }),
32
+ });
33
+ const QuickMatchSchema = zod_1.z.object({
34
+ persona: zod_1.z.object({
35
+ name: zod_1.z.string().min(1).max(30),
36
+ avatar: zod_1.z.string().min(1).max(10),
37
+ personality: zod_1.z.string().min(1),
38
+ backstory: zod_1.z.string().min(1).max(500),
39
+ }),
40
+ });
41
+ let MatchmakingController = class MatchmakingController {
42
+ matchmakingService;
43
+ initializeController(matchmakingService) {
44
+ this.matchmakingService = matchmakingService;
45
+ }
46
+ /** 创建房间 */
47
+ async createRoom(req, res) {
48
+ const parsed = CreateRoomSchema.safeParse(req.body);
49
+ if (!parsed.success) {
50
+ res.status(400).json({ error: parsed.error.flatten() });
51
+ return;
52
+ }
53
+ const userId = (0, types_js_1.getUserId)(req);
54
+ const room = await this.matchmakingService.createRoom({
55
+ hostUserId: userId,
56
+ ...parsed.data,
57
+ });
58
+ res.json({ room });
59
+ }
60
+ /** 快速匹配 */
61
+ async quickMatch(req, res) {
62
+ const parsed = QuickMatchSchema.safeParse(req.body);
63
+ if (!parsed.success) {
64
+ res.status(400).json({ error: parsed.error.flatten() });
65
+ return;
66
+ }
67
+ const userId = (0, types_js_1.getUserId)(req);
68
+ const room = await this.matchmakingService.quickMatch(userId, parsed.data.persona);
69
+ res.json({ room });
70
+ }
71
+ /** 加入匹配队列 */
72
+ async joinQueue(req, res) {
73
+ const parsed = JoinQueueSchema.safeParse(req.body);
74
+ if (!parsed.success) {
75
+ res.status(400).json({ error: parsed.error.flatten() });
76
+ return;
77
+ }
78
+ const userId = (0, types_js_1.getUserId)(req);
79
+ const entry = await this.matchmakingService.joinQueue({
80
+ userId,
81
+ rank: 'bronze',
82
+ ...parsed.data,
83
+ });
84
+ res.json({ entry });
85
+ }
86
+ /** 列出可用房间 */
87
+ async listRooms(_req, res) {
88
+ const rooms = await this.matchmakingService.listAvailableRooms();
89
+ res.json({ rooms });
90
+ }
91
+ /** 获取房间详情 */
92
+ async getRoomDetail(req, res) {
93
+ const room = await this.matchmakingService.getRoomDetail(req.params['roomId']);
94
+ if (!room) {
95
+ res.status(404).json({ error: 'Room not found' });
96
+ return;
97
+ }
98
+ res.json({ room });
99
+ }
100
+ /** 开始房间对局 */
101
+ async startRoom(req, res) {
102
+ const room = await this.matchmakingService.startRoom(req.params['roomId']);
103
+ res.json({ room });
104
+ }
105
+ /** 获取队列状态 */
106
+ async getQueueCount(_req, res) {
107
+ const count = await this.matchmakingService.getQueueCount();
108
+ res.json({ count });
109
+ }
110
+ };
111
+ exports.MatchmakingController = MatchmakingController;
112
+ __decorate([
113
+ (0, core_1.Post)('/rooms'),
114
+ __metadata("design:type", Function),
115
+ __metadata("design:paramtypes", [Object, Object]),
116
+ __metadata("design:returntype", Promise)
117
+ ], MatchmakingController.prototype, "createRoom", null);
118
+ __decorate([
119
+ (0, core_1.Post)('/quick'),
120
+ __metadata("design:type", Function),
121
+ __metadata("design:paramtypes", [Object, Object]),
122
+ __metadata("design:returntype", Promise)
123
+ ], MatchmakingController.prototype, "quickMatch", null);
124
+ __decorate([
125
+ (0, core_1.Post)('/queue'),
126
+ __metadata("design:type", Function),
127
+ __metadata("design:paramtypes", [Object, Object]),
128
+ __metadata("design:returntype", Promise)
129
+ ], MatchmakingController.prototype, "joinQueue", null);
130
+ __decorate([
131
+ (0, core_1.Get)('/rooms'),
132
+ __metadata("design:type", Function),
133
+ __metadata("design:paramtypes", [Object, Object]),
134
+ __metadata("design:returntype", Promise)
135
+ ], MatchmakingController.prototype, "listRooms", null);
136
+ __decorate([
137
+ (0, core_1.Get)('/rooms/:roomId'),
138
+ __metadata("design:type", Function),
139
+ __metadata("design:paramtypes", [Object, Object]),
140
+ __metadata("design:returntype", Promise)
141
+ ], MatchmakingController.prototype, "getRoomDetail", null);
142
+ __decorate([
143
+ (0, core_1.Post)('/rooms/:roomId/start'),
144
+ __metadata("design:type", Function),
145
+ __metadata("design:paramtypes", [Object, Object]),
146
+ __metadata("design:returntype", Promise)
147
+ ], MatchmakingController.prototype, "startRoom", null);
148
+ __decorate([
149
+ (0, core_1.Get)('/queue/count'),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [Object, Object]),
152
+ __metadata("design:returntype", Promise)
153
+ ], MatchmakingController.prototype, "getQueueCount", null);
154
+ exports.MatchmakingController = MatchmakingController = __decorate([
155
+ (0, core_1.Controller)('/api/v1/sea-king/match')
156
+ ], MatchmakingController);
157
+ //# sourceMappingURL=matchmaking.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchmaking.controller.js","sourceRoot":"","sources":["../../src/controllers/matchmaking.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyD;AAGzD,6BAAwB;AACxB,0CAA0D;AAE1D,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5D,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC5D,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtC,aAAa,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACrE,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;KACtC,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;KACtC,CAAC;CACH,CAAC,CAAC;AAGI,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACxB,kBAAkB,CAAsB;IAEhD,oBAAoB,CAAC,kBAAsC;QACzD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,WAAW;IAEL,AAAN,KAAK,CAAC,UAAU,CAAC,GAAgB,EAAE,GAAa;QAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;YACpD,UAAU,EAAE,MAAM;YAClB,GAAG,MAAM,CAAC,IAAI;SACf,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,WAAW;IAEL,AAAN,KAAK,CAAC,UAAU,CAAC,GAAgB,EAAE,GAAa;QAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,aAAa;IAEP,AAAN,KAAK,CAAC,SAAS,CAAC,GAAgB,EAAE,GAAa;QAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACpD,MAAM;YACN,IAAI,EAAE,QAAQ;YACd,GAAG,MAAM,CAAC,IAAI;SACf,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,aAAa;IAEP,AAAN,KAAK,CAAC,SAAS,CAAC,IAAa,EAAE,GAAa;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,aAAa;IAEP,AAAN,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,GAAa;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,aAAa;IAEP,AAAN,KAAK,CAAC,SAAS,CAAC,GAAY,EAAE,GAAa;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC,CAAC;QACrF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,aAAa;IAEP,AAAN,KAAK,CAAC,aAAa,CAAC,IAAa,EAAE,GAAa;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtB,CAAC;CACF,CAAA;AA1FY,sDAAqB;AAS1B;IADL,IAAA,WAAI,EAAC,QAAQ,CAAC;;;;uDAed;AAIK;IADL,IAAA,WAAI,EAAC,QAAQ,CAAC;;;;uDAYd;AAIK;IADL,IAAA,WAAI,EAAC,QAAQ,CAAC;;;;sDAgBd;AAIK;IADL,IAAA,UAAG,EAAC,QAAQ,CAAC;;;;sDAIb;AAIK;IADL,IAAA,UAAG,EAAC,gBAAgB,CAAC;;;;0DAQrB;AAIK;IADL,IAAA,WAAI,EAAC,sBAAsB,CAAC;;;;sDAI5B;AAIK;IADL,IAAA,UAAG,EAAC,cAAc,CAAC;;;;0DAInB;gCAzFU,qBAAqB;IADjC,IAAA,iBAAU,EAAC,wBAAwB,CAAC;GACxB,qBAAqB,CA0FjC"}
@@ -0,0 +1,11 @@
1
+ import type { Request, Response } from 'express';
2
+ import { PhraseService } from '../services/phrase.service.js';
3
+ export declare class PhraseController {
4
+ private phraseService;
5
+ initialize(phraseService: PhraseService): void;
6
+ list(req: Request, res: Response): Promise<void>;
7
+ create(req: Request, res: Response): Promise<void>;
8
+ practice(req: Request, res: Response): Promise<void>;
9
+ stats(_req: Request, res: Response): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=phrase.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phrase.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/phrase.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,qBACa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAiB;IAEtC,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAKxC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzD"}
@@ -0,0 +1,78 @@
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.PhraseController = void 0;
13
+ const core_1 = require("@octo-cyber/core");
14
+ const sea_king_schema_js_1 = require("../schemas/sea-king.schema.js");
15
+ let PhraseController = class PhraseController {
16
+ phraseService;
17
+ initialize(phraseService) {
18
+ this.phraseService = phraseService;
19
+ }
20
+ async list(req, res) {
21
+ const parsed = sea_king_schema_js_1.PhraseQuerySchema.safeParse(req.query);
22
+ if (!parsed.success) {
23
+ res.status(400).json({ error: parsed.error.flatten() });
24
+ return;
25
+ }
26
+ const result = await this.phraseService.list(parsed.data);
27
+ res.json(result);
28
+ }
29
+ async create(req, res) {
30
+ const parsed = sea_king_schema_js_1.CreatePhraseSchema.safeParse(req.body);
31
+ if (!parsed.success) {
32
+ res.status(400).json({ error: parsed.error.flatten() });
33
+ return;
34
+ }
35
+ const phrase = await this.phraseService.create(parsed.data);
36
+ res.status(201).json(phrase);
37
+ }
38
+ async practice(req, res) {
39
+ const count = parseInt(req.query.count) || 5;
40
+ const scene = req.query.scene;
41
+ const difficulty = req.query.difficulty;
42
+ const phrases = await this.phraseService.getRandomPractice({ count, scene, difficulty });
43
+ res.json(phrases);
44
+ }
45
+ async stats(_req, res) {
46
+ const stats = await this.phraseService.getSceneStats();
47
+ res.json(stats);
48
+ }
49
+ };
50
+ exports.PhraseController = PhraseController;
51
+ __decorate([
52
+ (0, core_1.Get)(),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", [Object, Object]),
55
+ __metadata("design:returntype", Promise)
56
+ ], PhraseController.prototype, "list", null);
57
+ __decorate([
58
+ (0, core_1.Post)(),
59
+ __metadata("design:type", Function),
60
+ __metadata("design:paramtypes", [Object, Object]),
61
+ __metadata("design:returntype", Promise)
62
+ ], PhraseController.prototype, "create", null);
63
+ __decorate([
64
+ (0, core_1.Get)('practice'),
65
+ __metadata("design:type", Function),
66
+ __metadata("design:paramtypes", [Object, Object]),
67
+ __metadata("design:returntype", Promise)
68
+ ], PhraseController.prototype, "practice", null);
69
+ __decorate([
70
+ (0, core_1.Get)('stats'),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", [Object, Object]),
73
+ __metadata("design:returntype", Promise)
74
+ ], PhraseController.prototype, "stats", null);
75
+ exports.PhraseController = PhraseController = __decorate([
76
+ (0, core_1.Controller)('/api/v1/sea-king/phrases')
77
+ ], PhraseController);
78
+ //# sourceMappingURL=phrase.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phrase.controller.js","sourceRoot":"","sources":["../../src/controllers/phrase.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAAyD;AAEzD,sEAAsF;AAG/E,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACnB,aAAa,CAAiB;IAEtC,UAAU,CAAC,aAA4B;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAGK,AAAN,KAAK,CAAC,IAAI,CAAC,GAAY,EAAE,GAAa;QACpC,MAAM,MAAM,GAAG,sCAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAa;QACtC,MAAM,MAAM,GAAG,uCAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAC,GAAY,EAAE,GAAa;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAA2B,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAgC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACzF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAC,IAAa,EAAE,GAAa;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;CACF,CAAA;AA3CY,4CAAgB;AAQrB;IADL,IAAA,UAAG,GAAE;;;;4CASL;AAGK;IADL,IAAA,WAAI,GAAE;;;;8CASN;AAGK;IADL,IAAA,UAAG,EAAC,UAAU,CAAC;;;;gDAOf;AAGK;IADL,IAAA,UAAG,EAAC,OAAO,CAAC;;;;6CAIZ;2BA1CU,gBAAgB;IAD5B,IAAA,iBAAU,EAAC,0BAA0B,CAAC;GAC1B,gBAAgB,CA2C5B"}
@@ -0,0 +1,9 @@
1
+ import type { Request, Response } from 'express';
2
+ import { ProfileService } from '../services/profile.service.js';
3
+ export declare class ProfileController {
4
+ private profileService;
5
+ initialize(profileService: ProfileService): void;
6
+ getProfile(_req: Request, res: Response): Promise<void>;
7
+ getAnalysis(_req: Request, res: Response): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=profile.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/profile.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,qBACa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAkB;IAExC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAK1C,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/D"}
@@ -0,0 +1,44 @@
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.ProfileController = void 0;
13
+ const core_1 = require("@octo-cyber/core");
14
+ let ProfileController = class ProfileController {
15
+ profileService;
16
+ initialize(profileService) {
17
+ this.profileService = profileService;
18
+ }
19
+ async getProfile(_req, res) {
20
+ const profile = await this.profileService.getOrCreate('anonymous');
21
+ res.json(profile);
22
+ }
23
+ async getAnalysis(_req, res) {
24
+ const analysis = await this.profileService.getAnalysis('anonymous');
25
+ res.json(analysis);
26
+ }
27
+ };
28
+ exports.ProfileController = ProfileController;
29
+ __decorate([
30
+ (0, core_1.Get)(),
31
+ __metadata("design:type", Function),
32
+ __metadata("design:paramtypes", [Object, Object]),
33
+ __metadata("design:returntype", Promise)
34
+ ], ProfileController.prototype, "getProfile", null);
35
+ __decorate([
36
+ (0, core_1.Get)('analysis'),
37
+ __metadata("design:type", Function),
38
+ __metadata("design:paramtypes", [Object, Object]),
39
+ __metadata("design:returntype", Promise)
40
+ ], ProfileController.prototype, "getAnalysis", null);
41
+ exports.ProfileController = ProfileController = __decorate([
42
+ (0, core_1.Controller)('/api/v1/sea-king/profile')
43
+ ], ProfileController);
44
+ //# sourceMappingURL=profile.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.controller.js","sourceRoot":"","sources":["../../src/controllers/profile.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAAmD;AAI5C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACpB,cAAc,CAAkB;IAExC,UAAU,CAAC,cAA8B;QACvC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,GAAa;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,GAAa;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACpE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;CACF,CAAA;AAlBY,8CAAiB;AAQtB;IADL,IAAA,UAAG,GAAE;;;;mDAIL;AAGK;IADL,IAAA,UAAG,EAAC,UAAU,CAAC;;;;oDAIf;4BAjBU,iBAAiB;IAD7B,IAAA,iBAAU,EAAC,0BAA0B,CAAC;GAC1B,iBAAiB,CAkB7B"}
@@ -0,0 +1,18 @@
1
+ import type { Request, Response } from 'express';
2
+ import type { TuringService } from '../services/turing.service.js';
3
+ import { type AuthRequest } from '../types.js';
4
+ export declare class TuringController {
5
+ private turingService;
6
+ initializeController(turingService: TuringService): void;
7
+ /** 提交猜测 */
8
+ submitGuess(req: AuthRequest, res: Response): Promise<void>;
9
+ /** 揭晓房间身份 */
10
+ revealRoom(req: AuthRequest, res: Response): Promise<void>;
11
+ /** 获取房间统计 */
12
+ getRoomStats(req: Request, res: Response): Promise<void>;
13
+ /** 获取个人图灵战绩 */
14
+ getMyStats(req: AuthRequest, res: Response): Promise<void>;
15
+ /** 获取个人图灵历史 */
16
+ getMyHistory(req: AuthRequest, res: Response): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=turing.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turing.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/turing.controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,KAAK,WAAW,EAAa,MAAM,aAAa,CAAC;AAU1D,qBACa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAiB;IAEtC,oBAAoB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAIxD,WAAW;IAEL,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjE,aAAa;IAEP,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,aAAa;IAEP,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,eAAe;IAET,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,eAAe;IAET,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnE"}
@@ -0,0 +1,103 @@
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.TuringController = void 0;
13
+ const core_1 = require("@octo-cyber/core");
14
+ const zod_1 = require("zod");
15
+ const types_js_1 = require("../types.js");
16
+ const SubmitGuessSchema = zod_1.z.object({
17
+ threadId: zod_1.z.string().uuid(),
18
+ targetId: zod_1.z.string().min(1),
19
+ guess: zod_1.z.enum(['human', 'ai']),
20
+ confidence: zod_1.z.number().int().min(1).max(5).default(3),
21
+ reason: zod_1.z.string().max(500).optional(),
22
+ });
23
+ let TuringController = class TuringController {
24
+ turingService;
25
+ initializeController(turingService) {
26
+ this.turingService = turingService;
27
+ }
28
+ /** 提交猜测 */
29
+ async submitGuess(req, res) {
30
+ const parsed = SubmitGuessSchema.safeParse(req.body);
31
+ if (!parsed.success) {
32
+ res.status(400).json({ error: parsed.error.flatten() });
33
+ return;
34
+ }
35
+ const userId = (0, types_js_1.getUserId)(req);
36
+ const guess = await this.turingService.submitGuess({
37
+ roomId: req.params['roomId'],
38
+ guesserId: userId,
39
+ ...parsed.data,
40
+ });
41
+ res.json({ guess });
42
+ }
43
+ /** 揭晓房间身份 */
44
+ async revealRoom(req, res) {
45
+ const userId = (0, types_js_1.getUserId)(req);
46
+ const result = await this.turingService.revealRoom(req.params['roomId'], userId);
47
+ res.json(result);
48
+ }
49
+ /** 获取房间统计 */
50
+ async getRoomStats(req, res) {
51
+ const stats = await this.turingService.getRoomStats(req.params['roomId']);
52
+ res.json(stats);
53
+ }
54
+ /** 获取个人图灵战绩 */
55
+ async getMyStats(req, res) {
56
+ const userId = (0, types_js_1.getUserId)(req);
57
+ const stats = await this.turingService.getUserStats(userId);
58
+ res.json(stats);
59
+ }
60
+ /** 获取个人图灵历史 */
61
+ async getMyHistory(req, res) {
62
+ const userId = (0, types_js_1.getUserId)(req);
63
+ const page = parseInt(req.query.page, 10) || 1;
64
+ const pageSize = parseInt(req.query.pageSize, 10) || 20;
65
+ const result = await this.turingService.getUserHistory(userId, page, pageSize);
66
+ res.json(result);
67
+ }
68
+ };
69
+ exports.TuringController = TuringController;
70
+ __decorate([
71
+ (0, core_1.Post)('/rooms/:roomId/guess'),
72
+ __metadata("design:type", Function),
73
+ __metadata("design:paramtypes", [Object, Object]),
74
+ __metadata("design:returntype", Promise)
75
+ ], TuringController.prototype, "submitGuess", null);
76
+ __decorate([
77
+ (0, core_1.Post)('/rooms/:roomId/reveal'),
78
+ __metadata("design:type", Function),
79
+ __metadata("design:paramtypes", [Object, Object]),
80
+ __metadata("design:returntype", Promise)
81
+ ], TuringController.prototype, "revealRoom", null);
82
+ __decorate([
83
+ (0, core_1.Get)('/rooms/:roomId/stats'),
84
+ __metadata("design:type", Function),
85
+ __metadata("design:paramtypes", [Object, Object]),
86
+ __metadata("design:returntype", Promise)
87
+ ], TuringController.prototype, "getRoomStats", null);
88
+ __decorate([
89
+ (0, core_1.Get)('/my-stats'),
90
+ __metadata("design:type", Function),
91
+ __metadata("design:paramtypes", [Object, Object]),
92
+ __metadata("design:returntype", Promise)
93
+ ], TuringController.prototype, "getMyStats", null);
94
+ __decorate([
95
+ (0, core_1.Get)('/my-history'),
96
+ __metadata("design:type", Function),
97
+ __metadata("design:paramtypes", [Object, Object]),
98
+ __metadata("design:returntype", Promise)
99
+ ], TuringController.prototype, "getMyHistory", null);
100
+ exports.TuringController = TuringController = __decorate([
101
+ (0, core_1.Controller)('/api/v1/sea-king/turing')
102
+ ], TuringController);
103
+ //# sourceMappingURL=turing.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turing.controller.js","sourceRoot":"","sources":["../../src/controllers/turing.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { ChatMessage } from './chat-message.entity.js';
2
+ /**
3
+ * AI聊天角色:每个角色有独特的性格、说话风格和好感度逻辑
4
+ * 🎭 从温柔小鹿到霸道总裁,你能hold住几个?
5
+ */
6
+ export type CharacterPersonality = 'gentle' | 'tsundere' | 'intellectual' | 'rational' | 'playful' | 'mysterious';
7
+ export type CharacterGender = 'male' | 'female' | 'neutral';
8
+ export declare class ChatCharacter {
9
+ id: string;
10
+ /** 角色名字 */
11
+ name: string;
12
+ /** 角色头像 emoji 或 URL */
13
+ avatar: string;
14
+ /** 性格类型 */
15
+ personality: CharacterPersonality;
16
+ /** 性别 */
17
+ gender: CharacterGender;
18
+ /** 角色背景故事 */
19
+ backstory: string;
20
+ /** 说话风格描述(用于提示词) */
21
+ speakingStyle: string;
22
+ /** 好感度敏感点(JSON):什么话加分/扣分 */
23
+ favorTraits: string | null;
24
+ /** 讨厌的行为模式(JSON):什么话会大扣分 */
25
+ peeves: string | null;
26
+ /** 是否内置角色 */
27
+ builtIn: boolean;
28
+ /** 是否启用 */
29
+ enabled: boolean;
30
+ messages: ChatMessage[];
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ }
34
+ //# sourceMappingURL=chat-character.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-character.entity.d.ts","sourceRoot":"","sources":["../../src/entities/chat-character.entity.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,UAAU,GACV,cAAc,GACd,UAAU,GACV,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D,qBACa,aAAa;IAExB,EAAE,EAAG,MAAM,CAAC;IAEZ,WAAW;IAEX,IAAI,EAAG,MAAM,CAAC;IAEd,uBAAuB;IAEvB,MAAM,EAAG,MAAM,CAAC;IAEhB,WAAW;IAEX,WAAW,EAAG,oBAAoB,CAAC;IAEnC,SAAS;IAET,MAAM,EAAG,eAAe,CAAC;IAEzB,aAAa;IAEb,SAAS,EAAG,MAAM,CAAC;IAEnB,oBAAoB;IAEpB,aAAa,EAAG,MAAM,CAAC;IAEvB,4BAA4B;IAE5B,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAE5B,4BAA4B;IAE5B,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IAEvB,aAAa;IAEb,OAAO,EAAG,OAAO,CAAC;IAElB,WAAW;IAEX,OAAO,EAAG,OAAO,CAAC;IAGlB,QAAQ,EAAG,WAAW,EAAE,CAAC;IAGzB,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB"}
@@ -0,0 +1,101 @@
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.ChatCharacter = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const chat_message_entity_js_1 = require("./chat-message.entity.js");
15
+ let ChatCharacter = class ChatCharacter {
16
+ id;
17
+ /** 角色名字 */
18
+ name;
19
+ /** 角色头像 emoji 或 URL */
20
+ avatar;
21
+ /** 性格类型 */
22
+ personality;
23
+ /** 性别 */
24
+ gender;
25
+ /** 角色背景故事 */
26
+ backstory;
27
+ /** 说话风格描述(用于提示词) */
28
+ speakingStyle;
29
+ /** 好感度敏感点(JSON):什么话加分/扣分 */
30
+ favorTraits;
31
+ /** 讨厌的行为模式(JSON):什么话会大扣分 */
32
+ peeves;
33
+ /** 是否内置角色 */
34
+ builtIn;
35
+ /** 是否启用 */
36
+ enabled;
37
+ messages;
38
+ createdAt;
39
+ updatedAt;
40
+ };
41
+ exports.ChatCharacter = ChatCharacter;
42
+ __decorate([
43
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
44
+ __metadata("design:type", String)
45
+ ], ChatCharacter.prototype, "id", void 0);
46
+ __decorate([
47
+ (0, typeorm_1.Column)({ type: 'varchar', length: 100 }),
48
+ __metadata("design:type", String)
49
+ ], ChatCharacter.prototype, "name", void 0);
50
+ __decorate([
51
+ (0, typeorm_1.Column)({ type: 'varchar', length: 500, default: '🧑' }),
52
+ __metadata("design:type", String)
53
+ ], ChatCharacter.prototype, "avatar", void 0);
54
+ __decorate([
55
+ (0, typeorm_1.Column)({ type: 'varchar', length: 30 }),
56
+ __metadata("design:type", String)
57
+ ], ChatCharacter.prototype, "personality", void 0);
58
+ __decorate([
59
+ (0, typeorm_1.Column)({ type: 'varchar', length: 10, default: 'neutral' }),
60
+ __metadata("design:type", String)
61
+ ], ChatCharacter.prototype, "gender", void 0);
62
+ __decorate([
63
+ (0, typeorm_1.Column)({ type: 'text' }),
64
+ __metadata("design:type", String)
65
+ ], ChatCharacter.prototype, "backstory", void 0);
66
+ __decorate([
67
+ (0, typeorm_1.Column)({ type: 'text' }),
68
+ __metadata("design:type", String)
69
+ ], ChatCharacter.prototype, "speakingStyle", void 0);
70
+ __decorate([
71
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
72
+ __metadata("design:type", Object)
73
+ ], ChatCharacter.prototype, "favorTraits", void 0);
74
+ __decorate([
75
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
76
+ __metadata("design:type", Object)
77
+ ], ChatCharacter.prototype, "peeves", void 0);
78
+ __decorate([
79
+ (0, typeorm_1.Column)({ type: 'boolean', default: true }),
80
+ __metadata("design:type", Boolean)
81
+ ], ChatCharacter.prototype, "builtIn", void 0);
82
+ __decorate([
83
+ (0, typeorm_1.Column)({ type: 'boolean', default: true }),
84
+ __metadata("design:type", Boolean)
85
+ ], ChatCharacter.prototype, "enabled", void 0);
86
+ __decorate([
87
+ (0, typeorm_1.OneToMany)(() => chat_message_entity_js_1.ChatMessage, (msg) => msg.character),
88
+ __metadata("design:type", Array)
89
+ ], ChatCharacter.prototype, "messages", void 0);
90
+ __decorate([
91
+ (0, typeorm_1.CreateDateColumn)(),
92
+ __metadata("design:type", Date)
93
+ ], ChatCharacter.prototype, "createdAt", void 0);
94
+ __decorate([
95
+ (0, typeorm_1.UpdateDateColumn)(),
96
+ __metadata("design:type", Date)
97
+ ], ChatCharacter.prototype, "updatedAt", void 0);
98
+ exports.ChatCharacter = ChatCharacter = __decorate([
99
+ (0, typeorm_1.Entity)('sk_chat_characters')
100
+ ], ChatCharacter);
101
+ //# sourceMappingURL=chat-character.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-character.entity.js","sourceRoot":"","sources":["../../src/entities/chat-character.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAOiB;AACjB,qEAAuD;AAiBhD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAU;IAEZ,WAAW;IAEX,IAAI,CAAU;IAEd,uBAAuB;IAEvB,MAAM,CAAU;IAEhB,WAAW;IAEX,WAAW,CAAwB;IAEnC,SAAS;IAET,MAAM,CAAmB;IAEzB,aAAa;IAEb,SAAS,CAAU;IAEnB,oBAAoB;IAEpB,aAAa,CAAU;IAEvB,4BAA4B;IAE5B,WAAW,CAAiB;IAE5B,4BAA4B;IAE5B,MAAM,CAAiB;IAEvB,aAAa;IAEb,OAAO,CAAW;IAElB,WAAW;IAEX,OAAO,CAAW;IAGlB,QAAQ,CAAiB;IAGzB,SAAS,CAAQ;IAGjB,SAAS,CAAQ;CAClB,CAAA;AApDY,sCAAa;AAExB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;yCACnB;AAIZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;2CAC3B;AAId;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;6CACxC;AAIhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;kDACL;AAInC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;;6CACnC;AAIzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDACN;AAInB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACF;AAIvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACb;AAI5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAClB;AAIvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;8CACzB;AAIlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;8CACzB;AAGlB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,oCAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;;+CAC5B;AAGzB;IADC,IAAA,0BAAgB,GAAE;8BACP,IAAI;gDAAC;AAGjB;IADC,IAAA,0BAAgB,GAAE;8BACP,IAAI;gDAAC;wBAnDN,aAAa;IADzB,IAAA,gBAAM,EAAC,oBAAoB,CAAC;GAChB,aAAa,CAoDzB"}
@@ -0,0 +1,26 @@
1
+ import { ChatThread } from './chat-thread.entity.js';
2
+ import { ChatCharacter } from './chat-character.entity.js';
3
+ /**
4
+ * 聊天消息
5
+ * 📨 说了什么都会被记录下来哦
6
+ */
7
+ export type MessageRole = 'user' | 'character' | 'system';
8
+ export declare class ChatMessage {
9
+ id: string;
10
+ threadId: string;
11
+ characterId: string | null;
12
+ /** 消息角色 */
13
+ role: MessageRole;
14
+ /** 消息内容 */
15
+ content: string;
16
+ /** 好感度变化值(正数加分,负数扣分) */
17
+ favorDelta: number;
18
+ /** 好感度变化原因 */
19
+ favorReason: string | null;
20
+ /** 消息情感标签 */
21
+ sentiment: string | null;
22
+ thread: ChatThread;
23
+ character: ChatCharacter;
24
+ createdAt: Date;
25
+ }
26
+ //# sourceMappingURL=chat-message.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message.entity.d.ts","sourceRoot":"","sources":["../../src/entities/chat-message.entity.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1D,qBACa,WAAW;IAEtB,EAAE,EAAG,MAAM,CAAC;IAGZ,QAAQ,EAAG,MAAM,CAAC;IAGlB,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAE5B,WAAW;IAEX,IAAI,EAAG,WAAW,CAAC;IAEnB,WAAW;IAEX,OAAO,EAAG,MAAM,CAAC;IAEjB,wBAAwB;IAExB,UAAU,EAAG,MAAM,CAAC;IAEpB,cAAc;IAEd,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAE5B,aAAa;IAEb,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAI1B,MAAM,EAAG,UAAU,CAAC;IAIpB,SAAS,EAAG,aAAa,CAAC;IAG1B,SAAS,EAAG,IAAI,CAAC;CAClB"}