@puukis/core 0.1.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 (162) hide show
  1. package/LICENSE +21 -0
  2. package/dist/brain/Brain.d.ts +39 -0
  3. package/dist/brain/Brain.d.ts.map +1 -0
  4. package/dist/brain/Brain.js +284 -0
  5. package/dist/brain/Brain.js.map +1 -0
  6. package/dist/brain/index.d.ts +2 -0
  7. package/dist/brain/index.d.ts.map +1 -0
  8. package/dist/brain/index.js +2 -0
  9. package/dist/brain/index.js.map +1 -0
  10. package/dist/cli/argv.d.ts +8 -0
  11. package/dist/cli/argv.d.ts.map +1 -0
  12. package/dist/cli/argv.js +41 -0
  13. package/dist/cli/argv.js.map +1 -0
  14. package/dist/cli/codexInstall.d.ts +17 -0
  15. package/dist/cli/codexInstall.d.ts.map +1 -0
  16. package/dist/cli/codexInstall.js +106 -0
  17. package/dist/cli/codexInstall.js.map +1 -0
  18. package/dist/cli/commands/auth.d.ts +3 -0
  19. package/dist/cli/commands/auth.d.ts.map +1 -0
  20. package/dist/cli/commands/auth.js +66 -0
  21. package/dist/cli/commands/auth.js.map +1 -0
  22. package/dist/cli/commands/install.d.ts +3 -0
  23. package/dist/cli/commands/install.d.ts.map +1 -0
  24. package/dist/cli/commands/install.js +21 -0
  25. package/dist/cli/commands/install.js.map +1 -0
  26. package/dist/cli/commands/onboard.d.ts +3 -0
  27. package/dist/cli/commands/onboard.d.ts.map +1 -0
  28. package/dist/cli/commands/onboard.js +43 -0
  29. package/dist/cli/commands/onboard.js.map +1 -0
  30. package/dist/cli/commands/uninstall.d.ts +3 -0
  31. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  32. package/dist/cli/commands/uninstall.js +193 -0
  33. package/dist/cli/commands/uninstall.js.map +1 -0
  34. package/dist/cli/commands/update.d.ts +3 -0
  35. package/dist/cli/commands/update.d.ts.map +1 -0
  36. package/dist/cli/commands/update.js +314 -0
  37. package/dist/cli/commands/update.js.map +1 -0
  38. package/dist/cli/index.d.ts +3 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +60 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/codex/CodexRpcClient.d.ts +65 -0
  43. package/dist/codex/CodexRpcClient.d.ts.map +1 -0
  44. package/dist/codex/CodexRpcClient.js +395 -0
  45. package/dist/codex/CodexRpcClient.js.map +1 -0
  46. package/dist/codex/codexModels.d.ts +33 -0
  47. package/dist/codex/codexModels.d.ts.map +1 -0
  48. package/dist/codex/codexModels.js +226 -0
  49. package/dist/codex/codexModels.js.map +1 -0
  50. package/dist/codex/index.d.ts +5 -0
  51. package/dist/codex/index.d.ts.map +1 -0
  52. package/dist/codex/index.js +3 -0
  53. package/dist/codex/index.js.map +1 -0
  54. package/dist/codex/types.d.ts +97 -0
  55. package/dist/codex/types.d.ts.map +1 -0
  56. package/dist/codex/types.js +2 -0
  57. package/dist/codex/types.js.map +1 -0
  58. package/dist/config/env.d.ts +8 -0
  59. package/dist/config/env.d.ts.map +1 -0
  60. package/dist/config/env.js +130 -0
  61. package/dist/config/env.js.map +1 -0
  62. package/dist/config/index.d.ts +2 -0
  63. package/dist/config/index.d.ts.map +1 -0
  64. package/dist/config/index.js +2 -0
  65. package/dist/config/index.js.map +1 -0
  66. package/dist/db/index.d.ts +48 -0
  67. package/dist/db/index.d.ts.map +1 -0
  68. package/dist/db/index.js +147 -0
  69. package/dist/db/index.js.map +1 -0
  70. package/dist/gateway/Gateway.d.ts +69 -0
  71. package/dist/gateway/Gateway.d.ts.map +1 -0
  72. package/dist/gateway/Gateway.js +239 -0
  73. package/dist/gateway/Gateway.js.map +1 -0
  74. package/dist/gateway/LaneQueue.d.ts +24 -0
  75. package/dist/gateway/LaneQueue.d.ts.map +1 -0
  76. package/dist/gateway/LaneQueue.js +59 -0
  77. package/dist/gateway/LaneQueue.js.map +1 -0
  78. package/dist/gateway/index.d.ts +3 -0
  79. package/dist/gateway/index.d.ts.map +1 -0
  80. package/dist/gateway/index.js +3 -0
  81. package/dist/gateway/index.js.map +1 -0
  82. package/dist/index.d.ts +13 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +14 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/llm/GeminiProvider.d.ts +16 -0
  87. package/dist/llm/GeminiProvider.d.ts.map +1 -0
  88. package/dist/llm/GeminiProvider.js +172 -0
  89. package/dist/llm/GeminiProvider.js.map +1 -0
  90. package/dist/llm/OllamaProvider.d.ts +15 -0
  91. package/dist/llm/OllamaProvider.d.ts.map +1 -0
  92. package/dist/llm/OllamaProvider.js +108 -0
  93. package/dist/llm/OllamaProvider.js.map +1 -0
  94. package/dist/llm/OpenAICodexProvider.d.ts +51 -0
  95. package/dist/llm/OpenAICodexProvider.d.ts.map +1 -0
  96. package/dist/llm/OpenAICodexProvider.js +620 -0
  97. package/dist/llm/OpenAICodexProvider.js.map +1 -0
  98. package/dist/llm/OpenAIProvider.d.ts +16 -0
  99. package/dist/llm/OpenAIProvider.d.ts.map +1 -0
  100. package/dist/llm/OpenAIProvider.js +134 -0
  101. package/dist/llm/OpenAIProvider.js.map +1 -0
  102. package/dist/llm/index.d.ts +10 -0
  103. package/dist/llm/index.d.ts.map +1 -0
  104. package/dist/llm/index.js +30 -0
  105. package/dist/llm/index.js.map +1 -0
  106. package/dist/main.d.ts +7 -0
  107. package/dist/main.d.ts.map +1 -0
  108. package/dist/main.js +88 -0
  109. package/dist/main.js.map +1 -0
  110. package/dist/pipeline/index.d.ts +2 -0
  111. package/dist/pipeline/index.d.ts.map +1 -0
  112. package/dist/pipeline/index.js +2 -0
  113. package/dist/pipeline/index.js.map +1 -0
  114. package/dist/pipeline/normalize.d.ts +19 -0
  115. package/dist/pipeline/normalize.d.ts.map +1 -0
  116. package/dist/pipeline/normalize.js +34 -0
  117. package/dist/pipeline/normalize.js.map +1 -0
  118. package/dist/server/index.d.ts +28 -0
  119. package/dist/server/index.d.ts.map +1 -0
  120. package/dist/server/index.js +389 -0
  121. package/dist/server/index.js.map +1 -0
  122. package/dist/tools/ToolExecutor.d.ts +68 -0
  123. package/dist/tools/ToolExecutor.d.ts.map +1 -0
  124. package/dist/tools/ToolExecutor.js +177 -0
  125. package/dist/tools/ToolExecutor.js.map +1 -0
  126. package/dist/tools/builtin/browser.d.ts +27 -0
  127. package/dist/tools/builtin/browser.d.ts.map +1 -0
  128. package/dist/tools/builtin/browser.js +222 -0
  129. package/dist/tools/builtin/browser.js.map +1 -0
  130. package/dist/tools/builtin/filesystem.d.ts +22 -0
  131. package/dist/tools/builtin/filesystem.d.ts.map +1 -0
  132. package/dist/tools/builtin/filesystem.js +151 -0
  133. package/dist/tools/builtin/filesystem.js.map +1 -0
  134. package/dist/tools/builtin/index.d.ts +10 -0
  135. package/dist/tools/builtin/index.d.ts.map +1 -0
  136. package/dist/tools/builtin/index.js +21 -0
  137. package/dist/tools/builtin/index.js.map +1 -0
  138. package/dist/tools/builtin/sandbox.d.ts +11 -0
  139. package/dist/tools/builtin/sandbox.d.ts.map +1 -0
  140. package/dist/tools/builtin/sandbox.js +166 -0
  141. package/dist/tools/builtin/sandbox.js.map +1 -0
  142. package/dist/tools/builtin/search.d.ts +7 -0
  143. package/dist/tools/builtin/search.d.ts.map +1 -0
  144. package/dist/tools/builtin/search.js +76 -0
  145. package/dist/tools/builtin/search.js.map +1 -0
  146. package/dist/tools/builtin/shell.d.ts +7 -0
  147. package/dist/tools/builtin/shell.d.ts.map +1 -0
  148. package/dist/tools/builtin/shell.js +71 -0
  149. package/dist/tools/builtin/shell.js.map +1 -0
  150. package/dist/tools/index.d.ts +3 -0
  151. package/dist/tools/index.d.ts.map +1 -0
  152. package/dist/tools/index.js +3 -0
  153. package/dist/tools/index.js.map +1 -0
  154. package/dist/types.d.ts +167 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +3 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/workspace/agentWorkspace.d.ts +24 -0
  159. package/dist/workspace/agentWorkspace.d.ts.map +1 -0
  160. package/dist/workspace/agentWorkspace.js +210 -0
  161. package/dist/workspace/agentWorkspace.js.map +1 -0
  162. package/package.json +45 -0
