@next-open-ai/openclawx 0.6.6

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 (198) hide show
  1. package/README.md +523 -0
  2. package/apps/desktop/README.md +210 -0
  3. package/apps/desktop/renderer/dist/assets/index-CYkSfhcp.css +10 -0
  4. package/apps/desktop/renderer/dist/assets/index-FI6O25Ms.js +89 -0
  5. package/apps/desktop/renderer/dist/index.html +22 -0
  6. package/dist/cli/cli.d.ts +2 -0
  7. package/dist/cli/cli.js +198 -0
  8. package/dist/cli/service.d.ts +13 -0
  9. package/dist/cli/service.js +243 -0
  10. package/dist/cli.d.ts +5 -0
  11. package/dist/cli.js +5 -0
  12. package/dist/core/agent/agent-dir.d.ts +14 -0
  13. package/dist/core/agent/agent-dir.js +75 -0
  14. package/dist/core/agent/agent-manager.d.ts +64 -0
  15. package/dist/core/agent/agent-manager.js +278 -0
  16. package/dist/core/agent/config-manager.d.ts +25 -0
  17. package/dist/core/agent/config-manager.js +84 -0
  18. package/dist/core/agent/run.d.ts +26 -0
  19. package/dist/core/agent/run.js +65 -0
  20. package/dist/core/agent/skills.d.ts +20 -0
  21. package/dist/core/agent/skills.js +86 -0
  22. package/dist/core/config/desktop-config.d.ts +90 -0
  23. package/dist/core/config/desktop-config.js +521 -0
  24. package/dist/core/config/provider-support-default.d.ts +21 -0
  25. package/dist/core/config/provider-support-default.js +57 -0
  26. package/dist/core/installer/index.d.ts +1 -0
  27. package/dist/core/installer/index.js +1 -0
  28. package/dist/core/installer/skill-installer.d.ts +39 -0
  29. package/dist/core/installer/skill-installer.js +215 -0
  30. package/dist/core/mcp/adapter.d.ts +17 -0
  31. package/dist/core/mcp/adapter.js +49 -0
  32. package/dist/core/mcp/client.d.ts +24 -0
  33. package/dist/core/mcp/client.js +70 -0
  34. package/dist/core/mcp/config.d.ts +22 -0
  35. package/dist/core/mcp/config.js +69 -0
  36. package/dist/core/mcp/index.d.ts +18 -0
  37. package/dist/core/mcp/index.js +20 -0
  38. package/dist/core/mcp/operator.d.ts +15 -0
  39. package/dist/core/mcp/operator.js +72 -0
  40. package/dist/core/mcp/transport/index.d.ts +11 -0
  41. package/dist/core/mcp/transport/index.js +16 -0
  42. package/dist/core/mcp/transport/sse.d.ts +20 -0
  43. package/dist/core/mcp/transport/sse.js +82 -0
  44. package/dist/core/mcp/transport/stdio.d.ts +32 -0
  45. package/dist/core/mcp/transport/stdio.js +132 -0
  46. package/dist/core/mcp/types.d.ts +72 -0
  47. package/dist/core/mcp/types.js +5 -0
  48. package/dist/core/memory/build-summary.d.ts +6 -0
  49. package/dist/core/memory/build-summary.js +27 -0
  50. package/dist/core/memory/compaction-extension.d.ts +6 -0
  51. package/dist/core/memory/compaction-extension.js +23 -0
  52. package/dist/core/memory/embedding.d.ts +4 -0
  53. package/dist/core/memory/embedding.js +15 -0
  54. package/dist/core/memory/index.d.ts +29 -0
  55. package/dist/core/memory/index.js +70 -0
  56. package/dist/core/memory/remote-embedding.d.ts +10 -0
  57. package/dist/core/memory/remote-embedding.js +36 -0
  58. package/dist/core/memory/types.d.ts +16 -0
  59. package/dist/core/memory/types.js +1 -0
  60. package/dist/core/memory/vector-store.d.ts +15 -0
  61. package/dist/core/memory/vector-store.js +65 -0
  62. package/dist/core/tools/bookmark-tool.d.ts +9 -0
  63. package/dist/core/tools/bookmark-tool.js +118 -0
  64. package/dist/core/tools/browser-tool.d.ts +10 -0
  65. package/dist/core/tools/browser-tool.js +362 -0
  66. package/dist/core/tools/index.d.ts +4 -0
  67. package/dist/core/tools/index.js +4 -0
  68. package/dist/core/tools/install-skill-tool.d.ts +6 -0
  69. package/dist/core/tools/install-skill-tool.js +53 -0
  70. package/dist/core/tools/save-experience-tool.d.ts +5 -0
  71. package/dist/core/tools/save-experience-tool.js +54 -0
  72. package/dist/gateway/auth-hooks.d.ts +17 -0
  73. package/dist/gateway/auth-hooks.js +19 -0
  74. package/dist/gateway/backend-url.d.ts +2 -0
  75. package/dist/gateway/backend-url.js +11 -0
  76. package/dist/gateway/channel-handler.d.ts +6 -0
  77. package/dist/gateway/channel-handler.js +3 -0
  78. package/dist/gateway/clients.d.ts +5 -0
  79. package/dist/gateway/clients.js +4 -0
  80. package/dist/gateway/connection-handler.d.ts +6 -0
  81. package/dist/gateway/connection-handler.js +48 -0
  82. package/dist/gateway/index.d.ts +3 -0
  83. package/dist/gateway/index.js +2 -0
  84. package/dist/gateway/message-handler.d.ts +5 -0
  85. package/dist/gateway/message-handler.js +65 -0
  86. package/dist/gateway/methods/agent-cancel.d.ts +10 -0
  87. package/dist/gateway/methods/agent-cancel.js +17 -0
  88. package/dist/gateway/methods/agent-chat.d.ts +8 -0
  89. package/dist/gateway/methods/agent-chat.js +148 -0
  90. package/dist/gateway/methods/connect.d.ts +9 -0
  91. package/dist/gateway/methods/connect.js +18 -0
  92. package/dist/gateway/methods/install-skill-from-path.d.ts +13 -0
  93. package/dist/gateway/methods/install-skill-from-path.js +15 -0
  94. package/dist/gateway/methods/install-skill-from-upload.d.ts +14 -0
  95. package/dist/gateway/methods/install-skill-from-upload.js +13 -0
  96. package/dist/gateway/methods/run-scheduled-task.d.ts +15 -0
  97. package/dist/gateway/methods/run-scheduled-task.js +127 -0
  98. package/dist/gateway/paths.d.ts +20 -0
  99. package/dist/gateway/paths.js +19 -0
  100. package/dist/gateway/server.d.ts +8 -0
  101. package/dist/gateway/server.js +190 -0
  102. package/dist/gateway/sse-handler.d.ts +6 -0
  103. package/dist/gateway/sse-handler.js +3 -0
  104. package/dist/gateway/types.d.ts +90 -0
  105. package/dist/gateway/types.js +1 -0
  106. package/dist/gateway/utils.d.ts +22 -0
  107. package/dist/gateway/utils.js +67 -0
  108. package/dist/gateway/voice-handler.d.ts +12 -0
  109. package/dist/gateway/voice-handler.js +18 -0
  110. package/dist/index.d.ts +5 -0
  111. package/dist/index.js +5 -0
  112. package/dist/server/agent-config/agent-config.controller.d.ts +30 -0
  113. package/dist/server/agent-config/agent-config.controller.js +83 -0
  114. package/dist/server/agent-config/agent-config.module.d.ts +2 -0
  115. package/dist/server/agent-config/agent-config.module.js +19 -0
  116. package/dist/server/agent-config/agent-config.service.d.ts +53 -0
  117. package/dist/server/agent-config/agent-config.service.js +213 -0
  118. package/dist/server/agents/agents.controller.d.ts +41 -0
  119. package/dist/server/agents/agents.controller.js +118 -0
  120. package/dist/server/agents/agents.gateway.d.ts +21 -0
  121. package/dist/server/agents/agents.gateway.js +103 -0
  122. package/dist/server/agents/agents.module.d.ts +2 -0
  123. package/dist/server/agents/agents.module.js +20 -0
  124. package/dist/server/agents/agents.service.d.ts +63 -0
  125. package/dist/server/agents/agents.service.js +169 -0
  126. package/dist/server/app.module.d.ts +2 -0
  127. package/dist/server/app.module.js +38 -0
  128. package/dist/server/auth/auth.controller.d.ts +20 -0
  129. package/dist/server/auth/auth.controller.js +64 -0
  130. package/dist/server/auth/auth.module.d.ts +2 -0
  131. package/dist/server/auth/auth.module.js +19 -0
  132. package/dist/server/bootstrap.d.ts +15 -0
  133. package/dist/server/bootstrap.js +38 -0
  134. package/dist/server/config/config.controller.d.ts +73 -0
  135. package/dist/server/config/config.controller.js +95 -0
  136. package/dist/server/config/config.module.d.ts +2 -0
  137. package/dist/server/config/config.module.js +21 -0
  138. package/dist/server/config/config.service.d.ts +82 -0
  139. package/dist/server/config/config.service.js +123 -0
  140. package/dist/server/database/database.module.d.ts +2 -0
  141. package/dist/server/database/database.module.js +18 -0
  142. package/dist/server/database/database.service.d.ts +26 -0
  143. package/dist/server/database/database.service.js +253 -0
  144. package/dist/server/main.d.ts +1 -0
  145. package/dist/server/main.js +9 -0
  146. package/dist/server/saved-items/saved-items.controller.d.ts +57 -0
  147. package/dist/server/saved-items/saved-items.controller.js +229 -0
  148. package/dist/server/saved-items/saved-items.module.d.ts +2 -0
  149. package/dist/server/saved-items/saved-items.module.js +25 -0
  150. package/dist/server/saved-items/saved-items.service.d.ts +31 -0
  151. package/dist/server/saved-items/saved-items.service.js +105 -0
  152. package/dist/server/saved-items/tags.controller.d.ts +30 -0
  153. package/dist/server/saved-items/tags.controller.js +85 -0
  154. package/dist/server/saved-items/tags.service.d.ts +24 -0
  155. package/dist/server/saved-items/tags.service.js +84 -0
  156. package/dist/server/skills/skills.controller.d.ts +63 -0
  157. package/dist/server/skills/skills.controller.js +194 -0
  158. package/dist/server/skills/skills.module.d.ts +2 -0
  159. package/dist/server/skills/skills.module.js +22 -0
  160. package/dist/server/skills/skills.service.d.ts +65 -0
  161. package/dist/server/skills/skills.service.js +388 -0
  162. package/dist/server/tasks/tasks.controller.d.ts +52 -0
  163. package/dist/server/tasks/tasks.controller.js +163 -0
  164. package/dist/server/tasks/tasks.module.d.ts +2 -0
  165. package/dist/server/tasks/tasks.module.js +23 -0
  166. package/dist/server/tasks/tasks.service.d.ts +86 -0
  167. package/dist/server/tasks/tasks.service.js +327 -0
  168. package/dist/server/usage/usage.controller.d.ts +12 -0
  169. package/dist/server/usage/usage.controller.js +46 -0
  170. package/dist/server/usage/usage.module.d.ts +2 -0
  171. package/dist/server/usage/usage.module.js +19 -0
  172. package/dist/server/usage/usage.service.d.ts +21 -0
  173. package/dist/server/usage/usage.service.js +55 -0
  174. package/dist/server/users/users.controller.d.ts +35 -0
  175. package/dist/server/users/users.controller.js +69 -0
  176. package/dist/server/users/users.module.d.ts +2 -0
  177. package/dist/server/users/users.module.js +19 -0
  178. package/dist/server/users/users.service.d.ts +39 -0
  179. package/dist/server/users/users.service.js +140 -0
  180. package/dist/server/workspace/workspace.controller.d.ts +24 -0
  181. package/dist/server/workspace/workspace.controller.js +132 -0
  182. package/dist/server/workspace/workspace.module.d.ts +2 -0
  183. package/dist/server/workspace/workspace.module.js +21 -0
  184. package/dist/server/workspace/workspace.service.d.ts +36 -0
  185. package/dist/server/workspace/workspace.service.js +142 -0
  186. package/package.json +90 -0
  187. package/skills/agent-browser/SKILL.md +207 -0
  188. package/skills/agent-browser/references/authentication.md +202 -0
  189. package/skills/agent-browser/references/commands.md +259 -0
  190. package/skills/agent-browser/references/proxy-support.md +188 -0
  191. package/skills/agent-browser/references/session-management.md +193 -0
  192. package/skills/agent-browser/references/snapshot-refs.md +194 -0
  193. package/skills/agent-browser/references/video-recording.md +173 -0
  194. package/skills/agent-browser/templates/authenticated-session.sh +97 -0
  195. package/skills/agent-browser/templates/capture-workflow.sh +69 -0
  196. package/skills/agent-browser/templates/form-automation.sh +62 -0
  197. package/skills/find-skills/SKILL.md +140 -0
  198. package/skills/url-bookmark/SKILL.md +36 -0
