@chrishdx/llm-dev-server 1.0.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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -0
  3. package/backend/bin/llm-dev-server.js +3 -0
  4. package/backend/dist/cli.d.ts +15 -0
  5. package/backend/dist/cli.d.ts.map +1 -0
  6. package/backend/dist/cli.js +326 -0
  7. package/backend/dist/cli.js.map +1 -0
  8. package/backend/dist/config/database.d.ts +10 -0
  9. package/backend/dist/config/database.d.ts.map +1 -0
  10. package/backend/dist/config/database.js +61 -0
  11. package/backend/dist/config/database.js.map +1 -0
  12. package/backend/dist/config/environment.d.ts +20 -0
  13. package/backend/dist/config/environment.d.ts.map +1 -0
  14. package/backend/dist/config/environment.js +77 -0
  15. package/backend/dist/config/environment.js.map +1 -0
  16. package/backend/dist/controllers/AuthController.d.ts +18 -0
  17. package/backend/dist/controllers/AuthController.d.ts.map +1 -0
  18. package/backend/dist/controllers/AuthController.js +282 -0
  19. package/backend/dist/controllers/AuthController.js.map +1 -0
  20. package/backend/dist/controllers/ConversationController.d.ts +44 -0
  21. package/backend/dist/controllers/ConversationController.d.ts.map +1 -0
  22. package/backend/dist/controllers/ConversationController.js +193 -0
  23. package/backend/dist/controllers/ConversationController.js.map +1 -0
  24. package/backend/dist/controllers/JobController.d.ts +49 -0
  25. package/backend/dist/controllers/JobController.d.ts.map +1 -0
  26. package/backend/dist/controllers/JobController.js +227 -0
  27. package/backend/dist/controllers/JobController.js.map +1 -0
  28. package/backend/dist/index.d.ts +2 -0
  29. package/backend/dist/index.d.ts.map +1 -0
  30. package/backend/dist/index.js +160 -0
  31. package/backend/dist/index.js.map +1 -0
  32. package/backend/dist/middleware/auth.middleware.d.ts +25 -0
  33. package/backend/dist/middleware/auth.middleware.d.ts.map +1 -0
  34. package/backend/dist/middleware/auth.middleware.js +116 -0
  35. package/backend/dist/middleware/auth.middleware.js.map +1 -0
  36. package/backend/dist/middleware/authelia.middleware.d.ts +26 -0
  37. package/backend/dist/middleware/authelia.middleware.d.ts.map +1 -0
  38. package/backend/dist/middleware/authelia.middleware.js +165 -0
  39. package/backend/dist/middleware/authelia.middleware.js.map +1 -0
  40. package/backend/dist/middleware/error.middleware.d.ts +23 -0
  41. package/backend/dist/middleware/error.middleware.d.ts.map +1 -0
  42. package/backend/dist/middleware/error.middleware.js +59 -0
  43. package/backend/dist/middleware/error.middleware.js.map +1 -0
  44. package/backend/dist/models/AuthToken.d.ts +42 -0
  45. package/backend/dist/models/AuthToken.d.ts.map +1 -0
  46. package/backend/dist/models/AuthToken.js +97 -0
  47. package/backend/dist/models/AuthToken.js.map +1 -0
  48. package/backend/dist/models/Conversation.d.ts +36 -0
  49. package/backend/dist/models/Conversation.d.ts.map +1 -0
  50. package/backend/dist/models/Conversation.js +100 -0
  51. package/backend/dist/models/Conversation.js.map +1 -0
  52. package/backend/dist/models/FileOperation.d.ts +36 -0
  53. package/backend/dist/models/FileOperation.d.ts.map +1 -0
  54. package/backend/dist/models/FileOperation.js +117 -0
  55. package/backend/dist/models/FileOperation.js.map +1 -0
  56. package/backend/dist/models/Job.d.ts +48 -0
  57. package/backend/dist/models/Job.d.ts.map +1 -0
  58. package/backend/dist/models/Job.js +87 -0
  59. package/backend/dist/models/Job.js.map +1 -0
  60. package/backend/dist/models/Message.d.ts +38 -0
  61. package/backend/dist/models/Message.d.ts.map +1 -0
  62. package/backend/dist/models/Message.js +87 -0
  63. package/backend/dist/models/Message.js.map +1 -0
  64. package/backend/dist/models/User.d.ts +26 -0
  65. package/backend/dist/models/User.d.ts.map +1 -0
  66. package/backend/dist/models/User.js +67 -0
  67. package/backend/dist/models/User.js.map +1 -0
  68. package/backend/dist/models/index.d.ts +13 -0
  69. package/backend/dist/models/index.d.ts.map +1 -0
  70. package/backend/dist/models/index.js +24 -0
  71. package/backend/dist/models/index.js.map +1 -0
  72. package/backend/dist/routes/auth.routes.d.ts +3 -0
  73. package/backend/dist/routes/auth.routes.d.ts.map +1 -0
  74. package/backend/dist/routes/auth.routes.js +27 -0
  75. package/backend/dist/routes/auth.routes.js.map +1 -0
  76. package/backend/dist/routes/conversation.routes.d.ts +3 -0
  77. package/backend/dist/routes/conversation.routes.d.ts.map +1 -0
  78. package/backend/dist/routes/conversation.routes.js +17 -0
  79. package/backend/dist/routes/conversation.routes.js.map +1 -0
  80. package/backend/dist/routes/filesystem.routes.d.ts +3 -0
  81. package/backend/dist/routes/filesystem.routes.d.ts.map +1 -0
  82. package/backend/dist/routes/filesystem.routes.js +64 -0
  83. package/backend/dist/routes/filesystem.routes.js.map +1 -0
  84. package/backend/dist/routes/index.d.ts +3 -0
  85. package/backend/dist/routes/index.d.ts.map +1 -0
  86. package/backend/dist/routes/index.js +27 -0
  87. package/backend/dist/routes/index.js.map +1 -0
  88. package/backend/dist/routes/job.routes.d.ts +3 -0
  89. package/backend/dist/routes/job.routes.d.ts.map +1 -0
  90. package/backend/dist/routes/job.routes.js +18 -0
  91. package/backend/dist/routes/job.routes.js.map +1 -0
  92. package/backend/dist/services/auth/BaseAuthService.d.ts +49 -0
  93. package/backend/dist/services/auth/BaseAuthService.d.ts.map +1 -0
  94. package/backend/dist/services/auth/BaseAuthService.js +97 -0
  95. package/backend/dist/services/auth/BaseAuthService.js.map +1 -0
  96. package/backend/dist/services/auth/ClaudeAuthService.d.ts +69 -0
  97. package/backend/dist/services/auth/ClaudeAuthService.d.ts.map +1 -0
  98. package/backend/dist/services/auth/ClaudeAuthService.js +401 -0
  99. package/backend/dist/services/auth/ClaudeAuthService.js.map +1 -0
  100. package/backend/dist/services/auth/CodexAuthService.d.ts +37 -0
  101. package/backend/dist/services/auth/CodexAuthService.d.ts.map +1 -0
  102. package/backend/dist/services/auth/CodexAuthService.js +186 -0
  103. package/backend/dist/services/auth/CodexAuthService.js.map +1 -0
  104. package/backend/dist/services/auth/GeminiAuthService.d.ts +50 -0
  105. package/backend/dist/services/auth/GeminiAuthService.d.ts.map +1 -0
  106. package/backend/dist/services/auth/GeminiAuthService.js +284 -0
  107. package/backend/dist/services/auth/GeminiAuthService.js.map +1 -0
  108. package/backend/dist/services/auth/JwtService.d.ts +27 -0
  109. package/backend/dist/services/auth/JwtService.d.ts.map +1 -0
  110. package/backend/dist/services/auth/JwtService.js +65 -0
  111. package/backend/dist/services/auth/JwtService.js.map +1 -0
  112. package/backend/dist/services/auth/TokenRefreshService.d.ts +36 -0
  113. package/backend/dist/services/auth/TokenRefreshService.d.ts.map +1 -0
  114. package/backend/dist/services/auth/TokenRefreshService.js +178 -0
  115. package/backend/dist/services/auth/TokenRefreshService.js.map +1 -0
  116. package/backend/dist/services/conversation/ConversationService.d.ts +89 -0
  117. package/backend/dist/services/conversation/ConversationService.d.ts.map +1 -0
  118. package/backend/dist/services/conversation/ConversationService.js +255 -0
  119. package/backend/dist/services/conversation/ConversationService.js.map +1 -0
  120. package/backend/dist/services/job/JobService.d.ts +83 -0
  121. package/backend/dist/services/job/JobService.d.ts.map +1 -0
  122. package/backend/dist/services/job/JobService.js +213 -0
  123. package/backend/dist/services/job/JobService.js.map +1 -0
  124. package/backend/dist/services/job/WorkingDirectoryService.d.ts +73 -0
  125. package/backend/dist/services/job/WorkingDirectoryService.d.ts.map +1 -0
  126. package/backend/dist/services/job/WorkingDirectoryService.js +289 -0
  127. package/backend/dist/services/job/WorkingDirectoryService.js.map +1 -0
  128. package/backend/dist/services/llm/ClaudeProvider.d.ts +16 -0
  129. package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -0
  130. package/backend/dist/services/llm/ClaudeProvider.js +229 -0
  131. package/backend/dist/services/llm/ClaudeProvider.js.map +1 -0
  132. package/backend/dist/services/llm/CodexProvider.d.ts +15 -0
  133. package/backend/dist/services/llm/CodexProvider.d.ts.map +1 -0
  134. package/backend/dist/services/llm/CodexProvider.js +301 -0
  135. package/backend/dist/services/llm/CodexProvider.js.map +1 -0
  136. package/backend/dist/services/llm/GeminiProvider.d.ts +17 -0
  137. package/backend/dist/services/llm/GeminiProvider.d.ts.map +1 -0
  138. package/backend/dist/services/llm/GeminiProvider.js +190 -0
  139. package/backend/dist/services/llm/GeminiProvider.js.map +1 -0
  140. package/backend/dist/services/llm/LLMProviderBase.d.ts +76 -0
  141. package/backend/dist/services/llm/LLMProviderBase.d.ts.map +1 -0
  142. package/backend/dist/services/llm/LLMProviderBase.js +34 -0
  143. package/backend/dist/services/llm/LLMProviderBase.js.map +1 -0
  144. package/backend/dist/services/llm/ProviderFactory.d.ts +17 -0
  145. package/backend/dist/services/llm/ProviderFactory.d.ts.map +1 -0
  146. package/backend/dist/services/llm/ProviderFactory.js +58 -0
  147. package/backend/dist/services/llm/ProviderFactory.js.map +1 -0
  148. package/backend/dist/utils/crypto.d.ts +33 -0
  149. package/backend/dist/utils/crypto.d.ts.map +1 -0
  150. package/backend/dist/utils/crypto.js +165 -0
  151. package/backend/dist/utils/crypto.js.map +1 -0
  152. package/backend/dist/utils/logger.d.ts +4 -0
  153. package/backend/dist/utils/logger.d.ts.map +1 -0
  154. package/backend/dist/utils/logger.js +44 -0
  155. package/backend/dist/utils/logger.js.map +1 -0
  156. package/backend/dist/utils/validators.d.ts +22 -0
  157. package/backend/dist/utils/validators.d.ts.map +1 -0
  158. package/backend/dist/utils/validators.js +127 -0
  159. package/backend/dist/utils/validators.js.map +1 -0
  160. package/backend/package.json +45 -0
  161. package/backend/public/assets/index-C207-KqP.js +188 -0
  162. package/backend/public/index.html +12 -0
  163. package/package.json +96 -0
  164. package/shared/dist/index.d.ts +5 -0
  165. package/shared/dist/index.d.ts.map +1 -0
  166. package/shared/dist/index.js +25 -0
  167. package/shared/dist/index.js.map +1 -0
  168. package/shared/dist/types/api.d.ts +27 -0
  169. package/shared/dist/types/api.d.ts.map +1 -0
  170. package/shared/dist/types/api.js +3 -0
  171. package/shared/dist/types/api.js.map +1 -0
  172. package/shared/dist/types/auth.d.ts +62 -0
  173. package/shared/dist/types/auth.d.ts.map +1 -0
  174. package/shared/dist/types/auth.js +3 -0
  175. package/shared/dist/types/auth.js.map +1 -0
  176. package/shared/dist/types/conversation.d.ts +98 -0
  177. package/shared/dist/types/conversation.d.ts.map +1 -0
  178. package/shared/dist/types/conversation.js +3 -0
  179. package/shared/dist/types/conversation.js.map +1 -0
  180. package/shared/dist/types/job.d.ts +93 -0
  181. package/shared/dist/types/job.d.ts.map +1 -0
  182. package/shared/dist/types/job.js +3 -0
  183. package/shared/dist/types/job.js.map +1 -0
  184. package/shared/package.json +15 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileOperation = void 0;