@@ -0,0 +1,134 @@
1
+ import OpenAI from 'openai';
2
+ /**
3
+ * OpenAI LLM Provider
4
+ */
5
+ export class OpenAIProvider {
6
+ name = 'openai';
7
+ client;
8
+ model;
9
+ constructor(apiKey, model) {
10
+ this.client = new OpenAI({ apiKey });
11
+ this.model = model;
12
+ }
13
+ async chat(messages, options) {
14
+ const response = await this.client.chat.completions.create({
15
+ model: this.model,
16
+ messages: this.convertMessages(messages),
17
+ tools: options?.tools ? this.convertTools(options.tools) : undefined,
18
+ temperature: options?.temperature ?? 0.7,
19
+ max_tokens: options?.maxTokens,
20
+ });
21
+ const choice = response.choices[0];
22
+ if (!choice) {
23
+ throw new Error('No response from OpenAI');
24
+ }
25
+ const toolCalls = choice.message.tool_calls?.map((tc) => ({
26
+ id: tc.id,
27
+ name: tc.function.name,
28
+ arguments: JSON.parse(tc.function.arguments),
29
+ }));
30
+ return {
31
+ content: choice.message.content ?? '',
32
+ toolCalls,
33
+ finishReason: this.mapFinishReason(choice.finish_reason),
34
+ };
35
+ }
36
+ async *stream(messages, options) {
37
+ const stream = await this.client.chat.completions.create({
38
+ model: this.model,
39
+ messages: this.convertMessages(messages),
40
+ tools: options?.tools ? this.convertTools(options.tools) : undefined,
41
+ temperature: options?.temperature ?? 0.7,
42
+ max_tokens: options?.maxTokens,
43
+ stream: true,
44
+ });
45
+ const toolCallsAccumulator = new Map();
46
+ for await (const chunk of stream) {
47
+ const delta = chunk.choices[0]?.delta;
48
+ if (!delta)
49
+ continue;
50
+ // Accumulate tool calls
51
+ if (delta.tool_calls) {
52
+ for (const tc of delta.tool_calls) {
53
+ const existing = toolCallsAccumulator.get(tc.index);
54
+ if (existing) {
55
+ if (tc.function?.arguments) {
56
+ existing.arguments += tc.function.arguments;
57
+ }
58
+ }
59
+ else {
60
+ toolCallsAccumulator.set(tc.index, {
61
+ id: tc.id ?? '',
62
+ name: tc.function?.name ?? '',
63
+ arguments: tc.function?.arguments ?? '',
64
+ });
65
+ }
66
+ }
67
+ }
68
+ yield {
69
+ content: delta.content ?? undefined,
70
+ done: chunk.choices[0]?.finish_reason !== null,
71
+ };
72
+ }
73
+ // Emit final tool calls if any
74
+ if (toolCallsAccumulator.size > 0) {
75
+ const toolCalls = Array.from(toolCallsAccumulator.values()).map(tc => ({
76
+ id: tc.id,
77
+ name: tc.name,
78
+ arguments: JSON.parse(tc.arguments || '{}'),
79
+ }));
80
+ yield {
81
+ toolCalls,
82
+ done: true,
83
+ };
84
+ }
85
+ }
86
+ convertMessages(messages) {
87
+ return messages.map((m) => {
88
+ if (m.role === 'tool') {
89
+ return {
90
+ role: 'tool',
91
+ content: m.content,
92
+ tool_call_id: m.toolCallId ?? '',
93
+ };
94
+ }
95
+ if (m.role === 'assistant' && m.toolCalls) {
96
+ return {
97
+ role: 'assistant',
98
+ content: m.content,
99
+ tool_calls: m.toolCalls.map(tc => ({
100
+ id: tc.id,
101
+ type: 'function',
102
+ function: {
103
+ name: tc.name,
104
+ arguments: JSON.stringify(tc.arguments),
105
+ },
106
+ })),
107
+ };
108
+ }
109
+ return {
110
+ role: m.role,
111
+ content: m.content,
112
+ };
113
+ });
114
+ }
115
+ convertTools(tools) {
116
+ return tools.map(t => ({
117
+ type: 'function',
118
+ function: {
119
+ name: t.name,
120
+ description: t.description,
121
+ parameters: t.parameters,
122
+ },
123
+ }));
124
+ }
125
+ mapFinishReason(reason) {
126
+ switch (reason) {
127
+ case 'stop': return 'stop';
128
+ case 'tool_calls': return 'tool_calls';
129
+ case 'length': return 'length';
130
+ default: return 'stop';
131
+ }
132
+ }
133
+ }
134
+ //# sourceMappingURL=OpenAIProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../src/llm/OpenAIProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { KeygateConfig, LLMProvider } from '../types.js';
2
+ export { OpenAIProvider } from './OpenAIProvider.js';
3
+ export { GeminiProvider } from './GeminiProvider.js';
4
+ export { OllamaProvider } from './OllamaProvider.js';
5
+ export { OpenAICodexProvider, runCodexDeviceAuth } from './OpenAICodexProvider.js';
6
+ /**
7
+ * Create an LLM provider based on config
8
+ */
9
+ export declare function createLLMProvider(config: KeygateConfig): LLMProvider;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAkBpE"}
@@ -0,0 +1,30 @@
1
+ import { OpenAIProvider } from './OpenAIProvider.js';
2
+ import { GeminiProvider } from './GeminiProvider.js';
3
+ import { OllamaProvider } from './OllamaProvider.js';
4
+ import { OpenAICodexProvider } from './OpenAICodexProvider.js';
5
+ export { OpenAIProvider } from './OpenAIProvider.js';
6
+ export { GeminiProvider } from './GeminiProvider.js';
7
+ export { OllamaProvider } from './OllamaProvider.js';
8
+ export { OpenAICodexProvider, runCodexDeviceAuth } from './OpenAICodexProvider.js';
9
+ /**
10
+ * Create an LLM provider based on config
11
+ */
12
+ export function createLLMProvider(config) {
13
+ const { provider, model, apiKey, reasoningEffort } = config.llm;
14
+ switch (provider) {
15
+ case 'openai':
16
+ return new OpenAIProvider(apiKey, model);
17
+ case 'gemini':
18
+ return new GeminiProvider(apiKey, model);
19
+ case 'ollama':
20
+ return new OllamaProvider(model, config.llm.ollama?.host);
21
+ case 'openai-codex':
22
+ return new OpenAICodexProvider(model, {
23
+ cwd: config.security.workspacePath,
24
+ reasoningEffort,
25
+ });
26
+ default:
27
+ throw new Error(`Unknown LLM provider: ${provider}`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;IAEhE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5D,KAAK,cAAc;YACjB,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE;gBACpC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa;gBAClC,eAAe;aAChB,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Keygate Main Entry Point
4
+ * Starts WebSocket server or runs onboarding/auth CLI commands.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/main.js ADDED
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Keygate Main Entry Point
4
+ * Starts WebSocket server or runs onboarding/auth CLI commands.
5
+ */
6
+ import { startWebServer } from './server/index.js';
7
+ import { runCli, printHelp } from './cli/index.js';
8
+ import { loadConfigFromEnv, loadEnvironment } from './config/env.js';
9
+ import { ensureAgentWorkspaceFiles } from './workspace/agentWorkspace.js';
10
+ import { spawn } from 'node:child_process';
11
+ const DEFAULT_CHAT_SITE_URL = 'http://localhost:18790';
12
+ const DISABLED_ENV_VALUES = new Set(['0', 'false', 'no', 'off']);
13
+ async function main() {
14
+ loadEnvironment();
15
+ try {
16
+ const handled = await runCli(process.argv.slice(2));
17
+ if (handled) {
18
+ return;
19
+ }
20
+ }
21
+ catch (error) {
22
+ console.error(error instanceof Error ? error.message : String(error));
23
+ printHelp();
24
+ process.exitCode = 1;
25
+ return;
26
+ }
27
+ const config = loadConfigFromEnv();
28
+ const workspaceBootstrap = await ensureAgentWorkspaceFiles(config.security.workspacePath);
29
+ console.log('⚡ Starting Keygate...');
30
+ console.log(` LLM Provider: ${config.llm.provider}`);
31
+ console.log(` Model: ${config.llm.model}`);
32
+ console.log(` Spicy Mode Enabled: ${config.security.spicyModeEnabled}`);
33
+ if (workspaceBootstrap.created.length > 0) {
34
+ console.log(` Initialized workspace files: ${workspaceBootstrap.created.join(', ')}`);
35
+ }
36
+ console.log('');
37
+ startWebServer(config, {
38
+ onListening: async () => {
39
+ if (!shouldOpenChatSiteOnStart()) {
40
+ return;
41
+ }
42
+ const chatSiteUrl = getChatSiteUrl();
43
+ const opened = await openExternalUrl(chatSiteUrl);
44
+ if (opened) {
45
+ console.log(`🧭 Opened chat UI: ${chatSiteUrl}`);
46
+ return;
47
+ }
48
+ console.log(`🧭 Open this chat URL manually: ${chatSiteUrl}`);
49
+ },
50
+ });
51
+ }
52
+ void main();
53
+ function shouldOpenChatSiteOnStart() {
54
+ const rawValue = process.env['KEYGATE_OPEN_CHAT_ON_START'];
55
+ if (!rawValue) {
56
+ return true;
57
+ }
58
+ return !DISABLED_ENV_VALUES.has(rawValue.trim().toLowerCase());
59
+ }
60
+ function getChatSiteUrl() {
61
+ const configuredUrl = process.env['KEYGATE_CHAT_URL']?.trim();
62
+ if (!configuredUrl) {
63
+ return DEFAULT_CHAT_SITE_URL;
64
+ }
65
+ return configuredUrl;
66
+ }
67
+ async function openExternalUrl(url) {
68
+ const platform = process.platform;
69
+ const command = platform === 'darwin'
70
+ ? { cmd: 'open', args: [url] }
71
+ : platform === 'win32'
72
+ ? { cmd: 'cmd', args: ['/c', 'start', '', url] }
73
+ : { cmd: 'xdg-open', args: [url] };
74
+ return new Promise((resolve) => {
75
+ const child = spawn(command.cmd, command.args, {
76
+ stdio: 'ignore',
77
+ detached: platform !== 'win32',
78
+ });
79
+ child.once('error', () => {
80
+ resolve(false);
81
+ });
82
+ child.once('spawn', () => {
83
+ child.unref();
84
+ resolve(true);
85
+ });
86
+ });
87
+ }
88
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { normalizeDiscordMessage, normalizeWebMessage, BaseChannel, } from './normalize.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { normalizeDiscordMessage, normalizeWebMessage, BaseChannel, } from './normalize.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Channel, ChannelType, NormalizedMessage } from '../types.js';
2
+ /**
3
+ * Create a normalized message from Discord
4
+ */
5
+ export declare function normalizeDiscordMessage(messageId: string, channelId: string, userId: string, content: string, channel: Channel): NormalizedMessage;
6
+ /**
7
+ * Create a normalized message from Web
8
+ */
9
+ export declare function normalizeWebMessage(sessionId: string, userId: string, content: string, channel: Channel): NormalizedMessage;
10
+ /**
11
+ * Abstract channel implementation helper
12
+ */
13
+ export declare abstract class BaseChannel implements Channel {
14
+ abstract type: ChannelType;
15
+ abstract send(content: string): Promise<void>;
16
+ abstract sendStream(stream: AsyncIterable<string>): Promise<void>;
17
+ abstract requestConfirmation(prompt: string): Promise<boolean>;
18
+ }
19
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/pipeline/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,iBAAiB,CAUnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,iBAAiB,CAUnB;AAED;;GAEG;AACH,8BAAsB,WAAY,YAAW,OAAO;IAClD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACjE,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAC/D"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Create a normalized message from Discord
3
+ */
4
+ export function normalizeDiscordMessage(messageId, channelId, userId, content, channel) {
5
+ return {
6
+ id: messageId,
7
+ sessionId: `discord:${channelId}`,
8
+ channelType: 'discord',
9
+ channel,
10
+ userId,
11
+ content,
12
+ timestamp: new Date(),
13
+ };
14
+ }
15
+ /**
16
+ * Create a normalized message from Web
17
+ */
18
+ export function normalizeWebMessage(sessionId, userId, content, channel) {
19
+ return {
20
+ id: crypto.randomUUID(),
21
+ sessionId: `web:${sessionId}`,
22
+ channelType: 'web',
23
+ channel,
24
+ userId,
25
+ content,
26
+ timestamp: new Date(),
27
+ };
28
+ }
29
+ /**
30
+ * Abstract channel implementation helper
31
+ */
32
+ export class BaseChannel {
33
+ }
34
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/pipeline/normalize.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,OAAgB;IAEhB,OAAO;QACL,EAAE,EAAE,SAAS;QACb,SAAS,EAAE,WAAW,SAAS,EAAE;QACjC,WAAW,EAAE,SAAS;QACtB,OAAO;QACP,MAAM;QACN,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,OAAgB;IAEhB,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,SAAS,EAAE,OAAO,SAAS,EAAE;QAC7B,WAAW,EAAE,KAAK;QAClB,OAAO;QACP,MAAM;QACN,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAgB,WAAW;CAKhC"}
@@ -0,0 +1,28 @@
1
+ import { WebSocket } from 'ws';
2
+ import { BaseChannel } from '../pipeline/index.js';
3
+ import type { KeygateConfig } from '../types.js';
4
+ import 'dotenv/config';
5
+ interface StartWebServerOptions {
6
+ onListening?: () => void | Promise<void>;
7
+ staticAssetsDir?: string;
8
+ }
9
+ /**
10
+ * WebSocket Channel adapter
11
+ */
12
+ declare class WebSocketChannel extends BaseChannel {
13
+ type: "web";
14
+ private ws;
15
+ private sessionId;
16
+ private pendingConfirmation;
17
+ constructor(ws: WebSocket, sessionId: string);
18
+ send(content: string): Promise<void>;
19
+ sendStream(stream: AsyncIterable<string>): Promise<void>;
20
+ requestConfirmation(prompt: string): Promise<boolean>;
21
+ handleConfirmResponse(confirmed: boolean): void;
22
+ }
23
+ /**
24
+ * Start the WebSocket server
25
+ */
26
+ export declare function startWebServer(config: KeygateConfig, options?: StartWebServerOptions): void;
27
+ export { WebSocketChannel };
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAKhD,OAAO,EAAuB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,KAAK,EAAwB,aAAa,EAAgB,MAAM,aAAa,CAAC;AACrF,OAAO,eAAe,CAAC;AAavB,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,cAAM,gBAAiB,SAAQ,WAAW;IACxC,IAAI,EAAG,KAAK,CAAU;IACtB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAA+C;gBAE9D,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;IAMtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3D,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;CAMhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,qBAA0B,GAAG,IAAI,CAqN/F;AAWD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}