@@ -0,0 +1,169 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { randomUUID } from 'crypto';
12
+ import { agentManager } from '../../core/agent/agent-manager.js';
13
+ import { DatabaseService } from '../database/database.service.js';
14
+ /**
15
+ * Agents service: session + history storage in SQLite.
16
+ * Conversation is done via frontend -> Gateway (WebSocket) -> agent; NestJS is not in the chat path.
17
+ */
18
+ let AgentsService = class AgentsService {
19
+ db;
20
+ eventListeners = new Map();
21
+ constructor(db) {
22
+ this.db = db;
23
+ }
24
+ addEventListener(event, listener) {
25
+ if (!this.eventListeners.has(event)) {
26
+ this.eventListeners.set(event, new Set());
27
+ }
28
+ this.eventListeners.get(event).add(listener);
29
+ return () => {
30
+ const listeners = this.eventListeners.get(event);
31
+ if (listeners)
32
+ listeners.delete(listener);
33
+ };
34
+ }
35
+ emitEvent(event, payload) {
36
+ const listeners = this.eventListeners.get(event);
37
+ if (listeners)
38
+ listeners.forEach((l) => l(payload));
39
+ }
40
+ rowToSession(r) {
41
+ return {
42
+ id: r.id,
43
+ createdAt: r.created_at,
44
+ lastActiveAt: r.last_active_at,
45
+ messageCount: r.message_count,
46
+ status: r.status,
47
+ agentId: r.agent_id ?? undefined,
48
+ workspace: r.workspace ?? undefined,
49
+ provider: r.provider ?? undefined,
50
+ model: r.model ?? undefined,
51
+ title: r.title ?? undefined,
52
+ preview: r.preview ?? undefined,
53
+ type: (r.type === 'scheduled' || r.type === 'chat' || r.type === 'system' ? r.type : 'chat'),
54
+ };
55
+ }
56
+ rowToMessage(r) {
57
+ const msg = {
58
+ id: r.id,
59
+ sessionId: r.session_id,
60
+ role: r.role,
61
+ content: r.content,
62
+ timestamp: r.timestamp,
63
+ };
64
+ if (r.tool_calls_json) {
65
+ try {
66
+ msg.toolCalls = JSON.parse(r.tool_calls_json);
67
+ }
68
+ catch (_) { }
69
+ }
70
+ return msg;
71
+ }
72
+ async createSession(options) {
73
+ const sessionId = options?.id ?? randomUUID();
74
+ const sessionType = options?.type ?? 'chat';
75
+ const existing = this.getSession(sessionId);
76
+ if (existing)
77
+ return existing;
78
+ const now = Date.now();
79
+ const agentId = options?.agentId ?? 'default';
80
+ const workspace = options?.workspace ?? 'default';
81
+ const session = {
82
+ id: sessionId,
83
+ createdAt: now,
84
+ lastActiveAt: now,
85
+ messageCount: 0,
86
+ status: 'idle',
87
+ agentId,
88
+ workspace,
89
+ provider: options?.provider,
90
+ model: options?.model,
91
+ title: options?.title ?? undefined,
92
+ preview: '',
93
+ type: sessionType,
94
+ };
95
+ this.db.run(`INSERT INTO sessions (id, created_at, last_active_at, message_count, status, agent_id, workspace, provider, model, title, preview, type)
96
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
97
+ session.id,
98
+ session.createdAt,
99
+ session.lastActiveAt,
100
+ session.messageCount,
101
+ session.status,
102
+ agentId,
103
+ workspace,
104
+ session.provider ?? null,
105
+ session.model ?? null,
106
+ session.title ?? null,
107
+ session.preview ?? null,
108
+ sessionType,
109
+ ]);
110
+ return session;
111
+ }
112
+ /** 获取或创建会话(指定 id 时复用同一会话,用于定时任务固定 sessionId) */
113
+ async getOrCreateSession(sessionId, options) {
114
+ const existing = this.getSession(sessionId);
115
+ if (existing) {
116
+ const now = Date.now();
117
+ const title = options?.title ?? existing.title;
118
+ this.db.run('UPDATE sessions SET last_active_at = ?, title = ? WHERE id = ?', [now, title ?? null, sessionId]);
119
+ return { ...existing, lastActiveAt: now, title };
120
+ }
121
+ return this.createSession({
122
+ id: sessionId,
123
+ agentId: options?.agentId ?? 'default',
124
+ workspace: options?.workspace ?? 'default',
125
+ title: options?.title,
126
+ type: options?.type ?? 'chat',
127
+ });
128
+ }
129
+ getSessions() {
130
+ const rows = this.db.all('SELECT * FROM sessions ORDER BY last_active_at DESC');
131
+ return rows.map((r) => this.rowToSession(r));
132
+ }
133
+ getSession(sessionId) {
134
+ const r = this.db.get('SELECT * FROM sessions WHERE id = ?', [sessionId]);
135
+ return r ? this.rowToSession(r) : undefined;
136
+ }
137
+ async deleteSession(sessionId) {
138
+ const result = this.db.run('DELETE FROM sessions WHERE id = ?', [sessionId]);
139
+ if (result.changes > 0) {
140
+ this.db.persist();
141
+ }
142
+ agentManager.deleteSession(sessionId);
143
+ }
144
+ getMessageHistory(sessionId) {
145
+ const rows = this.db.all('SELECT * FROM chat_messages WHERE session_id = ? ORDER BY timestamp ASC', [sessionId]);
146
+ return rows.map((r) => this.rowToMessage(r));
147
+ }
148
+ addAssistantMessage(sessionId, content) {
149
+ const id = randomUUID();
150
+ const now = Date.now();
151
+ this.db.run(`INSERT INTO chat_messages (id, session_id, role, content, timestamp, tool_calls_json) VALUES (?, ?, ?, ?, ?, ?)`, [id, sessionId, 'assistant', content, now, null]);
152
+ this.db.run('UPDATE sessions SET last_active_at = ?, status = ?, message_count = message_count + 1 WHERE id = ?', [now, 'idle', sessionId]);
153
+ }
154
+ appendMessage(sessionId, role, content, options) {
155
+ const session = this.getSession(sessionId);
156
+ if (!session)
157
+ return;
158
+ const id = randomUUID();
159
+ const now = Date.now();
160
+ const toolCallsJson = role === 'assistant' && options?.toolCalls ? JSON.stringify(options.toolCalls) : null;
161
+ this.db.run(`INSERT INTO chat_messages (id, session_id, role, content, timestamp, tool_calls_json) VALUES (?, ?, ?, ?, ?, ?)`, [id, sessionId, role, content, now, toolCallsJson]);
162
+ this.db.run('UPDATE sessions SET last_active_at = ?, status = ?, message_count = message_count + 1 WHERE id = ?', [now, role === 'assistant' ? 'idle' : session.status, sessionId]);
163
+ }
164
+ };
165
+ AgentsService = __decorate([
166
+ Injectable(),
167
+ __metadata("design:paramtypes", [DatabaseService])
168
+ ], AgentsService);
169
+ export { AgentsService };
@@ -0,0 +1,2 @@
1
+ export declare class AppModule {
2
+ }
@@ -0,0 +1,38 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Module } from '@nestjs/common';
8
+ import { DatabaseModule } from './database/database.module.js';
9
+ import { AgentsModule } from './agents/agents.module.js';
10
+ import { AgentConfigModule } from './agent-config/agent-config.module.js';
11
+ import { SkillsModule } from './skills/skills.module.js';
12
+ import { ConfigModule } from './config/config.module.js';
13
+ import { AuthModule } from './auth/auth.module.js';
14
+ import { UsersModule } from './users/users.module.js';
15
+ import { WorkspaceModule } from './workspace/workspace.module.js';
16
+ import { TasksModule } from './tasks/tasks.module.js';
17
+ import { UsageModule } from './usage/usage.module.js';
18
+ import { SavedItemsModule } from './saved-items/saved-items.module.js';
19
+ let AppModule = class AppModule {
20
+ };
21
+ AppModule = __decorate([
22
+ Module({
23
+ imports: [
24
+ DatabaseModule,
25
+ AgentsModule,
26
+ AgentConfigModule,
27
+ SkillsModule,
28
+ ConfigModule,
29
+ AuthModule,
30
+ UsersModule,
31
+ WorkspaceModule,
32
+ TasksModule,
33
+ UsageModule,
34
+ SavedItemsModule,
35
+ ],
36
+ })
37
+ ], AppModule);
38
+ export { AppModule };
@@ -0,0 +1,20 @@
1
+ import { ConfigService } from '../config/config.service.js';
2
+ import { UsersService } from '../users/users.service.js';
3
+ export declare class AuthController {
4
+ private readonly configService;
5
+ private readonly usersService;
6
+ constructor(configService: ConfigService, usersService: UsersService);
7
+ login(body: {
8
+ username?: string;
9
+ password?: string;
10
+ }): Promise<{
11
+ success: boolean;
12
+ user: {
13
+ id: string;
14
+ username: string;
15
+ } | undefined;
16
+ } | {
17
+ success: boolean;
18
+ user?: undefined;
19
+ }>;
20
+ }
@@ -0,0 +1,64 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Controller, Post, Body, HttpCode, HttpStatus, UnauthorizedException } from '@nestjs/common';
14
+ import { ConfigService } from '../config/config.service.js';
15
+ import { UsersService } from '../users/users.service.js';
16
+ const DEFAULT_USERNAME = 'admin';
17
+ const DEFAULT_PASSWORD = '123456';
18
+ let AuthController = class AuthController {
19
+ configService;
20
+ usersService;
21
+ constructor(configService, usersService) {
22
+ this.configService = configService;
23
+ this.usersService = usersService;
24
+ }
25
+ async login(body) {
26
+ const user = (body.username ?? '').trim().toLowerCase();
27
+ const pass = (body.password ?? '').trim();
28
+ // 系统缺省:admin / 123456 始终允许登录,并确保缺省用户存在
29
+ if (user === DEFAULT_USERNAME && pass === DEFAULT_PASSWORD) {
30
+ const defaultUser = await this.usersService.ensureDefaultAdmin();
31
+ return { success: true, user: defaultUser };
32
+ }
33
+ const hasUsers = await this.usersService.hasUsers();
34
+ if (hasUsers) {
35
+ const ok = await this.usersService.validateCredentials(body.username ?? '', body.password ?? '');
36
+ if (ok) {
37
+ const found = await this.usersService.findByUsername(body.username ?? '');
38
+ return { success: true, user: found ?? undefined };
39
+ }
40
+ throw new UnauthorizedException('Invalid username or password');
41
+ }
42
+ const config = await this.configService.getConfig();
43
+ const expectedUser = (config.loginUsername?.trim() || DEFAULT_USERNAME).toLowerCase();
44
+ const expectedPass = config.loginPassword?.trim() || DEFAULT_PASSWORD;
45
+ if (user === expectedUser && pass === expectedPass) {
46
+ return { success: true };
47
+ }
48
+ throw new UnauthorizedException('Invalid username or password');
49
+ }
50
+ };
51
+ __decorate([
52
+ Post('login'),
53
+ HttpCode(HttpStatus.OK),
54
+ __param(0, Body()),
55
+ __metadata("design:type", Function),
56
+ __metadata("design:paramtypes", [Object]),
57
+ __metadata("design:returntype", Promise)
58
+ ], AuthController.prototype, "login", null);
59
+ AuthController = __decorate([
60
+ Controller('auth'),
61
+ __metadata("design:paramtypes", [ConfigService,
62
+ UsersService])
63
+ ], AuthController);
64
+ export { AuthController };
@@ -0,0 +1,2 @@
1
+ export declare class AuthModule {
2
+ }
@@ -0,0 +1,19 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Module } from '@nestjs/common';
8
+ import { ConfigModule } from '../config/config.module.js';
9
+ import { UsersModule } from '../users/users.module.js';
10
+ import { AuthController } from './auth.controller.js';
11
+ let AuthModule = class AuthModule {
12
+ };
13
+ AuthModule = __decorate([
14
+ Module({
15
+ imports: [ConfigModule, UsersModule],
16
+ controllers: [AuthController],
17
+ })
18
+ ], AuthModule);
19
+ export { AuthModule };
@@ -0,0 +1,15 @@
1
+ import type { INestApplication } from '@nestjs/common';
2
+ import type { Express } from 'express';
3
+ export interface NestAppResult {
4
+ app: INestApplication;
5
+ express: Express;
6
+ }
7
+ /**
8
+ * 创建 Nest 应用(内嵌模式):不 listen,不设置 globalPrefix。
9
+ * Gateway 将返回的 express 挂到 /server-api,请求路径会剥掉前缀后进入 Nest。
10
+ */
11
+ export declare function createNestAppEmbedded(): Promise<NestAppResult>;
12
+ /**
13
+ * 独立启动时使用:设置 globalPrefix 并监听端口。
14
+ */
15
+ export declare function createNestAppStandalone(port?: number): Promise<INestApplication>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Nest 应用创建:支持「内嵌到 Gateway」与「独立监听」两种模式。
3
+ * - 内嵌:不设置 globalPrefix、不 listen,返回 { app, express } 供 Gateway 挂载到 /server-api。
4
+ * - 独立:设置 globalPrefix('server-api') 并 listen(port),用于单独启动 Desktop Server。
5
+ */
6
+ import { NestFactory } from '@nestjs/core';
7
+ import { AppModule } from './app.module.js';
8
+ /**
9
+ * 创建 Nest 应用(内嵌模式):不 listen,不设置 globalPrefix。
10
+ * Gateway 将返回的 express 挂到 /server-api,请求路径会剥掉前缀后进入 Nest。
11
+ */
12
+ export async function createNestAppEmbedded() {
13
+ const app = await NestFactory.create(AppModule, {
14
+ cors: true,
15
+ });
16
+ app.enableCors({
17
+ origin: ['http://localhost:5173', 'http://localhost:38080', 'http://localhost:38081'],
18
+ credentials: true,
19
+ });
20
+ await app.init();
21
+ const express = app.getHttpAdapter().getInstance();
22
+ return { app, express };
23
+ }
24
+ /**
25
+ * 独立启动时使用:设置 globalPrefix 并监听端口。
26
+ */
27
+ export async function createNestAppStandalone(port = 38081) {
28
+ const app = await NestFactory.create(AppModule, {
29
+ cors: true,
30
+ });
31
+ app.setGlobalPrefix('server-api');
32
+ app.enableCors({
33
+ origin: ['http://localhost:5173', 'http://localhost:38080', 'http://localhost:38081'],
34
+ credentials: true,
35
+ });
36
+ await app.listen(port);
37
+ return app;
38
+ }
@@ -0,0 +1,73 @@
1
+ import { ConfigService, AppConfig } from './config.service.js';
2
+ export declare class ConfigController {
3
+ private readonly configService;
4
+ constructor(configService: ConfigService);
5
+ getConfig(): Promise<{
6
+ success: boolean;
7
+ data: {
8
+ loginPasswordSet: boolean;
9
+ gatewayUrl: string;
10
+ defaultProvider: string;
11
+ defaultModel: string;
12
+ defaultModelItemCode?: string;
13
+ defaultAgentId?: string;
14
+ theme: "light" | "dark";
15
+ maxAgentSessions?: number;
16
+ loginUsername?: string;
17
+ providers: {
18
+ [key: string]: {
19
+ apiKey?: string;
20
+ baseUrl?: string;
21
+ alias?: string;
22
+ };
23
+ };
24
+ configuredModels?: import("./config.service.js").ConfiguredModelItem[];
25
+ rag?: {
26
+ embeddingProvider?: string;
27
+ embeddingModel?: string;
28
+ };
29
+ };
30
+ }>;
31
+ updateConfig(updates: Partial<AppConfig>): Promise<{
32
+ success: boolean;
33
+ data: {
34
+ loginPasswordSet: boolean;
35
+ gatewayUrl: string;
36
+ defaultProvider: string;
37
+ defaultModel: string;
38
+ defaultModelItemCode?: string;
39
+ defaultAgentId?: string;
40
+ theme: "light" | "dark";
41
+ maxAgentSessions?: number;
42
+ loginUsername?: string;
43
+ providers: {
44
+ [key: string]: {
45
+ apiKey?: string;
46
+ baseUrl?: string;
47
+ alias?: string;
48
+ };
49
+ };
50
+ configuredModels?: import("./config.service.js").ConfiguredModelItem[];
51
+ rag?: {
52
+ embeddingProvider?: string;
53
+ embeddingModel?: string;
54
+ };
55
+ };
56
+ }>;
57
+ getProviders(): Promise<{
58
+ success: boolean;
59
+ data: string[];
60
+ }>;
61
+ getProviderSupport(): Promise<{
62
+ success: boolean;
63
+ data: import("../../index.js").ProviderSupport;
64
+ }>;
65
+ getModels(provider: string, type?: string): Promise<{
66
+ success: boolean;
67
+ data: {
68
+ id: string;
69
+ name: string;
70
+ types?: string[];
71
+ }[];
72
+ }>;
73
+ }
@@ -0,0 +1,95 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Controller, Get, Put, Body, Param, Query } from '@nestjs/common';
14
+ import { ConfigService } from './config.service.js';
15
+ let ConfigController = class ConfigController {
16
+ configService;
17
+ constructor(configService) {
18
+ this.configService = configService;
19
+ }
20
+ async getConfig() {
21
+ const config = await this.configService.getConfig();
22
+ const { loginPassword, ...rest } = config;
23
+ return {
24
+ success: true,
25
+ data: { ...rest, loginPasswordSet: !!loginPassword },
26
+ };
27
+ }
28
+ async updateConfig(updates) {
29
+ const config = await this.configService.updateConfig(updates);
30
+ const { loginPassword, ...rest } = config;
31
+ return {
32
+ success: true,
33
+ data: { ...rest, loginPasswordSet: !!loginPassword },
34
+ };
35
+ }
36
+ async getProviders() {
37
+ const providers = await this.configService.getProviders();
38
+ return {
39
+ success: true,
40
+ data: providers,
41
+ };
42
+ }
43
+ async getProviderSupport() {
44
+ const support = await this.configService.getProviderSupport();
45
+ return {
46
+ success: true,
47
+ data: support,
48
+ };
49
+ }
50
+ async getModels(provider, type) {
51
+ const models = await this.configService.getModels(provider, type);
52
+ return {
53
+ success: true,
54
+ data: models,
55
+ };
56
+ }
57
+ };
58
+ __decorate([
59
+ Get(),
60
+ __metadata("design:type", Function),
61
+ __metadata("design:paramtypes", []),
62
+ __metadata("design:returntype", Promise)
63
+ ], ConfigController.prototype, "getConfig", null);
64
+ __decorate([
65
+ Put(),
66
+ __param(0, Body()),
67
+ __metadata("design:type", Function),
68
+ __metadata("design:paramtypes", [Object]),
69
+ __metadata("design:returntype", Promise)
70
+ ], ConfigController.prototype, "updateConfig", null);
71
+ __decorate([
72
+ Get('providers'),
73
+ __metadata("design:type", Function),
74
+ __metadata("design:paramtypes", []),
75
+ __metadata("design:returntype", Promise)
76
+ ], ConfigController.prototype, "getProviders", null);
77
+ __decorate([
78
+ Get('provider-support'),
79
+ __metadata("design:type", Function),
80
+ __metadata("design:paramtypes", []),
81
+ __metadata("design:returntype", Promise)
82
+ ], ConfigController.prototype, "getProviderSupport", null);
83
+ __decorate([
84
+ Get('providers/:provider/models'),
85
+ __param(0, Param('provider')),
86
+ __param(1, Query('type')),
87
+ __metadata("design:type", Function),
88
+ __metadata("design:paramtypes", [String, String]),
89
+ __metadata("design:returntype", Promise)
90
+ ], ConfigController.prototype, "getModels", null);
91
+ ConfigController = __decorate([
92
+ Controller('config'),
93
+ __metadata("design:paramtypes", [ConfigService])
94
+ ], ConfigController);
95
+ export { ConfigController };
@@ -0,0 +1,2 @@
1
+ export declare class ConfigModule {
2
+ }
@@ -0,0 +1,21 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Module } from '@nestjs/common';
8
+ import { ConfigController } from './config.controller.js';
9
+ import { ConfigService } from './config.service.js';
10
+ import { AgentConfigModule } from '../agent-config/agent-config.module.js';
11
+ let ConfigModule = class ConfigModule {
12
+ };
13
+ ConfigModule = __decorate([
14
+ Module({
15
+ imports: [AgentConfigModule],
16
+ controllers: [ConfigController],
17
+ providers: [ConfigService],
18
+ exports: [ConfigService],
19
+ })
20
+ ], ConfigModule);
21
+ export { ConfigModule };
@@ -0,0 +1,82 @@
1
+ import { AgentConfigService } from '../agent-config/agent-config.service.js';
2
+ /** 模型 cost 配置,写入 models.json;缺省均为 0 */
3
+ export interface ModelCost {
4
+ input?: number;
5
+ output?: number;
6
+ cacheRead?: number;
7
+ cacheWrite?: number;
8
+ }
9
+ /** 已配置的模型项(备用模型列表中的一条),新增时需选类型 */
10
+ export interface ConfiguredModelItem {
11
+ provider: string;
12
+ modelId: string;
13
+ /** 模型类型:llm / embedding / image 等,用于在不同场景筛选 */
14
+ type: 'llm' | 'embedding' | 'image';
15
+ /** 显示用别名,缺省用模型名;重名时自动加后缀区分 */
16
+ alias?: string;
17
+ /** 唯一编码,供界面与 agent.modelItemCode 匹配已设好的模型 */
18
+ modelItemCode?: string;
19
+ /** 是否推理模型,缺省 false;写入 models.json */
20
+ reasoning?: boolean;
21
+ /** 成本配置,缺省均为 0;写入 models.json */
22
+ cost?: ModelCost;
23
+ /** 上下文窗口,缺省 64000;写入 models.json */
24
+ contextWindow?: number;
25
+ /** 最大 token,缺省 8192;写入 models.json */
26
+ maxTokens?: number;
27
+ }
28
+ export interface AppConfig {
29
+ gatewayUrl: string;
30
+ defaultProvider: string;
31
+ defaultModel: string;
32
+ /** 缺省模型在 configuredModels 中的唯一标识(defaultModelItemCode),与 defaultProvider/defaultModel 一起确定缺省模型 */
33
+ defaultModelItemCode?: string;
34
+ /** 缺省智能体 id */
35
+ defaultAgentId?: string;
36
+ theme: 'light' | 'dark';
37
+ /** 同时存在的聊天 AgentSession 上限,超过时淘汰最久未用的 */
38
+ maxAgentSessions?: number;
39
+ /** 登录用户名,未配置时使用缺省(与缺省密码 123456 搭配) */
40
+ loginUsername?: string;
41
+ /** 登录密码,未配置时使用缺省 123456 */
42
+ loginPassword?: string;
43
+ providers: {
44
+ [key: string]: {
45
+ apiKey?: string;
46
+ baseUrl?: string;
47
+ /** 显示用别名,缺省用 provider 名;重名时自动加后缀区分 */
48
+ alias?: string;
49
+ };
50
+ };
51
+ /** 已配置的模型列表(备用),从该列表中选一个为缺省模型 */
52
+ configuredModels?: ConfiguredModelItem[];
53
+ /** RAG 知识库:embedding 使用该 provider+model,未配置时基于 RAG 的长记忆空转 */
54
+ rag?: {
55
+ embeddingProvider?: string;
56
+ embeddingModel?: string;
57
+ };
58
+ }
59
+ export declare class ConfigService {
60
+ private readonly agentConfigService;
61
+ private configPath;
62
+ private config;
63
+ constructor(agentConfigService: AgentConfigService);
64
+ private getDefaultConfig;
65
+ /** 当前缺省智能体 id */
66
+ getDefaultAgentId(config?: AppConfig): string;
67
+ private loadConfig;
68
+ /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置) */
69
+ getConfig(): Promise<AppConfig>;
70
+ updateConfig(updates: Partial<AppConfig>): Promise<AppConfig>;
71
+ private saveConfig;
72
+ /** 支持的 provider 列表(来自 provider-support.json,供配置时下拉) */
73
+ getProviders(): Promise<string[]>;
74
+ /** 某 provider 下的可用模型(来自 provider-support);可按 type 筛选(llm/embedding/image/audio/video) */
75
+ getModels(provider: string, type?: string): Promise<{
76
+ id: string;
77
+ name: string;
78
+ types?: string[];
79
+ }[]>;
80
+ /** 完整 provider 目录(支持列表 + 各 provider 的模型),供前端一次拉取 */
81
+ getProviderSupport(): Promise<import("../../core/config/provider-support-default.js").ProviderSupport>;
82
+ }