7
+ const sequelize_1 = require("sequelize");
8
+ const database_1 = require("../config/database");
9
+ const Job_1 = __importDefault(require("./Job"));
10
+ const Conversation_1 = __importDefault(require("./Conversation"));
11
+ class FileOperation extends sequelize_1.Model {
12
+ }
13
+ exports.FileOperation = FileOperation;
14
+ FileOperation.init({
15
+ id: {
16
+ type: sequelize_1.DataTypes.UUID,
17
+ defaultValue: sequelize_1.DataTypes.UUIDV4,
18
+ primaryKey: true,
19
+ },
20
+ jobId: {
21
+ type: sequelize_1.DataTypes.UUID,
22
+ allowNull: false,
23
+ references: {
24
+ model: 'jobs',
25
+ key: 'id',
26
+ },
27
+ onDelete: 'CASCADE',
28
+ },
29
+ conversationId: {
30
+ type: sequelize_1.DataTypes.UUID,
31
+ allowNull: true,
32
+ references: {
33
+ model: 'conversations',
34
+ key: 'id',
35
+ },
36
+ onDelete: 'SET NULL',
37
+ },
38
+ operation: {
39
+ type: sequelize_1.DataTypes.ENUM('read', 'write', 'edit', 'delete', 'create'),
40
+ allowNull: false,
41
+ },
42
+ filePath: {
43
+ type: sequelize_1.DataTypes.STRING,
44
+ allowNull: false,
45
+ },
46
+ relativeFilePath: {
47
+ type: sequelize_1.DataTypes.STRING,
48
+ allowNull: true,
49
+ },
50
+ contentBefore: {
51
+ type: sequelize_1.DataTypes.TEXT,
52
+ allowNull: true,
53
+ },
54
+ contentAfter: {
55
+ type: sequelize_1.DataTypes.TEXT,
56
+ allowNull: true,
57
+ },
58
+ fileSize: {
59
+ type: sequelize_1.DataTypes.INTEGER,
60
+ allowNull: true,
61
+ },
62
+ mimeType: {
63
+ type: sequelize_1.DataTypes.STRING,
64
+ allowNull: true,
65
+ },
66
+ success: {
67
+ type: sequelize_1.DataTypes.BOOLEAN,
68
+ allowNull: false,
69
+ defaultValue: true,
70
+ },
71
+ errorMessage: {
72
+ type: sequelize_1.DataTypes.TEXT,
73
+ allowNull: true,
74
+ },
75
+ createdAt: {
76
+ type: sequelize_1.DataTypes.DATE,
77
+ allowNull: false,
78
+ },
79
+ }, {
80
+ sequelize: database_1.database.sequelize,
81
+ tableName: 'file_operations',
82
+ timestamps: true,
83
+ updatedAt: false,
84
+ indexes: [
85
+ {
86
+ fields: ['jobId'],
87
+ },
88
+ {
89
+ fields: ['conversationId'],
90
+ },
91
+ {
92
+ fields: ['operation'],
93
+ },
94
+ {
95
+ fields: ['filePath'],
96
+ },
97
+ ],
98
+ });
99
+ // Define associations
100
+ FileOperation.belongsTo(Job_1.default, {
101
+ foreignKey: 'jobId',
102
+ as: 'job',
103
+ });
104
+ FileOperation.belongsTo(Conversation_1.default, {
105
+ foreignKey: 'conversationId',
106
+ as: 'conversation',
107
+ });
108
+ Job_1.default.hasMany(FileOperation, {
109
+ foreignKey: 'jobId',
110
+ as: 'fileOperations',
111
+ });
112
+ Conversation_1.default.hasMany(FileOperation, {
113
+ foreignKey: 'conversationId',
114
+ as: 'fileOperations',
115
+ });
116
+ exports.default = FileOperation;
117
+ //# sourceMappingURL=FileOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileOperation.js","sourceRoot":"","sources":["../../src/models/FileOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { Model, Optional } from "sequelize";
2
+ export type JobStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
3
+ export interface JobAttributes {
4
+ id: string;
5
+ name: string;
6
+ description?: string;
7
+ status: JobStatus;
8
+ workingDirectory: string;
9
+ systemPrompt?: string;
10
+ maxBudgetUsd?: number;
11
+ startedAt?: Date;
12
+ completedAt?: Date;
13
+ errorMessage?: string;
14
+ conversationCount: number;
15
+ messageCount: number;
16
+ tokenUsage?: {
17
+ input: number;
18
+ output: number;
19
+ total: number;
20
+ };
21
+ createdAt: Date;
22
+ updatedAt: Date;
23
+ }
24
+ export interface JobCreationAttributes extends Optional<JobAttributes, "id" | "description" | "status" | "systemPrompt" | "maxBudgetUsd" | "startedAt" | "completedAt" | "errorMessage" | "conversationCount" | "messageCount" | "tokenUsage" | "createdAt" | "updatedAt"> {
25
+ }
26
+ export declare class Job extends Model<JobAttributes, JobCreationAttributes> implements JobAttributes {
27
+ id: string;
28
+ name: string;
29
+ description?: string;
30
+ status: JobStatus;
31
+ workingDirectory: string;
32
+ systemPrompt?: string;
33
+ maxBudgetUsd?: number;
34
+ startedAt?: Date;
35
+ completedAt?: Date;
36
+ errorMessage?: string;
37
+ conversationCount: number;
38
+ messageCount: number;
39
+ tokenUsage?: {
40
+ input: number;
41
+ output: number;
42
+ total: number;
43
+ };
44
+ createdAt: Date;
45
+ updatedAt: Date;
46
+ }
47
+ export default Job;
48
+ //# sourceMappingURL=Job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../../src/models/Job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGvD,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBACf,SAAQ,QAAQ,CACd,aAAa,EACX,IAAI,GACJ,aAAa,GACb,QAAQ,GACR,cAAc,GACd,cAAc,GACd,WAAW,GACX,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,YAAY,GACZ,WAAW,GACX,WAAW,CACd;CAAG;AAEN,qBAAa,GACX,SAAQ,KAAK,CAAC,aAAa,EAAE,qBAAqB,CAClD,YAAW,aAAa;IAEhB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACM,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACzB;AAyFD,eAAe,GAAG,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Job = void 0;
4
+ const sequelize_1 = require("sequelize");
5
+ const database_1 = require("../config/database");
6
+ class Job extends sequelize_1.Model {
7
+ }
8
+ exports.Job = Job;
9
+ Job.init({
10
+ id: {
11
+ type: sequelize_1.DataTypes.UUID,
12
+ defaultValue: sequelize_1.DataTypes.UUIDV4,
13
+ primaryKey: true,
14
+ },
15
+ name: {
16
+ type: sequelize_1.DataTypes.STRING,
17
+ allowNull: false,
18
+ },
19
+ description: {
20
+ type: sequelize_1.DataTypes.TEXT,
21
+ allowNull: true,
22
+ },
23
+ status: {
24
+ type: sequelize_1.DataTypes.ENUM("pending", "running", "completed", "failed", "cancelled"),
25
+ allowNull: false,
26
+ defaultValue: "pending",
27
+ },
28
+ workingDirectory: {
29
+ type: sequelize_1.DataTypes.STRING,
30
+ allowNull: false,
31
+ },
32
+ systemPrompt: {
33
+ type: sequelize_1.DataTypes.TEXT,
34
+ allowNull: true,
35
+ },
36
+ maxBudgetUsd: {
37
+ type: sequelize_1.DataTypes.FLOAT,
38
+ allowNull: true,
39
+ },
40
+ startedAt: {
41
+ type: sequelize_1.DataTypes.DATE,
42
+ allowNull: true,
43
+ },
44
+ completedAt: {
45
+ type: sequelize_1.DataTypes.DATE,
46
+ allowNull: true,
47
+ },
48
+ errorMessage: {
49
+ type: sequelize_1.DataTypes.TEXT,
50
+ allowNull: true,
51
+ },
52
+ conversationCount: {
53
+ type: sequelize_1.DataTypes.INTEGER,
54
+ allowNull: false,
55
+ defaultValue: 0,
56
+ },
57
+ messageCount: {
58
+ type: sequelize_1.DataTypes.INTEGER,
59
+ allowNull: false,
60
+ defaultValue: 0,
61
+ },
62
+ tokenUsage: {
63
+ type: sequelize_1.DataTypes.JSON,
64
+ allowNull: true,
65
+ },
66
+ createdAt: {
67
+ type: sequelize_1.DataTypes.DATE,
68
+ allowNull: false,
69
+ },
70
+ updatedAt: {
71
+ type: sequelize_1.DataTypes.DATE,
72
+ allowNull: false,
73
+ },
74
+ }, {
75
+ sequelize: database_1.database.sequelize,
76
+ tableName: "jobs",
77
+ indexes: [
78
+ {
79
+ fields: ["status"],
80
+ },
81
+ {
82
+ fields: ["workingDirectory"],
83
+ },
84
+ ],
85
+ });
86
+ exports.default = Job;
87
+ //# sourceMappingURL=Job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Job.js","sourceRoot":"","sources":["../../src/models/Job.ts"],"names":[],"mappings":";;;AAAA,yCAAuD;AACvD,iDAA8C;AAiD9C,MAAa,GACX,SAAQ,iBAA2C;CAsBpD;AAvBD,kBAuBC;AAED,GAAG,CAAC,IAAI,CACN;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,YAAY,EAAE,qBAAS,CAAC,MAAM;QAC9B,UAAU,EAAE,IAAI;KACjB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;KACjB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,IAAI,CAClB,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,CACZ;QACD,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,SAAS;KACxB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,SAAS,EAAE,IAAI;KAChB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,CAAC;KAChB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,CAAC;KAChB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;CACF,EACD;IACE,SAAS,EAAE,mBAAQ,CAAC,SAAS;IAC7B,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE;QACP;YACE,MAAM,EAAE,CAAC,QAAQ,CAAC;SACnB;QACD;YACE,MAAM,EAAE,CAAC,kBAAkB,CAAC;SAC7B;KACF;CACF,CACF,CAAC;AAEF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Model, Optional } from 'sequelize';
2
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
3
+ export interface MessageAttributes {
4
+ id: string;
5
+ conversationId: string;
6
+ role: MessageRole;
7
+ content: string;
8
+ toolCalls?: any;
9
+ toolCallId?: string;
10
+ model?: string;
11
+ tokenUsage?: {
12
+ input: number;
13
+ output: number;
14
+ total: number;
15
+ };
16
+ attachments?: any;
17
+ createdAt: Date;
18
+ }
19
+ export interface MessageCreationAttributes extends Optional<MessageAttributes, 'id' | 'toolCalls' | 'toolCallId' | 'model' | 'tokenUsage' | 'attachments' | 'createdAt'> {
20
+ }
21
+ export declare class Message extends Model<MessageAttributes, MessageCreationAttributes> implements MessageAttributes {
22
+ id: string;
23
+ conversationId: string;
24
+ role: MessageRole;
25
+ content: string;
26
+ toolCalls?: any;
27
+ toolCallId?: string;
28
+ model?: string;
29
+ tokenUsage?: {
30
+ input: number;
31
+ output: number;
32
+ total: number;
33
+ };
34
+ attachments?: any;
35
+ createdAt: Date;
36
+ }
37
+ export default Message;
38
+ //# sourceMappingURL=Message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIvD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,yBACf,SAAQ,QAAQ,CACd,iBAAiB,EACjB,IAAI,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,CACzF;CAAG;AAEN,qBAAa,OACX,SAAQ,KAAK,CAAC,iBAAiB,EAAE,yBAAyB,CAC1D,YAAW,iBAAiB;IAEpB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACM,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACzB;AAiFD,eAAe,OAAO,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Message = void 0;
7
+ const sequelize_1 = require("sequelize");
8
+ const database_1 = require("../config/database");
9
+ const Conversation_1 = __importDefault(require("./Conversation"));
10
+ class Message extends sequelize_1.Model {
11
+ }
12
+ exports.Message = Message;
13
+ Message.init({
14
+ id: {
15
+ type: sequelize_1.DataTypes.UUID,
16
+ defaultValue: sequelize_1.DataTypes.UUIDV4,
17
+ primaryKey: true,
18
+ },
19
+ conversationId: {
20
+ type: sequelize_1.DataTypes.UUID,
21
+ allowNull: false,
22
+ references: {
23
+ model: 'conversations',
24
+ key: 'id',
25
+ },
26
+ onDelete: 'CASCADE',
27
+ },
28
+ role: {
29
+ type: sequelize_1.DataTypes.ENUM('system', 'user', 'assistant', 'tool'),
30
+ allowNull: false,
31
+ },
32
+ content: {
33
+ type: sequelize_1.DataTypes.TEXT,
34
+ allowNull: false,
35
+ },
36
+ toolCalls: {
37
+ type: sequelize_1.DataTypes.JSON,
38
+ allowNull: true,
39
+ },
40
+ toolCallId: {
41
+ type: sequelize_1.DataTypes.STRING,
42
+ allowNull: true,
43
+ },
44
+ model: {
45
+ type: sequelize_1.DataTypes.STRING,
46
+ allowNull: true,
47
+ },
48
+ tokenUsage: {
49
+ type: sequelize_1.DataTypes.JSON,
50
+ allowNull: true,
51
+ },
52
+ attachments: {
53
+ type: sequelize_1.DataTypes.JSON,
54
+ allowNull: true,
55
+ },
56
+ createdAt: {
57
+ type: sequelize_1.DataTypes.DATE,
58
+ allowNull: false,
59
+ },
60
+ }, {
61
+ sequelize: database_1.database.sequelize,
62
+ tableName: 'messages',
63
+ timestamps: true,
64
+ updatedAt: false,
65
+ indexes: [
66
+ {
67
+ fields: ['conversationId'],
68
+ },
69
+ {
70
+ fields: ['createdAt'],
71
+ },
72
+ {
73
+ fields: ['conversationId', 'createdAt'],
74
+ },
75
+ ],
76
+ });
77
+ // Define associations
78
+ Message.belongsTo(Conversation_1.default, {
79
+ foreignKey: 'conversationId',
80
+ as: 'conversation',
81
+ });
82
+ Conversation_1.default.hasMany(Message, {
83
+ foreignKey: 'conversationId',
84
+ as: 'messages',
85
+ });
86
+ exports.default = Message;
87
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/models/Message.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAuD;AACvD,iDAA8C;AAC9C,kEAA0C;AA2B1C,MAAa,OACX,SAAQ,iBAAmD;CAiB5D;AAlBD,0BAkBC;AAED,OAAO,CAAC,IAAI,CACV;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,YAAY,EAAE,qBAAS,CAAC,MAAM;QAC9B,UAAU,EAAE,IAAI;KACjB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE;YACV,KAAK,EAAE,eAAe;YACtB,GAAG,EAAE,IAAI;SACV;QACD,QAAQ,EAAE,SAAS;KACpB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;QAC3D,SAAS,EAAE,KAAK;KACjB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;KAChB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;KAChB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;CACF,EACD;IACE,SAAS,EAAE,mBAAQ,CAAC,SAAS;IAC7B,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE;QACP;YACE,MAAM,EAAE,CAAC,gBAAgB,CAAC;SAC3B;QACD;YACE,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB;QACD;YACE,MAAM,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC;SACxC;KACF;CACF,CACF,CAAC;AAEF,sBAAsB;AACtB,OAAO,CAAC,SAAS,CAAC,sBAAY,EAAE;IAC9B,UAAU,EAAE,gBAAgB;IAC5B,EAAE,EAAE,cAAc;CACnB,CAAC,CAAC;AAEH,sBAAY,CAAC,OAAO,CAAC,OAAO,EAAE;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,EAAE,EAAE,UAAU;CACf,CAAC,CAAC;AAEH,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Model, Optional } from "sequelize";
2
+ export type AuthProvider = "local" | "authelia";
3
+ export interface UserAttributes {
4
+ id: string;
5
+ username: string;
6
+ passwordHash: string | null;
7
+ email: string | null;
8
+ role: "admin" | "user";
9
+ authProvider: AuthProvider;
10
+ createdAt: Date;
11
+ updatedAt: Date;
12
+ }
13
+ export interface UserCreationAttributes extends Optional<UserAttributes, "id" | "role" | "authProvider" | "email" | "passwordHash" | "createdAt" | "updatedAt"> {
14
+ }
15
+ export declare class User extends Model<UserAttributes, UserCreationAttributes> implements UserAttributes {
16
+ id: string;
17
+ username: string;
18
+ passwordHash: string | null;
19
+ email: string | null;
20
+ role: "admin" | "user";
21
+ authProvider: AuthProvider;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ }
25
+ export default User;
26
+ //# sourceMappingURL=User.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGvD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,sBACf,SAAQ,QAAQ,CACd,cAAc,EACZ,IAAI,GACJ,MAAM,GACN,cAAc,GACd,OAAO,GACP,cAAc,GACd,WAAW,GACX,WAAW,CACd;CAAG;AAEN,qBAAa,IACX,SAAQ,KAAK,CAAC,cAAc,EAAE,sBAAsB,CACpD,YAAW,cAAc;IAEjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACzB;AA+DD,eAAe,IAAI,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.User = void 0;
4
+ const sequelize_1 = require("sequelize");
5
+ const database_1 = require("../config/database");
6
+ class User extends sequelize_1.Model {
7
+ }
8
+ exports.User = User;
9
+ User.init({
10
+ id: {
11
+ type: sequelize_1.DataTypes.UUID,
12
+ defaultValue: sequelize_1.DataTypes.UUIDV4,
13
+ primaryKey: true,
14
+ },
15
+ username: {
16
+ type: sequelize_1.DataTypes.STRING,
17
+ allowNull: false,
18
+ unique: true,
19
+ validate: {
20
+ len: [3, 30],
21
+ isAlphanumeric: true,
22
+ },
23
+ },
24
+ passwordHash: {
25
+ type: sequelize_1.DataTypes.STRING,
26
+ allowNull: true, // Optional for Authelia users
27
+ },
28
+ email: {
29
+ type: sequelize_1.DataTypes.STRING,
30
+ allowNull: true,
31
+ validate: {
32
+ isEmail: true,
33
+ },
34
+ },
35
+ role: {
36
+ type: sequelize_1.DataTypes.ENUM("admin", "user"),
37
+ allowNull: false,
38
+ defaultValue: "user",
39
+ },
40
+ authProvider: {
41
+ type: sequelize_1.DataTypes.ENUM("local", "authelia"),
42
+ allowNull: false,
43
+ defaultValue: "local",
44
+ },
45
+ createdAt: {
46
+ type: sequelize_1.DataTypes.DATE,
47
+ allowNull: false,
48
+ },
49
+ updatedAt: {
50
+ type: sequelize_1.DataTypes.DATE,
51
+ allowNull: false,
52
+ },
53
+ }, {
54
+ sequelize: database_1.database.sequelize,
55
+ tableName: "users",
56
+ indexes: [
57
+ {
58
+ unique: true,
59
+ fields: ["username"],
60
+ },
61
+ {
62
+ fields: ["email"],
63
+ },
64
+ ],
65
+ });
66
+ exports.default = User;
67
+ //# sourceMappingURL=User.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":";;;AAAA,yCAAuD;AACvD,iDAA8C;AA2B9C,MAAa,IACX,SAAQ,iBAA6C;CAWtD;AAZD,oBAYC;AAED,IAAI,CAAC,IAAI,CACP;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,YAAY,EAAE,qBAAS,CAAC,MAAM;QAC9B,UAAU,EAAE,IAAI;KACjB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE;YACR,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YACZ,cAAc,EAAE,IAAI;SACrB;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI,EAAE,8BAA8B;KAChD;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;SACd;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,MAAM;KACrB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,OAAO;KACtB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK;KACjB;CACF,EACD;IACE,SAAS,EAAE,mBAAQ,CAAC,SAAS;IAC7B,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE;QACP;YACE,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB;QACD;YACE,MAAM,EAAE,CAAC,OAAO,CAAC;SAClB;KACF;CACF,CACF,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { User } from './User';
2
+ export { AuthToken, LLMProvider } from './AuthToken';
3
+ export { Job, JobStatus } from './Job';
4
+ export { Conversation } from './Conversation';
5
+ export { Message, MessageRole } from './Message';
6
+ export { FileOperation, FileOperationType } from './FileOperation';
7
+ import './User';
8
+ import './AuthToken';
9
+ import './Job';
10
+ import './Conversation';
11
+ import './Message';
12
+ import './FileOperation';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,QAAQ,CAAC;AAChB,OAAO,aAAa,CAAC;AACrB,OAAO,OAAO,CAAC;AACf,OAAO,gBAAgB,CAAC;AACxB,OAAO,WAAW,CAAC;AACnB,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileOperation = exports.Message = exports.Conversation = exports.Job = exports.AuthToken = exports.User = void 0;
4
+ // Export all models
5
+ var User_1 = require("./User");
6
+ Object.defineProperty(exports, "User", { enumerable: true, get: function () { return User_1.User; } });
7
+ var AuthToken_1 = require("./AuthToken");
8
+ Object.defineProperty(exports, "AuthToken", { enumerable: true, get: function () { return AuthToken_1.AuthToken; } });
9
+ var Job_1 = require("./Job");
10
+ Object.defineProperty(exports, "Job", { enumerable: true, get: function () { return Job_1.Job; } });
11
+ var Conversation_1 = require("./Conversation");
12
+ Object.defineProperty(exports, "Conversation", { enumerable: true, get: function () { return Conversation_1.Conversation; } });
13
+ var Message_1 = require("./Message");
14
+ Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return Message_1.Message; } });
15
+ var FileOperation_1 = require("./FileOperation");
16
+ Object.defineProperty(exports, "FileOperation", { enumerable: true, get: function () { return FileOperation_1.FileOperation; } });
17
+ // Import to ensure associations are set up
18
+ require("./User");
19
+ require("./AuthToken");
20
+ require("./Job");
21
+ require("./Conversation");
22
+ require("./Message");
23
+ require("./FileOperation");
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;AAAA,oBAAoB;AACpB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,yCAAqD;AAA5C,sGAAA,SAAS,OAAA;AAClB,6BAAuC;AAA9B,0FAAA,GAAG,OAAA;AACZ,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,qCAAiD;AAAxC,kGAAA,OAAO,OAAA;AAChB,iDAAmE;AAA1D,8GAAA,aAAa,OAAA;AAEtB,2CAA2C;AAC3C,kBAAgB;AAChB,uBAAqB;AACrB,iBAAe;AACf,0BAAwB;AACxB,qBAAmB;AACnB,2BAAyB"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=auth.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.routes.d.ts","sourceRoot":"","sources":["../../src/routes/auth.routes.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA+BxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const AuthController_1 = require("../controllers/AuthController");
5
+ const auth_middleware_1 = require("../middleware/auth.middleware");
6
+ const router = (0, express_1.Router)();
7
+ // User auth - registration requires admin privileges
8
+ router.post("/register", auth_middleware_1.authMiddleware, auth_middleware_1.adminMiddleware, AuthController_1.AuthController.register);
9
+ router.post("/login", AuthController_1.AuthController.login);
10
+ router.get("/me", auth_middleware_1.authMiddleware, AuthController_1.AuthController.me);
11
+ // Claude OAuth - Manual Code Entry (like Gemini)
12
+ router.post("/claude/login/start", AuthController_1.AuthController.claudeManualLoginStart);
13
+ router.post("/claude/login/complete", AuthController_1.AuthController.claudeManualLoginComplete);
14
+ router.get("/claude/status", AuthController_1.AuthController.claudeStatus);
15
+ // OLD: Keep for backward compatibility (can be removed later)
16
+ // router.get('/claude/login', AuthController.claudeLoginRedirect);
17
+ // router.get('/claude/callback', AuthController.claudeCallback);
18
+ // Codex Device Auth (funktioniert bereits remote)
19
+ router.post("/codex/login/start", AuthController_1.AuthController.codexLoginStart);
20
+ router.post("/codex/login/poll", AuthController_1.AuthController.codexLoginPoll);
21
+ router.get("/codex/status", AuthController_1.AuthController.codexStatus);
22
+ // Gemini OAuth - mit Manual Code Flow (wie Codex)
23
+ router.post("/gemini/login/start", AuthController_1.AuthController.geminiLoginStart);
24
+ router.post("/gemini/login/complete", AuthController_1.AuthController.geminiLoginComplete);
25
+ router.get("/gemini/status", AuthController_1.AuthController.geminiStatus);
26
+ exports.default = router;
27
+ //# sourceMappingURL=auth.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.routes.js","sourceRoot":"","sources":["../../src/routes/auth.routes.ts"],"names":[],"mappings":";;AAAA,qCAAiC;AACjC,kEAA+D;AAC/D,mEAAgF;AAEhF,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,qDAAqD;AACrD,MAAM,CAAC,IAAI,CACT,WAAW,EACX,gCAAc,EACd,iCAAe,EACf,+BAAc,CAAC,QAAQ,CACxB,CAAC;AACF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAAc,CAAC,KAAK,CAAC,CAAC;AAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,gCAAc,EAAE,+BAAc,CAAC,EAAE,CAAC,CAAC;AAErD,iDAAiD;AACjD,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,+BAAc,CAAC,sBAAsB,CAAC,CAAC;AAC1E,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,+BAAc,CAAC,yBAAyB,CAAC,CAAC;AAChF,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,+BAAc,CAAC,YAAY,CAAC,CAAC;AAE1D,8DAA8D;AAC9D,mEAAmE;AACnE,iEAAiE;AAEjE,kDAAkD;AAClD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,+BAAc,CAAC,eAAe,CAAC,CAAC;AAClE,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,+BAAc,CAAC,cAAc,CAAC,CAAC;AAChE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,+BAAc,CAAC,WAAW,CAAC,CAAC;AAExD,kDAAkD;AAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,+BAAc,CAAC,gBAAgB,CAAC,CAAC;AACpE,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,+BAAc,CAAC,mBAAmB,CAAC,CAAC;AAC1E,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,+BAAc,CAAC,YAAY,CAAC,CAAC;AAE1D,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=conversation.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.routes.d.ts","sourceRoot":"","sources":["../../src/routes/conversation.routes.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAYxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const ConversationController_1 = require("../controllers/ConversationController");
5
+ const auth_middleware_1 = require("../middleware/auth.middleware");
6
+ const router = (0, express_1.Router)();
7
+ router.use(auth_middleware_1.authMiddleware);
8
+ router.get("/providers", ConversationController_1.ConversationController.getProviders);
9
+ router.post("/", ConversationController_1.ConversationController.create);
10
+ router.get("/:conversationId", ConversationController_1.ConversationController.get);
11
+ router.patch("/:conversationId", ConversationController_1.ConversationController.update);
12
+ router.get("/:conversationId/messages", ConversationController_1.ConversationController.getMessages);
13
+ router.post("/:conversationId/messages", ConversationController_1.ConversationController.sendMessage);
14
+ router.get("/:conversationId/stream", ConversationController_1.ConversationController.stream);
15
+ router.delete("/:conversationId", ConversationController_1.ConversationController.delete);
16
+ exports.default = router;
17
+ //# sourceMappingURL=conversation.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.routes.js","sourceRoot":"","sources":["../../src/routes/conversation.routes.ts"],"names":[],"mappings":";;AAAA,qCAAiC;AACjC,kFAA+E;AAC/E,mEAA+D;AAE/D,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AACxB,MAAM,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;AAE3B,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,+CAAsB,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,+CAAsB,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,+CAAsB,CAAC,GAAG,CAAC,CAAC;AAC3D,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,+CAAsB,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,+CAAsB,CAAC,WAAW,CAAC,CAAC;AAC5E,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,+CAAsB,CAAC,WAAW,CAAC,CAAC;AAC7E,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,+CAAsB,CAAC,MAAM,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,+CAAsB,CAAC,MAAM,CAAC,CAAC;AAEjE,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=filesystem.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.routes.d.ts","sourceRoot":"","sources":["../../src/routes/filesystem.routes.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA8DxB,eAAe,MAAM,CAAC"}