@denispro2006/duke-ai-kernel 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 (120) hide show
  1. package/README.md +81 -0
  2. package/config/prompts/default.txt +1 -0
  3. package/config/routing.json +24 -0
  4. package/dist/api/routes.d.ts +3 -0
  5. package/dist/api/routes.d.ts.map +1 -0
  6. package/dist/api/routes.js +114 -0
  7. package/dist/api/routes.js.map +1 -0
  8. package/dist/app.d.ts +7 -0
  9. package/dist/app.d.ts.map +1 -0
  10. package/dist/app.js +21 -0
  11. package/dist/app.js.map +1 -0
  12. package/dist/config/index.d.ts +50 -0
  13. package/dist/config/index.d.ts.map +1 -0
  14. package/dist/config/index.js +86 -0
  15. package/dist/config/index.js.map +1 -0
  16. package/dist/context/context-manager.d.ts +30 -0
  17. package/dist/context/context-manager.d.ts.map +1 -0
  18. package/dist/context/context-manager.js +77 -0
  19. package/dist/context/context-manager.js.map +1 -0
  20. package/dist/controllers/ai.controller.d.ts +3 -0
  21. package/dist/controllers/ai.controller.d.ts.map +1 -0
  22. package/dist/controllers/ai.controller.js +20 -0
  23. package/dist/controllers/ai.controller.js.map +1 -0
  24. package/dist/controllers/message.controller.d.ts +4 -0
  25. package/dist/controllers/message.controller.d.ts.map +1 -0
  26. package/dist/controllers/message.controller.js +28 -0
  27. package/dist/controllers/message.controller.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +31 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/kernel/index.d.ts +17 -0
  33. package/dist/kernel/index.d.ts.map +1 -0
  34. package/dist/kernel/index.js +134 -0
  35. package/dist/kernel/index.js.map +1 -0
  36. package/dist/lib/logger.d.ts +3 -0
  37. package/dist/lib/logger.d.ts.map +1 -0
  38. package/dist/lib/logger.js +15 -0
  39. package/dist/lib/logger.js.map +1 -0
  40. package/dist/middleware/auth.middleware.d.ts +3 -0
  41. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  42. package/dist/middleware/auth.middleware.js +24 -0
  43. package/dist/middleware/auth.middleware.js.map +1 -0
  44. package/dist/middleware/error.middleware.d.ts +6 -0
  45. package/dist/middleware/error.middleware.d.ts.map +1 -0
  46. package/dist/middleware/error.middleware.js +16 -0
  47. package/dist/middleware/error.middleware.js.map +1 -0
  48. package/dist/models/Message.d.ts +10 -0
  49. package/dist/models/Message.d.ts.map +1 -0
  50. package/dist/models/Message.js +3 -0
  51. package/dist/models/Message.js.map +1 -0
  52. package/dist/models/User.d.ts +7 -0
  53. package/dist/models/User.d.ts.map +1 -0
  54. package/dist/models/User.js +3 -0
  55. package/dist/models/User.js.map +1 -0
  56. package/dist/plugins/index.d.ts +10 -0
  57. package/dist/plugins/index.d.ts.map +1 -0
  58. package/dist/plugins/index.js +74 -0
  59. package/dist/plugins/index.js.map +1 -0
  60. package/dist/providers/anthropic.d.ts +3 -0
  61. package/dist/providers/anthropic.d.ts.map +1 -0
  62. package/dist/providers/anthropic.js +65 -0
  63. package/dist/providers/anthropic.js.map +1 -0
  64. package/dist/providers/index.d.ts +8 -0
  65. package/dist/providers/index.d.ts.map +1 -0
  66. package/dist/providers/index.js +38 -0
  67. package/dist/providers/index.js.map +1 -0
  68. package/dist/providers/ollama.d.ts +3 -0
  69. package/dist/providers/ollama.d.ts.map +1 -0
  70. package/dist/providers/ollama.js +77 -0
  71. package/dist/providers/ollama.js.map +1 -0
  72. package/dist/providers/openai.d.ts +3 -0
  73. package/dist/providers/openai.d.ts.map +1 -0
  74. package/dist/providers/openai.js +63 -0
  75. package/dist/providers/openai.js.map +1 -0
  76. package/dist/router/index.d.ts +13 -0
  77. package/dist/router/index.d.ts.map +1 -0
  78. package/dist/router/index.js +70 -0
  79. package/dist/router/index.js.map +1 -0
  80. package/dist/routes/ai.routes.d.ts +3 -0
  81. package/dist/routes/ai.routes.d.ts.map +1 -0
  82. package/dist/routes/ai.routes.js +9 -0
  83. package/dist/routes/ai.routes.js.map +1 -0
  84. package/dist/routes/index.d.ts +2 -0
  85. package/dist/routes/index.d.ts.map +1 -0
  86. package/dist/routes/index.js +6 -0
  87. package/dist/routes/index.js.map +1 -0
  88. package/dist/services/ai.service.d.ts +4 -0
  89. package/dist/services/ai.service.d.ts.map +1 -0
  90. package/dist/services/ai.service.js +28 -0
  91. package/dist/services/ai.service.js.map +1 -0
  92. package/dist/services/db.service.d.ts +3 -0
  93. package/dist/services/db.service.d.ts.map +1 -0
  94. package/dist/services/db.service.js +60 -0
  95. package/dist/services/db.service.js.map +1 -0
  96. package/dist/services/kernel.service.d.ts +4 -0
  97. package/dist/services/kernel.service.d.ts.map +1 -0
  98. package/dist/services/kernel.service.js +14 -0
  99. package/dist/services/kernel.service.js.map +1 -0
  100. package/dist/types.d.ts +72 -0
  101. package/dist/types.d.ts.map +1 -0
  102. package/dist/types.js +3 -0
  103. package/dist/types.js.map +1 -0
  104. package/dist/utils/helpers.d.ts +6 -0
  105. package/dist/utils/helpers.d.ts.map +1 -0
  106. package/dist/utils/helpers.js +24 -0
  107. package/dist/utils/helpers.js.map +1 -0
  108. package/dist/utils/logger.d.ts +2 -0
  109. package/dist/utils/logger.d.ts.map +1 -0
  110. package/dist/utils/logger.js +6 -0
  111. package/dist/utils/logger.js.map +1 -0
  112. package/dist/workers/aiWorker.d.ts +6 -0
  113. package/dist/workers/aiWorker.d.ts.map +1 -0
  114. package/dist/workers/aiWorker.js +42 -0
  115. package/dist/workers/aiWorker.js.map +1 -0
  116. package/dist/ws/gateway.d.ts +3 -0
  117. package/dist/ws/gateway.d.ts.map +1 -0
  118. package/dist/ws/gateway.js +110 -0
  119. package/dist/ws/gateway.js.map +1 -0
  120. package/package.json +68 -0
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ollamaProvider = void 0;
4
+ const config_1 = require("../config");
5
+ const logger_1 = require("../lib/logger");
6
+ exports.ollamaProvider = {
7
+ async complete(request) {
8
+ const url = `${config_1.config.providers.ollama.baseUrl}/api/chat`;
9
+ const res = await fetch(url, {
10
+ method: 'POST',
11
+ headers: { 'Content-Type': 'application/json' },
12
+ body: JSON.stringify({
13
+ model: request.model,
14
+ messages: request.messages,
15
+ stream: false,
16
+ options: {
17
+ temperature: request.options?.temperature ?? 0.7,
18
+ num_predict: request.options?.maxTokens ?? 1024,
19
+ },
20
+ }),
21
+ });
22
+ if (!res.ok) {
23
+ throw new Error(`Ollama error: ${res.status} ${res.statusText}`);
24
+ }
25
+ const data = (await res.json());
26
+ logger_1.logger.debug({ model: request.model }, 'Ollama completion');
27
+ return {
28
+ message: { role: 'assistant', content: data.message.content },
29
+ usage: {
30
+ promptTokens: data.prompt_eval_count ?? 0,
31
+ completionTokens: data.eval_count ?? 0,
32
+ totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),
33
+ },
34
+ finishReason: data.done_reason === 'stop' ? 'stop' : 'length',
35
+ model: request.model,
36
+ };
37
+ },
38
+ async *stream(request) {
39
+ const url = `${config_1.config.providers.ollama.baseUrl}/api/chat`;
40
+ const res = await fetch(url, {
41
+ method: 'POST',
42
+ headers: { 'Content-Type': 'application/json' },
43
+ body: JSON.stringify({
44
+ model: request.model,
45
+ messages: request.messages,
46
+ stream: true,
47
+ }),
48
+ });
49
+ if (!res.ok || !res.body) {
50
+ throw new Error(`Ollama stream error: ${res.status}`);
51
+ }
52
+ const reader = res.body.getReader();
53
+ const decoder = new TextDecoder();
54
+ while (true) {
55
+ const { done, value } = await reader.read();
56
+ if (done)
57
+ break;
58
+ const text = decoder.decode(value);
59
+ for (const line of text.split('\n')) {
60
+ if (!line.trim())
61
+ continue;
62
+ try {
63
+ const parsed = JSON.parse(line);
64
+ if (parsed.message?.content)
65
+ yield parsed.message.content;
66
+ }
67
+ catch {
68
+ // skip malformed lines
69
+ }
70
+ }
71
+ }
72
+ },
73
+ countTokens(messages) {
74
+ return messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
75
+ },
76
+ };
77
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { LLMProvider } from '../types';
2
+ export declare const openaiProvider: LLMProvider;
3
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,WAAW,EAAW,MAAM,UAAU,CAAA;AAWtF,eAAO,MAAM,cAAc,EAAE,WAkD5B,CAAA"}
@@ -0,0 +1,63 @@
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.openaiProvider = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const config_1 = require("../config");
9
+ const logger_1 = require("../lib/logger");
10
+ function buildClient() {
11
+ return new openai_1.default({
12
+ apiKey: config_1.config.providers.openai.apiKey,
13
+ baseURL: config_1.config.providers.openai.baseUrl,
14
+ });
15
+ }
16
+ exports.openaiProvider = {
17
+ async complete(request) {
18
+ const client = buildClient();
19
+ const response = await client.chat.completions.create({
20
+ model: request.model,
21
+ messages: request.messages,
22
+ temperature: request.options?.temperature ?? 0.7,
23
+ max_tokens: request.options?.maxTokens ?? 1024,
24
+ stream: false,
25
+ });
26
+ const choice = response.choices[0];
27
+ if (!choice)
28
+ throw new Error('OpenAI returned no choices');
29
+ logger_1.logger.debug({ model: request.model, usage: response.usage }, 'OpenAI completion');
30
+ return {
31
+ message: {
32
+ role: 'assistant',
33
+ content: choice.message.content ?? '',
34
+ },
35
+ usage: {
36
+ promptTokens: response.usage?.prompt_tokens ?? 0,
37
+ completionTokens: response.usage?.completion_tokens ?? 0,
38
+ totalTokens: response.usage?.total_tokens ?? 0,
39
+ },
40
+ finishReason: choice.finish_reason ?? 'stop',
41
+ model: response.model,
42
+ };
43
+ },
44
+ async *stream(request) {
45
+ const client = buildClient();
46
+ const stream = await client.chat.completions.create({
47
+ model: request.model,
48
+ messages: request.messages,
49
+ temperature: request.options?.temperature ?? 0.7,
50
+ max_tokens: request.options?.maxTokens ?? 1024,
51
+ stream: true,
52
+ });
53
+ for await (const chunk of stream) {
54
+ const delta = chunk.choices[0]?.delta?.content;
55
+ if (delta)
56
+ yield delta;
57
+ }
58
+ },
59
+ countTokens(messages) {
60
+ return messages.reduce((sum, m) => sum + Math.ceil(m.content.length / 4) + 4, 0);
61
+ },
62
+ };
63
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAE3B,sCAAkC;AAClC,0CAAsC;AAEtC,SAAS,WAAW;IAClB,OAAO,IAAI,gBAAM,CAAC;QAChB,MAAM,EAAE,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;QACtC,OAAO,EAAE,eAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;KACzC,CAAC,CAAA;AACJ,CAAC;AAEY,QAAA,cAAc,GAAgB;IACzC,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACvC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAA+C;YACjE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;YAChD,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC9C,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAE1D,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAElF,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;aACtC;YACD,KAAK,EAAE;gBACL,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;gBAChD,gBAAgB,EAAE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;gBACxD,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;aAC/C;YACD,YAAY,EAAG,MAAM,CAAC,aAAoD,IAAI,MAAM;YACpF,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAA0B;QACtC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAA+C;YACjE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;YAChD,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;YAC9C,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAA;YAC9C,IAAI,KAAK;gBAAE,MAAM,KAAK,CAAA;QACxB,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAAmB;QAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC;CACF,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { LLMProvider, KernelRequest } from '../types';
2
+ export declare class Router {
3
+ private rules;
4
+ constructor();
5
+ resolve(request: KernelRequest): {
6
+ provider: LLMProvider;
7
+ model: string;
8
+ providerName: string;
9
+ };
10
+ getAvailableModels(): import("../types").ModelInfo[];
11
+ }
12
+ export declare const router: Router;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,aAAa,EAAE,MAAM,UAAU,CAAA;AAmBlE,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAe;;IAM5B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IA6C/F,kBAAkB;CAGnB;AAED,eAAO,MAAM,MAAM,QAAe,CAAA"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.router = exports.Router = void 0;
4
+ const providers_1 = require("../providers");
5
+ const config_1 = require("../config");
6
+ const logger_1 = require("../lib/logger");
7
+ const defaultRules = [
8
+ { default: true, use: 'openai', model: config_1.config.providers.defaultModel },
9
+ ];
10
+ function loadRules() {
11
+ try {
12
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
13
+ const routing = require('../../config/routing.json');
14
+ return routing.rules;
15
+ }
16
+ catch {
17
+ return defaultRules;
18
+ }
19
+ }
20
+ class Router {
21
+ rules;
22
+ constructor() {
23
+ this.rules = loadRules();
24
+ }
25
+ resolve(request) {
26
+ const tag = request.options?.tag;
27
+ const tier = request.options?.tier;
28
+ const requestedModel = request.model;
29
+ if (requestedModel) {
30
+ const found = (0, providers_1.getProviderForModel)(requestedModel);
31
+ if (found) {
32
+ return { provider: found.provider, model: requestedModel, providerName: found.name };
33
+ }
34
+ }
35
+ for (const rule of this.rules) {
36
+ if (rule.default || rule.fallback)
37
+ continue;
38
+ if (rule.if) {
39
+ const matchModel = rule.if.model ? rule.if.model === requestedModel : true;
40
+ const matchTag = rule.if.tag ? rule.if.tag === tag : true;
41
+ const matchTier = rule.if.tier ? rule.if.tier === tier : true;
42
+ if (matchModel && matchTag && matchTier) {
43
+ const provider = providers_1.providers[rule.use];
44
+ const model = rule.model ?? config_1.config.providers.defaultModel;
45
+ if (provider) {
46
+ logger_1.logger.debug({ rule, model }, 'Routing rule matched');
47
+ return { provider, model, providerName: rule.use };
48
+ }
49
+ }
50
+ }
51
+ }
52
+ const defaultRule = this.rules.find((r) => r.default);
53
+ if (defaultRule) {
54
+ const provider = providers_1.providers[defaultRule.use];
55
+ const model = defaultRule.model ?? config_1.config.providers.defaultModel;
56
+ if (provider) {
57
+ return { provider, model, providerName: defaultRule.use };
58
+ }
59
+ }
60
+ const fallbackProvider = providers_1.providers['openai'] ?? Object.values(providers_1.providers)[0];
61
+ const fallbackModel = config_1.config.providers.defaultModel;
62
+ return { provider: fallbackProvider, model: fallbackModel, providerName: 'openai' };
63
+ }
64
+ getAvailableModels() {
65
+ return providers_1.modelCatalog.filter((m) => providers_1.providers[m.provider]);
66
+ }
67
+ }
68
+ exports.Router = Router;
69
+ exports.router = new Router();
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const aiRouter: import("express-serve-static-core").Router;
2
+ export { aiRouter };
3
+ //# sourceMappingURL=ai.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.routes.d.ts","sourceRoot":"","sources":["../../src/routes/ai.routes.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,QAAQ,4CAAW,CAAA;AAIzB,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aiRouter = void 0;
4
+ const express_1 = require("express");
5
+ const ai_controller_1 = require("../controllers/ai.controller");
6
+ const aiRouter = (0, express_1.Router)();
7
+ exports.aiRouter = aiRouter;
8
+ aiRouter.post('/complete', ai_controller_1.handleComplete);
9
+ //# sourceMappingURL=ai.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.routes.js","sourceRoot":"","sources":["../../src/routes/ai.routes.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAChC,gEAA6D;AAE7D,MAAM,QAAQ,GAAG,IAAA,gBAAM,GAAE,CAAA;AAIhB,4BAAQ;AAFjB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAc,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { apiRouter } from '../api/routes';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.apiRouter = void 0;
4
+ var routes_1 = require("../api/routes");
5
+ Object.defineProperty(exports, "apiRouter", { enumerable: true, get: function () { return routes_1.apiRouter; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;AAAA,wCAAyC;AAAhC,mGAAA,SAAS,OAAA"}
@@ -0,0 +1,4 @@
1
+ import { KernelRequest, KernelResponse } from '../types';
2
+ export declare function complete(conversationId: string, userMessage: string, model?: string, options?: KernelRequest['options']): Promise<KernelResponse>;
3
+ export declare function streamCompletion(conversationId: string, userMessage: string, onChunk: (chunk: string) => void, model?: string, options?: KernelRequest['options']): Promise<KernelResponse>;
4
+ //# sourceMappingURL=ai.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/services/ai.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAIxD,wBAAsB,QAAQ,CAC5B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAQzB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.complete = complete;
4
+ exports.streamCompletion = streamCompletion;
5
+ const kernel_1 = require("../kernel");
6
+ const helpers_1 = require("../utils/helpers");
7
+ const logger_1 = require("../lib/logger");
8
+ async function complete(conversationId, userMessage, model, options) {
9
+ const request = {
10
+ id: (0, helpers_1.generateId)('req'),
11
+ conversationId,
12
+ messages: [{ role: 'user', content: userMessage }],
13
+ model,
14
+ options,
15
+ };
16
+ logger_1.logger.debug({ conversationId, model }, 'ai.service: complete');
17
+ return kernel_1.kernel.process(request);
18
+ }
19
+ async function streamCompletion(conversationId, userMessage, onChunk, model, options) {
20
+ kernel_1.kernel.onStream(conversationId, onChunk);
21
+ try {
22
+ return await complete(conversationId, userMessage, model, options);
23
+ }
24
+ finally {
25
+ kernel_1.kernel.offStream(conversationId);
26
+ }
27
+ }
28
+ //# sourceMappingURL=ai.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.service.js","sourceRoot":"","sources":["../../src/services/ai.service.ts"],"names":[],"mappings":";;AAKA,4BAgBC;AAED,4CAcC;AArCD,sCAAkC;AAElC,8CAA6C;AAC7C,0CAAsC;AAE/B,KAAK,UAAU,QAAQ,CAC5B,cAAsB,EACtB,WAAmB,EACnB,KAAc,EACd,OAAkC;IAElC,MAAM,OAAO,GAAkB;QAC7B,EAAE,EAAE,IAAA,oBAAU,EAAC,KAAK,CAAC;QACrB,cAAc;QACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAClD,KAAK;QACL,OAAO;KACR,CAAA;IAED,eAAM,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAA;IAC/D,OAAO,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,cAAsB,EACtB,WAAmB,EACnB,OAAgC,EAChC,KAAc,EACd,OAAkC;IAElC,eAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAExC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACpE,CAAC;YAAS,CAAC;QACT,eAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function getPool(): Promise<import('pg').Pool>;
2
+ export declare function query<T = unknown>(sql: string, params?: unknown[]): Promise<T[]>;
3
+ //# sourceMappingURL=db.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.service.d.ts","sourceRoot":"","sources":["../../src/services/db.service.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAe1D;AAED,wBAAsB,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAItF"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getPool = getPool;
37
+ exports.query = query;
38
+ const config_1 = require("../config");
39
+ const logger_1 = require("../lib/logger");
40
+ let pool = null;
41
+ async function getPool() {
42
+ if (!config_1.config.db.enabled) {
43
+ throw new Error('Database persistence is not enabled. Set ENABLE_DB_PERSISTENCE=true.');
44
+ }
45
+ if (!config_1.config.db.url) {
46
+ throw new Error('DATABASE_URL is required when ENABLE_DB_PERSISTENCE=true.');
47
+ }
48
+ if (!pool) {
49
+ const { Pool } = await Promise.resolve().then(() => __importStar(require('pg')));
50
+ pool = new Pool({ connectionString: config_1.config.db.url });
51
+ logger_1.logger.info('Database pool initialized');
52
+ }
53
+ return pool;
54
+ }
55
+ async function query(sql, params) {
56
+ const db = await getPool();
57
+ const result = await db.query(sql, params);
58
+ return result.rows;
59
+ }
60
+ //# sourceMappingURL=db.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.service.js","sourceRoot":"","sources":["../../src/services/db.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0BAeC;AAED,sBAIC;AA1BD,sCAAkC;AAClC,0CAAsC;AAEtC,IAAI,IAAI,GAA6B,IAAI,CAAA;AAElC,KAAK,UAAU,OAAO;IAC3B,IAAI,CAAC,eAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;IACzF,CAAC;IACD,IAAI,CAAC,eAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAA;QACnC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,eAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;QACpD,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,KAAK,UAAU,KAAK,CAAc,GAAW,EAAE,MAAkB;IACtE,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,IAAW,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { KernelPlugin } from '../types';
2
+ export declare function registerPlugin(plugin: KernelPlugin): void;
3
+ export declare function shutdownKernel(): Promise<void>;
4
+ //# sourceMappingURL=kernel.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.service.d.ts","sourceRoot":"","sources":["../../src/services/kernel.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGzD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerPlugin = registerPlugin;
4
+ exports.shutdownKernel = shutdownKernel;
5
+ const kernel_1 = require("../kernel");
6
+ const logger_1 = require("../lib/logger");
7
+ function registerPlugin(plugin) {
8
+ kernel_1.kernel.use(plugin);
9
+ logger_1.logger.info({ plugin: plugin.name }, 'Plugin registered');
10
+ }
11
+ async function shutdownKernel() {
12
+ await kernel_1.kernel.shutdown();
13
+ }
14
+ //# sourceMappingURL=kernel.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.service.js","sourceRoot":"","sources":["../../src/services/kernel.service.ts"],"names":[],"mappings":";;AAIA,wCAGC;AAED,wCAEC;AAXD,sCAAkC;AAElC,0CAAsC;AAEtC,SAAgB,cAAc,CAAC,MAAoB;IACjD,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAClB,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,mBAAmB,CAAC,CAAA;AAC3D,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,MAAM,eAAM,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC"}
@@ -0,0 +1,72 @@
1
+ export type Role = 'user' | 'assistant' | 'system';
2
+ export type Message = {
3
+ role: Role;
4
+ content: string;
5
+ metadata?: Record<string, unknown>;
6
+ };
7
+ export type CompletionRequest = {
8
+ model: string;
9
+ messages: Message[];
10
+ options?: {
11
+ temperature?: number;
12
+ maxTokens?: number;
13
+ tag?: string;
14
+ tier?: string;
15
+ };
16
+ };
17
+ export type CompletionResponse = {
18
+ message: Message;
19
+ usage: {
20
+ promptTokens: number;
21
+ completionTokens: number;
22
+ totalTokens: number;
23
+ };
24
+ finishReason: 'stop' | 'length' | 'aborted' | 'error';
25
+ model: string;
26
+ };
27
+ export type KernelRequest = {
28
+ id: string;
29
+ conversationId: string;
30
+ messages: Message[];
31
+ model?: string;
32
+ options?: CompletionRequest['options'];
33
+ connectionId?: string;
34
+ };
35
+ export type KernelResponse = CompletionResponse & {
36
+ id: string;
37
+ conversationId: string;
38
+ };
39
+ export type KernelPlugin = {
40
+ name: string;
41
+ pre?: (ctx: PluginContext, next: () => Promise<void>) => Promise<void>;
42
+ post?: (ctx: PluginContext, next: () => Promise<void>) => Promise<void>;
43
+ };
44
+ export type PluginContext = {
45
+ request: KernelRequest;
46
+ response?: KernelResponse;
47
+ metadata: Record<string, unknown>;
48
+ };
49
+ export interface LLMProvider {
50
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
51
+ stream(request: CompletionRequest): AsyncIterable<string>;
52
+ countTokens(messages: Message[]): number;
53
+ }
54
+ export type RoutingRule = {
55
+ if?: {
56
+ model?: string;
57
+ tag?: string;
58
+ tier?: string;
59
+ };
60
+ use: string;
61
+ model?: string;
62
+ fallback?: boolean;
63
+ default?: boolean;
64
+ };
65
+ export type ModelInfo = {
66
+ id: string;
67
+ provider: string;
68
+ contextWindow: number;
69
+ streaming: boolean;
70
+ vision: boolean;
71
+ };
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare function generateId(prefix: string): string;
2
+ export declare function sleep(ms: number): Promise<void>;
3
+ export declare function clamp(value: number, min: number, max: number): number;
4
+ export declare function isRetryableStatus(status: number): boolean;
5
+ export declare function exponentialBackoff(attempt: number, baseDelayMs: number): number;
6
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateId = generateId;
4
+ exports.sleep = sleep;
5
+ exports.clamp = clamp;
6
+ exports.isRetryableStatus = isRetryableStatus;
7
+ exports.exponentialBackoff = exponentialBackoff;
8
+ const uuid_1 = require("uuid");
9
+ function generateId(prefix) {
10
+ return `${prefix}_${(0, uuid_1.v4)().replace(/-/g, '').slice(0, 12)}`;
11
+ }
12
+ function sleep(ms) {
13
+ return new Promise((resolve) => setTimeout(resolve, ms));
14
+ }
15
+ function clamp(value, min, max) {
16
+ return Math.max(min, Math.min(max, value));
17
+ }
18
+ function isRetryableStatus(status) {
19
+ return status === 429 || status === 503 || status === 502 || status === 504;
20
+ }
21
+ function exponentialBackoff(attempt, baseDelayMs) {
22
+ return baseDelayMs * Math.pow(2, attempt);
23
+ }
24
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":";;AAEA,gCAEC;AAED,sBAEC;AAED,sBAEC;AAED,8CAEC;AAED,gDAEC;AApBD,+BAAmC;AAEnC,SAAgB,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,IAAI,IAAA,SAAM,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AAC/D,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAgB,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAA;AAC7E,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe,EAAE,WAAmB;IACrE,OAAO,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { logger } from '../lib/logger';
2
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ var logger_1 = require("../lib/logger");
5
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
6
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AAA7B,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { LLMProvider, CompletionRequest, CompletionResponse } from '../types';
2
+ export declare function runWithRetry(provider: LLMProvider, request: CompletionRequest): Promise<CompletionResponse>;
3
+ export declare function streamWithAbort(provider: LLMProvider, request: CompletionRequest, abortSignal: {
4
+ aborted: boolean;
5
+ }): AsyncIterable<string>;
6
+ //# sourceMappingURL=aiWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiWorker.d.ts","sourceRoot":"","sources":["../../src/workers/aiWorker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7E,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED,wBAAuB,eAAe,CACpC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAChC,aAAa,CAAC,MAAM,CAAC,CAMvB"}