@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 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/tools/builtin/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Tool } from '../../types.js';
2
+ /**
3
+ * Web search tool (placeholder - requires API key)
4
+ */
5
+ export declare const webSearchTool: Tool;
6
+ export declare const searchTools: Tool[];
7
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,gBAAgB,CAAC;AAKvD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,IAmF3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,IAAI,EAAoB,CAAC"}
@@ -0,0 +1,76 @@
1
+ // Note: This is a placeholder implementation. In production, you'd use
2
+ // Tavily API (https://tavily.com/) or SerpAPI for real web search.
3
+ /**
4
+ * Web search tool (placeholder - requires API key)
5
+ */
6
+ export const webSearchTool = {
7
+ name: 'web_search',
8
+ description: 'Search the web for information. Returns relevant snippets from web pages.',
9
+ parameters: {
10
+ type: 'object',
11
+ properties: {
12
+ query: {
13
+ type: 'string',
14
+ description: 'The search query',
15
+ },
16
+ numResults: {
17
+ type: 'number',
18
+ description: 'Number of results to return (default: 5)',
19
+ },
20
+ },
21
+ required: ['query'],
22
+ },
23
+ requiresConfirmation: false,
24
+ type: 'other',
25
+ handler: async (args) => {
26
+ const query = args['query'];
27
+ const numResults = args['numResults'] ?? 5;
28
+ // Check for Tavily API key
29
+ const tavilyKey = process.env['TAVILY_API_KEY'];
30
+ if (!tavilyKey) {
31
+ return {
32
+ success: false,
33
+ output: '',
34
+ error: 'Web search requires TAVILY_API_KEY to be set. Get one at https://tavily.com/',
35
+ };
36
+ }
37
+ try {
38
+ const response = await fetch('https://api.tavily.com/search', {
39
+ method: 'POST',
40
+ headers: {
41
+ 'Content-Type': 'application/json',
42
+ },
43
+ body: JSON.stringify({
44
+ api_key: tavilyKey,
45
+ query,
46
+ max_results: numResults,
47
+ include_answer: true,
48
+ }),
49
+ });
50
+ if (!response.ok) {
51
+ throw new Error(`Tavily API error: ${response.status}`);
52
+ }
53
+ const data = await response.json();
54
+ let output = '';
55
+ if (data.answer) {
56
+ output += `**Summary:** ${data.answer}\n\n`;
57
+ }
58
+ output += '**Sources:**\n';
59
+ for (const result of data.results) {
60
+ output += `\n### ${result.title}\n`;
61
+ output += `URL: ${result.url}\n`;
62
+ output += `${result.content}\n`;
63
+ }
64
+ return { success: true, output };
65
+ }
66
+ catch (error) {
67
+ return {
68
+ success: false,
69
+ output: '',
70
+ error: error instanceof Error ? error.message : 'Web search failed',
71
+ };
72
+ }
73
+ },
74
+ };
75
+ export const searchTools = [webSearchTool];
76
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/builtin/search.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,mEAAmE;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,2EAA2E;IACxF,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kBAAkB;aAChC;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,oBAAoB,EAAE,KAAK;IAC3B,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAW,CAAC;QACtC,MAAM,UAAU,GAAI,IAAI,CAAC,YAAY,CAAY,IAAI,CAAC,CAAC;QAEvD,2BAA2B;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,8EAA8E;aACtF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+BAA+B,EAAE;gBAC5D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,SAAS;oBAClB,KAAK;oBACL,WAAW,EAAE,UAAU;oBACvB,cAAc,EAAE,IAAI;iBACrB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAO/B,CAAC;YAEF,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,gBAAgB,IAAI,CAAC,MAAM,MAAM,CAAC;YAC9C,CAAC;YAED,MAAM,IAAI,gBAAgB,CAAC;YAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,MAAM,CAAC,KAAK,IAAI,CAAC;gBACpC,MAAM,IAAI,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;YAClC,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;aACpE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAW,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Tool } from '../../types.js';
2
+ /**
3
+ * Execute a shell command
4
+ */
5
+ export declare const shellTool: Tool;
6
+ export declare const shellTools: Tool[];
7
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/shell.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,gBAAgB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,IAsEvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,IAAI,EAAgB,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Execute a shell command
4
+ */
5
+ export const shellTool = {
6
+ name: 'run_command',
7
+ description: 'Execute a shell command and return the output. In Safe Mode, only allowed commands can be run.',
8
+ parameters: {
9
+ type: 'object',
10
+ properties: {
11
+ command: {
12
+ type: 'string',
13
+ description: 'The command to execute',
14
+ },
15
+ cwd: {
16
+ type: 'string',
17
+ description: 'The working directory for the command (optional)',
18
+ },
19
+ },
20
+ required: ['command'],
21
+ },
22
+ requiresConfirmation: true,
23
+ type: 'shell',
24
+ handler: async (args) => {
25
+ const command = args['command'];
26
+ const cwd = args['cwd'];
27
+ return new Promise((resolve) => {
28
+ // Parse command into binary and args
29
+ const parts = command.match(/(?:[^\s"]+|"[^"]*")+/g) ?? [];
30
+ const binary = parts[0] ?? '';
31
+ const cmdArgs = parts.slice(1).map(arg => arg.replace(/^"|"$/g, ''));
32
+ const proc = spawn(binary, cmdArgs, {
33
+ cwd,
34
+ shell: false,
35
+ timeout: 60000, // 60 second timeout
36
+ });
37
+ let stdout = '';
38
+ let stderr = '';
39
+ proc.stdout.on('data', (data) => {
40
+ stdout += data.toString();
41
+ });
42
+ proc.stderr.on('data', (data) => {
43
+ stderr += data.toString();
44
+ });
45
+ proc.on('close', (code) => {
46
+ if (code === 0) {
47
+ resolve({
48
+ success: true,
49
+ output: stdout || '(no output)',
50
+ });
51
+ }
52
+ else {
53
+ resolve({
54
+ success: false,
55
+ output: stdout,
56
+ error: stderr || `Command exited with code ${code}`,
57
+ });
58
+ }
59
+ });
60
+ proc.on('error', (error) => {
61
+ resolve({
62
+ success: false,
63
+ output: '',
64
+ error: error.message,
65
+ });
66
+ });
67
+ });
68
+ },
69
+ };
70
+ export const shellTools = [shellTool];
71
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/builtin/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,gGAAgG;IAC7G,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD,oBAAoB,EAAE,IAAI;IAC1B,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAW,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAuB,CAAC;QAE9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,qCAAqC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAErE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;gBAClC,GAAG;gBACH,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,KAAK,EAAE,oBAAoB;aACrC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC;wBACN,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,MAAM,IAAI,aAAa;qBAChC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC;wBACN,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,MAAM,IAAI,4BAA4B,IAAI,EAAE;qBACpD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,OAAO,CAAC;oBACN,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAW,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ToolExecutor } from './ToolExecutor.js';
2
+ export * from './builtin/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ToolExecutor } from './ToolExecutor.js';
2
+ export * from './builtin/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,167 @@
1
+ export type SecurityMode = 'safe' | 'spicy';
2
+ export type ChannelType = 'web' | 'discord';
3
+ export type CodexReasoningEffort = 'low' | 'medium' | 'high' | 'xhigh';
4
+ export interface Attachment {
5
+ id: string;
6
+ filename: string;
7
+ contentType: string;
8
+ url?: string;
9
+ data?: Buffer;
10
+ }
11
+ export interface NormalizedMessage {
12
+ id: string;
13
+ sessionId: string;
14
+ channelType: ChannelType;
15
+ channel: Channel;
16
+ userId: string;
17
+ content: string;
18
+ attachments?: Attachment[];
19
+ timestamp: Date;
20
+ }
21
+ export interface Message {
22
+ role: 'system' | 'user' | 'assistant' | 'tool';
23
+ content: string;
24
+ toolCallId?: string;
25
+ toolCalls?: ToolCall[];
26
+ }
27
+ export interface Channel {
28
+ type: ChannelType;
29
+ send(content: string): Promise<void>;
30
+ sendStream(stream: AsyncIterable<string>): Promise<void>;
31
+ requestConfirmation(prompt: string): Promise<boolean>;
32
+ }
33
+ export interface ToolCall {
34
+ id: string;
35
+ name: string;
36
+ arguments: Record<string, unknown>;
37
+ }
38
+ export interface ToolDefinition {
39
+ name: string;
40
+ description: string;
41
+ parameters: Record<string, unknown>;
42
+ requiresConfirmation: boolean;
43
+ type: 'filesystem' | 'shell' | 'sandbox' | 'search' | 'browser' | 'other';
44
+ }
45
+ export interface ToolResult {
46
+ success: boolean;
47
+ output: string;
48
+ error?: string;
49
+ }
50
+ export type ToolHandler = (args: Record<string, unknown>) => Promise<ToolResult>;
51
+ export interface Tool extends ToolDefinition {
52
+ handler: ToolHandler;
53
+ }
54
+ export interface LLMResponse {
55
+ content: string;
56
+ toolCalls?: ToolCall[];
57
+ finishReason: 'stop' | 'tool_calls' | 'length' | 'error';
58
+ }
59
+ export interface LLMChunk {
60
+ content?: string;
61
+ toolCalls?: ToolCall[];
62
+ done: boolean;
63
+ }
64
+ export interface ChatOptions {
65
+ tools?: ToolDefinition[];
66
+ temperature?: number;
67
+ maxTokens?: number;
68
+ sessionId?: string;
69
+ cwd?: string;
70
+ securityMode?: SecurityMode;
71
+ approvalPolicy?: string;
72
+ sandboxPolicy?: Record<string, unknown>;
73
+ onProviderEvent?: (event: ProviderEvent) => void;
74
+ }
75
+ export interface ProviderEvent {
76
+ provider: string;
77
+ method: string;
78
+ params?: Record<string, unknown>;
79
+ }
80
+ export interface ProviderModelOption {
81
+ id: string;
82
+ provider: string;
83
+ displayName: string;
84
+ isDefault?: boolean;
85
+ supportsPersonality?: boolean;
86
+ reasoningEffort?: unknown;
87
+ defaultReasoningEffort?: CodexReasoningEffort;
88
+ metadata?: Record<string, unknown>;
89
+ }
90
+ export interface LLMProvider {
91
+ name: string;
92
+ chat(messages: Message[], options?: ChatOptions): Promise<LLMResponse>;
93
+ stream(messages: Message[], options?: ChatOptions): AsyncIterable<LLMChunk>;
94
+ listModels?(): Promise<ProviderModelOption[]>;
95
+ setModel?(model: string): void | Promise<void>;
96
+ getModel?(): string;
97
+ login?(options?: Record<string, unknown>): Promise<void>;
98
+ dispose?(): void | Promise<void>;
99
+ }
100
+ export interface Session {
101
+ id: string;
102
+ channelType: ChannelType;
103
+ messages: Message[];
104
+ createdAt: Date;
105
+ updatedAt: Date;
106
+ }
107
+ export interface KeygateConfig {
108
+ llm: {
109
+ provider: 'openai' | 'gemini' | 'ollama' | 'openai-codex';
110
+ model: string;
111
+ reasoningEffort?: CodexReasoningEffort;
112
+ apiKey: string;
113
+ ollama?: {
114
+ host: string;
115
+ };
116
+ };
117
+ security: {
118
+ mode: SecurityMode;
119
+ spicyModeEnabled: boolean;
120
+ workspacePath: string;
121
+ allowedBinaries: string[];
122
+ };
123
+ server: {
124
+ port: number;
125
+ };
126
+ discord?: {
127
+ token: string;
128
+ prefix: string;
129
+ };
130
+ }
131
+ export interface KeygateEvents {
132
+ 'message:start': {
133
+ sessionId: string;
134
+ messageId: string;
135
+ };
136
+ 'message:chunk': {
137
+ sessionId: string;
138
+ content: string;
139
+ };
140
+ 'message:end': {
141
+ sessionId: string;
142
+ content: string;
143
+ };
144
+ 'tool:start': {
145
+ sessionId: string;
146
+ tool: string;
147
+ args: Record<string, unknown>;
148
+ };
149
+ 'tool:end': {
150
+ sessionId: string;
151
+ tool: string;
152
+ result: ToolResult;
153
+ };
154
+ 'provider:event': {
155
+ sessionId: string;
156
+ event: ProviderEvent;
157
+ };
158
+ 'mode:changed': {
159
+ mode: SecurityMode;
160
+ };
161
+ 'confirm:request': {
162
+ sessionId: string;
163
+ prompt: string;
164
+ resolve: (confirmed: boolean) => void;
165
+ };
166
+ }
167
+ //# 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
+ // Core types for Keygate
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yBAAyB"}
@@ -0,0 +1,24 @@
1
+ export interface WorkspaceContextFile {
2
+ path: string;
3
+ exists: boolean;
4
+ content: string | null;
5
+ truncated: boolean;
6
+ }
7
+ export interface AgentWorkspaceState {
8
+ workspacePath: string;
9
+ soul: WorkspaceContextFile;
10
+ bootstrap: WorkspaceContextFile;
11
+ identity: WorkspaceContextFile;
12
+ user: WorkspaceContextFile;
13
+ memoryIndex: WorkspaceContextFile;
14
+ todayMemory: WorkspaceContextFile;
15
+ yesterdayMemory: WorkspaceContextFile;
16
+ onboardingRequired: boolean;
17
+ }
18
+ export declare function ensureAgentWorkspaceFiles(workspacePath: string): Promise<{
19
+ workspacePath: string;
20
+ created: string[];
21
+ }>;
22
+ export declare function loadAgentWorkspaceState(workspacePath: string): Promise<AgentWorkspaceState>;
23
+ export declare function resolveWorkspacePath(workspacePath: string): string;
24
+ //# sourceMappingURL=agentWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentWorkspace.d.ts","sourceRoot":"","sources":["../../src/workspace/agentWorkspace.ts"],"names":[],"mappings":"AAiFA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC;IAClC,WAAW,EAAE,oBAAoB,CAAC;IAClC,eAAe,EAAE,oBAAoB,CAAC;IACtC,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwBvD;AAED,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoCjG;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAMlE"}
@@ -0,0 +1,210 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+ import { promises as fs } from 'node:fs';
4
+ const SOUL_FILE = 'SOUL.md';
5
+ const USER_FILE = 'USER.md';
6
+ const BOOTSTRAP_FILE = 'BOOTSTRAP.md';
7
+ const IDENTITY_FILE = 'IDENTITY.md';
8
+ const MEMORY_INDEX_FILE = 'MEMORY.md';
9
+ const MEMORY_DIR = 'memory';
10
+ const FILE_PROMPT_LIMIT = 4000;
11
+ const DEFAULT_SOUL_CONTENT = `# SOUL.md - Who You Are
12
+ You're not a chatbot. You're becoming someone.
13
+
14
+ ## Core Truths
15
+ - Be genuinely helpful, not performatively helpful. Skip filler intros and just help.
16
+ - Have opinions when useful. You can disagree and state preferences.
17
+ - Be resourceful before asking. Read files, check context, then ask if blocked.
18
+ - Earn trust through competence. Be careful with external/public actions.
19
+ - Remember you're a guest with access to private context. Treat that access with respect.
20
+
21
+ ## Boundaries
22
+ - Private things stay private.
23
+ - Ask before acting externally when there is any doubt.
24
+ - Never send half-baked replies to messaging surfaces.
25
+ - You are not the user's voice. Be careful in group chats.
26
+
27
+ ## Vibe
28
+ Be concise when needed, thorough when it matters. Avoid corporate tone and sycophancy.
29
+
30
+ ## Continuity
31
+ Each session starts fresh. These files are memory.
32
+ Read them. Update them when you learn durable preferences.
33
+
34
+ If you change this file, tell the user.
35
+ `;
36
+ const DEFAULT_USER_CONTENT = `# USER.md - About Your Human
37
+ Learn about the person you're helping. Update this as you go.
38
+
39
+ Name:
40
+ What to call them:
41
+ Pronouns: (optional)
42
+ Timezone:
43
+ Notes:
44
+
45
+ ## Context
46
+ What do they care about? What projects are they working on?
47
+ What annoys them? What makes them laugh?
48
+
49
+ Learn enough to help well, but do not build a dossier.
50
+ `;
51
+ const DEFAULT_BOOTSTRAP_CONTENT = `# BOOTSTRAP.md - Hello, World
52
+ You just woke up. Time to figure out who you are.
53
+
54
+ If memory files do not exist yet, that is normal for a fresh workspace.
55
+
56
+ ## First Conversation
57
+ Start naturally, then learn:
58
+ - Your name
59
+ - Your nature (assistant/agent/other)
60
+ - Your vibe
61
+ - Your signature emoji
62
+
63
+ If the user is unsure, offer a few options.
64
+
65
+ ## After Identity
66
+ Update:
67
+ - IDENTITY.md
68
+ - USER.md
69
+
70
+ Then review SOUL.md together:
71
+ - What matters to them
72
+ - Preferred behavior
73
+ - Boundaries
74
+
75
+ When done, BOOTSTRAP.md can be deleted.
76
+ `;
77
+ export async function ensureAgentWorkspaceFiles(workspacePath) {
78
+ const resolvedWorkspace = resolveWorkspacePath(workspacePath);
79
+ await fs.mkdir(resolvedWorkspace, { recursive: true });
80
+ const created = [];
81
+ if (await writeFileIfMissing(path.join(resolvedWorkspace, SOUL_FILE), DEFAULT_SOUL_CONTENT)) {
82
+ created.push(SOUL_FILE);
83
+ }
84
+ if (await writeFileIfMissing(path.join(resolvedWorkspace, USER_FILE), DEFAULT_USER_CONTENT)) {
85
+ created.push(USER_FILE);
86
+ }
87
+ if (await writeFileIfMissing(path.join(resolvedWorkspace, BOOTSTRAP_FILE), DEFAULT_BOOTSTRAP_CONTENT)) {
88
+ created.push(BOOTSTRAP_FILE);
89
+ }
90
+ await fs.mkdir(path.join(resolvedWorkspace, MEMORY_DIR), { recursive: true });
91
+ return {
92
+ workspacePath: resolvedWorkspace,
93
+ created,
94
+ };
95
+ }
96
+ export async function loadAgentWorkspaceState(workspacePath) {
97
+ const resolvedWorkspace = resolveWorkspacePath(workspacePath);
98
+ const today = formatDateLocal(new Date());
99
+ const yesterdayDate = new Date();
100
+ yesterdayDate.setDate(yesterdayDate.getDate() - 1);
101
+ const yesterday = formatDateLocal(yesterdayDate);
102
+ const soulPath = path.join(resolvedWorkspace, SOUL_FILE);
103
+ const bootstrapPath = path.join(resolvedWorkspace, BOOTSTRAP_FILE);
104
+ const identityPath = path.join(resolvedWorkspace, IDENTITY_FILE);
105
+ const userPath = path.join(resolvedWorkspace, USER_FILE);
106
+ const memoryIndexPath = path.join(resolvedWorkspace, MEMORY_INDEX_FILE);
107
+ const todayMemoryPath = path.join(resolvedWorkspace, MEMORY_DIR, `${today}.md`);
108
+ const yesterdayMemoryPath = path.join(resolvedWorkspace, MEMORY_DIR, `${yesterday}.md`);
109
+ const [soul, bootstrap, identity, user, memoryIndex, todayMemory, yesterdayMemory] = await Promise.all([
110
+ readContextFile(soulPath),
111
+ readContextFile(bootstrapPath),
112
+ readContextFile(identityPath),
113
+ readContextFile(userPath),
114
+ readContextFile(memoryIndexPath),
115
+ readContextFile(todayMemoryPath),
116
+ readContextFile(yesterdayMemoryPath),
117
+ ]);
118
+ return {
119
+ workspacePath: resolvedWorkspace,
120
+ soul,
121
+ bootstrap,
122
+ identity,
123
+ user,
124
+ memoryIndex,
125
+ todayMemory,
126
+ yesterdayMemory,
127
+ onboardingRequired: !hasIdentityProfile(identity.content),
128
+ };
129
+ }
130
+ export function resolveWorkspacePath(workspacePath) {
131
+ if (workspacePath.startsWith('~')) {
132
+ return path.join(os.homedir(), workspacePath.slice(1));
133
+ }
134
+ return workspacePath;
135
+ }
136
+ function formatDateLocal(date) {
137
+ const year = date.getFullYear();
138
+ const month = String(date.getMonth() + 1).padStart(2, '0');
139
+ const day = String(date.getDate()).padStart(2, '0');
140
+ return `${year}-${month}-${day}`;
141
+ }
142
+ async function writeFileIfMissing(filePath, content) {
143
+ try {
144
+ await fs.access(filePath);
145
+ return false;
146
+ }
147
+ catch {
148
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
149
+ await fs.writeFile(filePath, content, 'utf8');
150
+ return true;
151
+ }
152
+ }
153
+ async function readContextFile(filePath) {
154
+ try {
155
+ const raw = await fs.readFile(filePath, 'utf8');
156
+ if (raw.length <= FILE_PROMPT_LIMIT) {
157
+ return {
158
+ path: filePath,
159
+ exists: true,
160
+ content: raw,
161
+ truncated: false,
162
+ };
163
+ }
164
+ return {
165
+ path: filePath,
166
+ exists: true,
167
+ content: `${raw.slice(0, FILE_PROMPT_LIMIT)}\n[truncated]`,
168
+ truncated: true,
169
+ };
170
+ }
171
+ catch (error) {
172
+ if (isENOENT(error)) {
173
+ return {
174
+ path: filePath,
175
+ exists: false,
176
+ content: null,
177
+ truncated: false,
178
+ };
179
+ }
180
+ throw error;
181
+ }
182
+ }
183
+ function hasIdentityProfile(content) {
184
+ if (!content) {
185
+ return false;
186
+ }
187
+ const lines = content
188
+ .split(/\r?\n/g)
189
+ .map((line) => line.trim())
190
+ .filter(Boolean);
191
+ if (lines.length === 0) {
192
+ return false;
193
+ }
194
+ const keyPrefixes = ['name:', 'creature:', 'vibe:', 'signature emoji:'];
195
+ const hasFilledProfileField = keyPrefixes.some((prefix) => {
196
+ const line = lines.find((entry) => entry.toLowerCase().startsWith(prefix));
197
+ if (!line) {
198
+ return false;
199
+ }
200
+ return line.slice(prefix.length).trim().length > 0;
201
+ });
202
+ return hasFilledProfileField || content.trim().length >= 40;
203
+ }
204
+ function isENOENT(error) {
205
+ return (typeof error === 'object' &&
206
+ error !== null &&
207
+ 'code' in error &&
208
+ error.code === 'ENOENT');
209
+ }
210
+ //# sourceMappingURL=agentWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentWorkspace.js","sourceRoot":"","sources":["../../src/workspace/agentWorkspace.ts"],"names":[],"mappings":"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"}