@blackms/aistack 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 (214) hide show
  1. package/README.md +244 -0
  2. package/dist/agents/definitions/analyst.d.ts +6 -0
  3. package/dist/agents/definitions/analyst.d.ts.map +1 -0
  4. package/dist/agents/definitions/analyst.js +53 -0
  5. package/dist/agents/definitions/analyst.js.map +1 -0
  6. package/dist/agents/definitions/architect.d.ts +6 -0
  7. package/dist/agents/definitions/architect.d.ts.map +1 -0
  8. package/dist/agents/definitions/architect.js +46 -0
  9. package/dist/agents/definitions/architect.js.map +1 -0
  10. package/dist/agents/definitions/coder.d.ts +6 -0
  11. package/dist/agents/definitions/coder.d.ts.map +1 -0
  12. package/dist/agents/definitions/coder.js +39 -0
  13. package/dist/agents/definitions/coder.js.map +1 -0
  14. package/dist/agents/definitions/coordinator.d.ts +6 -0
  15. package/dist/agents/definitions/coordinator.d.ts.map +1 -0
  16. package/dist/agents/definitions/coordinator.js +54 -0
  17. package/dist/agents/definitions/coordinator.js.map +1 -0
  18. package/dist/agents/definitions/index.d.ts +11 -0
  19. package/dist/agents/definitions/index.d.ts.map +1 -0
  20. package/dist/agents/definitions/index.js +11 -0
  21. package/dist/agents/definitions/index.js.map +1 -0
  22. package/dist/agents/definitions/researcher.d.ts +6 -0
  23. package/dist/agents/definitions/researcher.d.ts.map +1 -0
  24. package/dist/agents/definitions/researcher.js +39 -0
  25. package/dist/agents/definitions/researcher.js.map +1 -0
  26. package/dist/agents/definitions/reviewer.d.ts +6 -0
  27. package/dist/agents/definitions/reviewer.d.ts.map +1 -0
  28. package/dist/agents/definitions/reviewer.js +46 -0
  29. package/dist/agents/definitions/reviewer.js.map +1 -0
  30. package/dist/agents/definitions/tester.d.ts +6 -0
  31. package/dist/agents/definitions/tester.d.ts.map +1 -0
  32. package/dist/agents/definitions/tester.js +44 -0
  33. package/dist/agents/definitions/tester.js.map +1 -0
  34. package/dist/agents/index.d.ts +7 -0
  35. package/dist/agents/index.d.ts.map +1 -0
  36. package/dist/agents/index.js +7 -0
  37. package/dist/agents/index.js.map +1 -0
  38. package/dist/agents/registry.d.ts +41 -0
  39. package/dist/agents/registry.d.ts.map +1 -0
  40. package/dist/agents/registry.js +107 -0
  41. package/dist/agents/registry.js.map +1 -0
  42. package/dist/agents/spawner.d.ts +62 -0
  43. package/dist/agents/spawner.d.ts.map +1 -0
  44. package/dist/agents/spawner.js +169 -0
  45. package/dist/agents/spawner.js.map +1 -0
  46. package/dist/cli/commands/agent.d.ts +6 -0
  47. package/dist/cli/commands/agent.d.ts.map +1 -0
  48. package/dist/cli/commands/agent.js +144 -0
  49. package/dist/cli/commands/agent.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +10 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +10 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +50 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +6 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +82 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/memory.d.ts +6 -0
  63. package/dist/cli/commands/memory.d.ts.map +1 -0
  64. package/dist/cli/commands/memory.js +157 -0
  65. package/dist/cli/commands/memory.js.map +1 -0
  66. package/dist/cli/commands/plugin.d.ts +6 -0
  67. package/dist/cli/commands/plugin.d.ts.map +1 -0
  68. package/dist/cli/commands/plugin.js +146 -0
  69. package/dist/cli/commands/plugin.js.map +1 -0
  70. package/dist/cli/commands/status.d.ts +6 -0
  71. package/dist/cli/commands/status.d.ts.map +1 -0
  72. package/dist/cli/commands/status.js +115 -0
  73. package/dist/cli/commands/status.js.map +1 -0
  74. package/dist/cli/index.d.ts +6 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +41 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/coordination/index.d.ts +7 -0
  79. package/dist/coordination/index.d.ts.map +1 -0
  80. package/dist/coordination/index.js +7 -0
  81. package/dist/coordination/index.js.map +1 -0
  82. package/dist/coordination/message-bus.d.ts +64 -0
  83. package/dist/coordination/message-bus.d.ts.map +1 -0
  84. package/dist/coordination/message-bus.js +148 -0
  85. package/dist/coordination/message-bus.js.map +1 -0
  86. package/dist/coordination/task-queue.d.ts +71 -0
  87. package/dist/coordination/task-queue.d.ts.map +1 -0
  88. package/dist/coordination/task-queue.js +140 -0
  89. package/dist/coordination/task-queue.js.map +1 -0
  90. package/dist/coordination/topology.d.ts +68 -0
  91. package/dist/coordination/topology.d.ts.map +1 -0
  92. package/dist/coordination/topology.js +195 -0
  93. package/dist/coordination/topology.js.map +1 -0
  94. package/dist/github/client.d.ts +56 -0
  95. package/dist/github/client.d.ts.map +1 -0
  96. package/dist/github/client.js +179 -0
  97. package/dist/github/client.js.map +1 -0
  98. package/dist/github/index.d.ts +5 -0
  99. package/dist/github/index.d.ts.map +1 -0
  100. package/dist/github/index.js +5 -0
  101. package/dist/github/index.js.map +1 -0
  102. package/dist/hooks/index.d.ts +29 -0
  103. package/dist/hooks/index.d.ts.map +1 -0
  104. package/dist/hooks/index.js +112 -0
  105. package/dist/hooks/index.js.map +1 -0
  106. package/dist/hooks/session.d.ts +16 -0
  107. package/dist/hooks/session.d.ts.map +1 -0
  108. package/dist/hooks/session.js +60 -0
  109. package/dist/hooks/session.js.map +1 -0
  110. package/dist/hooks/task.d.ts +16 -0
  111. package/dist/hooks/task.d.ts.map +1 -0
  112. package/dist/hooks/task.js +82 -0
  113. package/dist/hooks/task.js.map +1 -0
  114. package/dist/index.d.ts +16 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +32 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/mcp/index.d.ts +6 -0
  119. package/dist/mcp/index.d.ts.map +1 -0
  120. package/dist/mcp/index.js +6 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/server.d.ts +22 -0
  123. package/dist/mcp/server.d.ts.map +1 -0
  124. package/dist/mcp/server.js +128 -0
  125. package/dist/mcp/server.js.map +1 -0
  126. package/dist/mcp/tools/agent-tools.d.ts +174 -0
  127. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  128. package/dist/mcp/tools/agent-tools.js +214 -0
  129. package/dist/mcp/tools/agent-tools.js.map +1 -0
  130. package/dist/mcp/tools/github-tools.d.ts +229 -0
  131. package/dist/mcp/tools/github-tools.d.ts.map +1 -0
  132. package/dist/mcp/tools/github-tools.js +286 -0
  133. package/dist/mcp/tools/github-tools.js.map +1 -0
  134. package/dist/mcp/tools/index.d.ts +10 -0
  135. package/dist/mcp/tools/index.d.ts.map +1 -0
  136. package/dist/mcp/tools/index.js +10 -0
  137. package/dist/mcp/tools/index.js.map +1 -0
  138. package/dist/mcp/tools/memory-tools.d.ts +190 -0
  139. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  140. package/dist/mcp/tools/memory-tools.js +207 -0
  141. package/dist/mcp/tools/memory-tools.js.map +1 -0
  142. package/dist/mcp/tools/session-tools.d.ts +116 -0
  143. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  144. package/dist/mcp/tools/session-tools.js +151 -0
  145. package/dist/mcp/tools/session-tools.js.map +1 -0
  146. package/dist/mcp/tools/system-tools.d.ts +98 -0
  147. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  148. package/dist/mcp/tools/system-tools.js +165 -0
  149. package/dist/mcp/tools/system-tools.js.map +1 -0
  150. package/dist/mcp/tools/task-tools.d.ts +170 -0
  151. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  152. package/dist/mcp/tools/task-tools.js +188 -0
  153. package/dist/mcp/tools/task-tools.js.map +1 -0
  154. package/dist/memory/fts-search.d.ts +46 -0
  155. package/dist/memory/fts-search.d.ts.map +1 -0
  156. package/dist/memory/fts-search.js +136 -0
  157. package/dist/memory/fts-search.js.map +1 -0
  158. package/dist/memory/index.d.ts +77 -0
  159. package/dist/memory/index.d.ts.map +1 -0
  160. package/dist/memory/index.js +203 -0
  161. package/dist/memory/index.js.map +1 -0
  162. package/dist/memory/sqlite-store.d.ts +36 -0
  163. package/dist/memory/sqlite-store.d.ts.map +1 -0
  164. package/dist/memory/sqlite-store.js +371 -0
  165. package/dist/memory/sqlite-store.js.map +1 -0
  166. package/dist/memory/vector-search.d.ts +43 -0
  167. package/dist/memory/vector-search.d.ts.map +1 -0
  168. package/dist/memory/vector-search.js +179 -0
  169. package/dist/memory/vector-search.js.map +1 -0
  170. package/dist/plugins/index.d.ts +7 -0
  171. package/dist/plugins/index.d.ts.map +1 -0
  172. package/dist/plugins/index.js +7 -0
  173. package/dist/plugins/index.js.map +1 -0
  174. package/dist/plugins/loader.d.ts +33 -0
  175. package/dist/plugins/loader.d.ts.map +1 -0
  176. package/dist/plugins/loader.js +147 -0
  177. package/dist/plugins/loader.js.map +1 -0
  178. package/dist/plugins/registry.d.ts +48 -0
  179. package/dist/plugins/registry.d.ts.map +1 -0
  180. package/dist/plugins/registry.js +72 -0
  181. package/dist/plugins/registry.js.map +1 -0
  182. package/dist/plugins/types.d.ts +5 -0
  183. package/dist/plugins/types.d.ts.map +1 -0
  184. package/dist/plugins/types.js +5 -0
  185. package/dist/plugins/types.js.map +1 -0
  186. package/dist/providers/index.d.ts +49 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +254 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/types.d.ts +189 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +10 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/config.d.ts +32 -0
  195. package/dist/utils/config.d.ts.map +1 -0
  196. package/dist/utils/config.js +194 -0
  197. package/dist/utils/config.js.map +1 -0
  198. package/dist/utils/embeddings.d.ts +23 -0
  199. package/dist/utils/embeddings.d.ts.map +1 -0
  200. package/dist/utils/embeddings.js +151 -0
  201. package/dist/utils/embeddings.js.map +1 -0
  202. package/dist/utils/index.d.ts +8 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +8 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/logger.d.ts +24 -0
  207. package/dist/utils/logger.d.ts.map +1 -0
  208. package/dist/utils/logger.js +96 -0
  209. package/dist/utils/logger.js.map +1 -0
  210. package/dist/utils/validation.d.ts +264 -0
  211. package/dist/utils/validation.d.ts.map +1 -0
  212. package/dist/utils/validation.js +144 -0
  213. package/dist/utils/validation.js.map +1 -0
  214. package/package.json +84 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Plugin loader - discover and load plugins
3
+ */
4
+ import type { AgentStackPlugin, AgentStackConfig } from '../types.js';
5
+ /**
6
+ * Load a plugin from a path
7
+ */
8
+ export declare function loadPlugin(path: string, config: AgentStackConfig): Promise<AgentStackPlugin | null>;
9
+ /**
10
+ * Discover and load plugins from directory
11
+ */
12
+ export declare function discoverPlugins(config: AgentStackConfig): Promise<number>;
13
+ /**
14
+ * Get a loaded plugin by name
15
+ */
16
+ export declare function getPlugin(name: string): AgentStackPlugin | null;
17
+ /**
18
+ * List all loaded plugins
19
+ */
20
+ export declare function listPlugins(): AgentStackPlugin[];
21
+ /**
22
+ * Unload a plugin
23
+ */
24
+ export declare function unloadPlugin(name: string): Promise<boolean>;
25
+ /**
26
+ * Get plugin count
27
+ */
28
+ export declare function getPluginCount(): number;
29
+ /**
30
+ * Clear all plugins (for testing)
31
+ */
32
+ export declare function clearPlugins(): Promise<void>;
33
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAStE;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAuClC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,gBAAgB,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBjE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Plugin loader - discover and load plugins
3
+ */
4
+ import { existsSync, readdirSync, statSync, readFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { registerAgent } from '../agents/registry.js';
7
+ import { logger } from '../utils/logger.js';
8
+ const log = logger.child('plugins');
9
+ // Loaded plugins
10
+ const plugins = new Map();
11
+ /**
12
+ * Load a plugin from a path
13
+ */
14
+ export async function loadPlugin(path, config) {
15
+ try {
16
+ // Import the plugin module
17
+ const module = await import(path);
18
+ const plugin = module.default;
19
+ if (!plugin || !plugin.name || !plugin.version) {
20
+ log.error('Invalid plugin format', { path });
21
+ return null;
22
+ }
23
+ // Initialize plugin if it has an init function
24
+ if (plugin.init) {
25
+ await plugin.init(config);
26
+ }
27
+ // Register agents from plugin
28
+ if (plugin.agents) {
29
+ for (const agent of plugin.agents) {
30
+ registerAgent(agent);
31
+ }
32
+ }
33
+ plugins.set(plugin.name, plugin);
34
+ log.info('Loaded plugin', {
35
+ name: plugin.name,
36
+ version: plugin.version,
37
+ agents: plugin.agents?.length ?? 0,
38
+ tools: plugin.tools?.length ?? 0,
39
+ });
40
+ return plugin;
41
+ }
42
+ catch (error) {
43
+ log.error('Failed to load plugin', {
44
+ path,
45
+ error: error instanceof Error ? error.message : String(error),
46
+ });
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Discover and load plugins from directory
52
+ */
53
+ export async function discoverPlugins(config) {
54
+ if (!config.plugins.enabled) {
55
+ log.debug('Plugins disabled');
56
+ return 0;
57
+ }
58
+ const pluginDir = config.plugins.directory;
59
+ if (!existsSync(pluginDir)) {
60
+ log.debug('Plugin directory not found', { path: pluginDir });
61
+ return 0;
62
+ }
63
+ let loaded = 0;
64
+ const entries = readdirSync(pluginDir);
65
+ for (const entry of entries) {
66
+ const entryPath = join(pluginDir, entry);
67
+ if (!statSync(entryPath).isDirectory()) {
68
+ continue;
69
+ }
70
+ // Look for package.json
71
+ const packagePath = join(entryPath, 'package.json');
72
+ if (!existsSync(packagePath)) {
73
+ continue;
74
+ }
75
+ try {
76
+ const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
77
+ // Determine entry point
78
+ const mainFile = pkg.module ?? pkg.main ?? 'index.js';
79
+ const mainPath = join(entryPath, mainFile);
80
+ if (existsSync(mainPath)) {
81
+ const plugin = await loadPlugin(mainPath, config);
82
+ if (plugin) {
83
+ loaded++;
84
+ }
85
+ }
86
+ }
87
+ catch (error) {
88
+ log.warn('Failed to read plugin package', {
89
+ path: packagePath,
90
+ error: error instanceof Error ? error.message : String(error),
91
+ });
92
+ }
93
+ }
94
+ log.info('Discovered plugins', { count: loaded, directory: pluginDir });
95
+ return loaded;
96
+ }
97
+ /**
98
+ * Get a loaded plugin by name
99
+ */
100
+ export function getPlugin(name) {
101
+ return plugins.get(name) ?? null;
102
+ }
103
+ /**
104
+ * List all loaded plugins
105
+ */
106
+ export function listPlugins() {
107
+ return Array.from(plugins.values());
108
+ }
109
+ /**
110
+ * Unload a plugin
111
+ */
112
+ export async function unloadPlugin(name) {
113
+ const plugin = plugins.get(name);
114
+ if (!plugin) {
115
+ return false;
116
+ }
117
+ // Call cleanup if defined
118
+ if (plugin.cleanup) {
119
+ try {
120
+ await plugin.cleanup();
121
+ }
122
+ catch (error) {
123
+ log.warn('Plugin cleanup failed', {
124
+ name,
125
+ error: error instanceof Error ? error.message : String(error),
126
+ });
127
+ }
128
+ }
129
+ plugins.delete(name);
130
+ log.info('Unloaded plugin', { name });
131
+ return true;
132
+ }
133
+ /**
134
+ * Get plugin count
135
+ */
136
+ export function getPluginCount() {
137
+ return plugins.size;
138
+ }
139
+ /**
140
+ * Clear all plugins (for testing)
141
+ */
142
+ export async function clearPlugins() {
143
+ for (const name of plugins.keys()) {
144
+ await unloadPlugin(name);
145
+ }
146
+ }
147
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAEpC,iBAAiB;AACjB,MAAM,OAAO,GAAkC,IAAI,GAAG,EAAE,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,MAAwB;IAExB,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/C,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,8BAA8B;QAC9B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;YAClC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;SACjC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACjC,IAAI;YACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAwB;IAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAE3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,wBAAwB;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAGxD,CAAC;YAEF,wBAAwB;YACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAE3C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBACxC,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAChC,IAAI;gBACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Plugin registry - track installed plugins
3
+ */
4
+ import type { AgentStackPlugin } from '../types.js';
5
+ interface PluginEntry {
6
+ name: string;
7
+ version: string;
8
+ enabled: boolean;
9
+ installedAt: Date;
10
+ config?: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * Register a plugin in the registry
14
+ */
15
+ export declare function registerPluginEntry(plugin: AgentStackPlugin): void;
16
+ /**
17
+ * Get a plugin entry from the registry
18
+ */
19
+ export declare function getPluginEntry(name: string): PluginEntry | null;
20
+ /**
21
+ * List all registered plugins
22
+ */
23
+ export declare function listPluginEntries(): PluginEntry[];
24
+ /**
25
+ * Update plugin enabled status
26
+ */
27
+ export declare function setPluginEnabled(name: string, enabled: boolean): boolean;
28
+ /**
29
+ * Update plugin config
30
+ */
31
+ export declare function setPluginConfig(name: string, config: Record<string, unknown>): boolean;
32
+ /**
33
+ * Remove a plugin from the registry
34
+ */
35
+ export declare function removePluginEntry(name: string): boolean;
36
+ /**
37
+ * Check if a plugin is registered
38
+ */
39
+ export declare function isPluginRegistered(name: string): boolean;
40
+ /**
41
+ * Get the count of registered plugins
42
+ */
43
+ export declare function getRegisteredPluginCount(): {
44
+ total: number;
45
+ enabled: number;
46
+ };
47
+ export {};
48
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAKxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAKtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAM7E"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Plugin registry - track installed plugins
3
+ */
4
+ // In-memory registry (could be persisted to SQLite)
5
+ const registry = new Map();
6
+ /**
7
+ * Register a plugin in the registry
8
+ */
9
+ export function registerPluginEntry(plugin) {
10
+ registry.set(plugin.name, {
11
+ name: plugin.name,
12
+ version: plugin.version,
13
+ enabled: true,
14
+ installedAt: new Date(),
15
+ });
16
+ }
17
+ /**
18
+ * Get a plugin entry from the registry
19
+ */
20
+ export function getPluginEntry(name) {
21
+ return registry.get(name) ?? null;
22
+ }
23
+ /**
24
+ * List all registered plugins
25
+ */
26
+ export function listPluginEntries() {
27
+ return Array.from(registry.values());
28
+ }
29
+ /**
30
+ * Update plugin enabled status
31
+ */
32
+ export function setPluginEnabled(name, enabled) {
33
+ const entry = registry.get(name);
34
+ if (!entry)
35
+ return false;
36
+ entry.enabled = enabled;
37
+ return true;
38
+ }
39
+ /**
40
+ * Update plugin config
41
+ */
42
+ export function setPluginConfig(name, config) {
43
+ const entry = registry.get(name);
44
+ if (!entry)
45
+ return false;
46
+ entry.config = config;
47
+ return true;
48
+ }
49
+ /**
50
+ * Remove a plugin from the registry
51
+ */
52
+ export function removePluginEntry(name) {
53
+ return registry.delete(name);
54
+ }
55
+ /**
56
+ * Check if a plugin is registered
57
+ */
58
+ export function isPluginRegistered(name) {
59
+ return registry.has(name);
60
+ }
61
+ /**
62
+ * Get the count of registered plugins
63
+ */
64
+ export function getRegisteredPluginCount() {
65
+ let enabled = 0;
66
+ for (const entry of registry.values()) {
67
+ if (entry.enabled)
68
+ enabled++;
69
+ }
70
+ return { total: registry.size, enabled };
71
+ }
72
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,oDAAoD;AACpD,MAAM,QAAQ,GAA6B,IAAI,GAAG,EAAE,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC1D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI,IAAI,EAAE;KACxB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAgB;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAA+B;IAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Plugin types - re-export from main types
3
+ */
4
+ export type { AgentStackPlugin, MCPToolDefinition, HookDefinition, ProviderDefinition, } from '../types.js';
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Plugin types - re-export from main types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * LLM Provider interface and implementations
3
+ */
4
+ import type { LLMProvider, ChatMessage, ChatOptions, ChatResponse, AgentStackConfig } from '../types.js';
5
+ /**
6
+ * Anthropic Claude provider
7
+ */
8
+ export declare class AnthropicProvider implements LLMProvider {
9
+ name: string;
10
+ private apiKey;
11
+ private defaultModel;
12
+ constructor(apiKey: string, model?: string);
13
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
14
+ }
15
+ /**
16
+ * OpenAI provider
17
+ */
18
+ export declare class OpenAIProvider implements LLMProvider {
19
+ name: string;
20
+ private apiKey;
21
+ private defaultModel;
22
+ constructor(apiKey: string, model?: string);
23
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
24
+ embed(text: string): Promise<number[]>;
25
+ }
26
+ /**
27
+ * Ollama provider (local)
28
+ */
29
+ export declare class OllamaProvider implements LLMProvider {
30
+ name: string;
31
+ private baseUrl;
32
+ private defaultModel;
33
+ constructor(baseUrl?: string, model?: string);
34
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
35
+ embed(text: string): Promise<number[]>;
36
+ }
37
+ /**
38
+ * Create a provider based on configuration
39
+ */
40
+ export declare function createProvider(config: AgentStackConfig): LLMProvider;
41
+ /**
42
+ * Register a custom provider
43
+ */
44
+ export declare function registerProvider(name: string, provider: LLMProvider): void;
45
+ /**
46
+ * Get a provider by name
47
+ */
48
+ export declare function getProvider(name: string, config: AgentStackConfig): LLMProvider | null;
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKzG;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKpC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CA0DlF;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKpC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA6C3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CA6B7C;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKtC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA8C3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAwB7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CA4BpE;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAG1E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAwBtF"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * LLM Provider interface and implementations
3
+ */
4
+ import { logger } from '../utils/logger.js';
5
+ const log = logger.child('providers');
6
+ /**
7
+ * Anthropic Claude provider
8
+ */
9
+ export class AnthropicProvider {
10
+ name = 'anthropic';
11
+ apiKey;
12
+ defaultModel;
13
+ constructor(apiKey, model) {
14
+ this.apiKey = apiKey;
15
+ this.defaultModel = model ?? 'claude-sonnet-4-20250514';
16
+ }
17
+ async chat(messages, options) {
18
+ const model = options?.model ?? this.defaultModel;
19
+ // Convert messages format for Anthropic API
20
+ const systemMessage = messages.find(m => m.role === 'system');
21
+ const otherMessages = messages.filter(m => m.role !== 'system');
22
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
23
+ method: 'POST',
24
+ headers: {
25
+ 'Content-Type': 'application/json',
26
+ 'x-api-key': this.apiKey,
27
+ 'anthropic-version': '2023-06-01',
28
+ },
29
+ body: JSON.stringify({
30
+ model,
31
+ max_tokens: options?.maxTokens ?? 4096,
32
+ system: systemMessage?.content,
33
+ messages: otherMessages.map(m => ({
34
+ role: m.role,
35
+ content: m.content,
36
+ })),
37
+ temperature: options?.temperature,
38
+ stop_sequences: options?.stopSequences,
39
+ }),
40
+ });
41
+ if (!response.ok) {
42
+ const error = await response.text();
43
+ throw new Error(`Anthropic API error: ${response.status} - ${error}`);
44
+ }
45
+ const data = await response.json();
46
+ const textContent = data.content.find(c => c.type === 'text');
47
+ return {
48
+ content: textContent?.text ?? '',
49
+ model: data.model,
50
+ usage: {
51
+ inputTokens: data.usage.input_tokens,
52
+ outputTokens: data.usage.output_tokens,
53
+ },
54
+ };
55
+ }
56
+ }
57
+ /**
58
+ * OpenAI provider
59
+ */
60
+ export class OpenAIProvider {
61
+ name = 'openai';
62
+ apiKey;
63
+ defaultModel;
64
+ constructor(apiKey, model) {
65
+ this.apiKey = apiKey;
66
+ this.defaultModel = model ?? 'gpt-4o';
67
+ }
68
+ async chat(messages, options) {
69
+ const model = options?.model ?? this.defaultModel;
70
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
71
+ method: 'POST',
72
+ headers: {
73
+ 'Content-Type': 'application/json',
74
+ 'Authorization': `Bearer ${this.apiKey}`,
75
+ },
76
+ body: JSON.stringify({
77
+ model,
78
+ messages,
79
+ max_tokens: options?.maxTokens ?? 4096,
80
+ temperature: options?.temperature,
81
+ stop: options?.stopSequences,
82
+ }),
83
+ });
84
+ if (!response.ok) {
85
+ const error = await response.text();
86
+ throw new Error(`OpenAI API error: ${response.status} - ${error}`);
87
+ }
88
+ const data = await response.json();
89
+ const choice = data.choices[0];
90
+ return {
91
+ content: choice?.message.content ?? '',
92
+ model: data.model,
93
+ usage: {
94
+ inputTokens: data.usage.prompt_tokens,
95
+ outputTokens: data.usage.completion_tokens,
96
+ },
97
+ };
98
+ }
99
+ async embed(text) {
100
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
101
+ method: 'POST',
102
+ headers: {
103
+ 'Content-Type': 'application/json',
104
+ 'Authorization': `Bearer ${this.apiKey}`,
105
+ },
106
+ body: JSON.stringify({
107
+ model: 'text-embedding-3-small',
108
+ input: text,
109
+ }),
110
+ });
111
+ if (!response.ok) {
112
+ const error = await response.text();
113
+ throw new Error(`OpenAI API error: ${response.status} - ${error}`);
114
+ }
115
+ const data = await response.json();
116
+ const embedding = data.data[0]?.embedding;
117
+ if (!embedding) {
118
+ throw new Error('No embedding returned');
119
+ }
120
+ return embedding;
121
+ }
122
+ }
123
+ /**
124
+ * Ollama provider (local)
125
+ */
126
+ export class OllamaProvider {
127
+ name = 'ollama';
128
+ baseUrl;
129
+ defaultModel;
130
+ constructor(baseUrl, model) {
131
+ this.baseUrl = baseUrl ?? 'http://localhost:11434';
132
+ this.defaultModel = model ?? 'llama3.2';
133
+ }
134
+ async chat(messages, options) {
135
+ const model = options?.model ?? this.defaultModel;
136
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
137
+ method: 'POST',
138
+ headers: {
139
+ 'Content-Type': 'application/json',
140
+ },
141
+ body: JSON.stringify({
142
+ model,
143
+ messages,
144
+ stream: false,
145
+ options: {
146
+ temperature: options?.temperature,
147
+ num_predict: options?.maxTokens,
148
+ stop: options?.stopSequences,
149
+ },
150
+ }),
151
+ });
152
+ if (!response.ok) {
153
+ const error = await response.text();
154
+ throw new Error(`Ollama API error: ${response.status} - ${error}`);
155
+ }
156
+ const data = await response.json();
157
+ return {
158
+ content: data.message.content,
159
+ model: data.model,
160
+ usage: data.eval_count
161
+ ? {
162
+ inputTokens: data.prompt_eval_count ?? 0,
163
+ outputTokens: data.eval_count,
164
+ }
165
+ : undefined,
166
+ };
167
+ }
168
+ async embed(text) {
169
+ const response = await fetch(`${this.baseUrl}/api/embeddings`, {
170
+ method: 'POST',
171
+ headers: {
172
+ 'Content-Type': 'application/json',
173
+ },
174
+ body: JSON.stringify({
175
+ model: 'nomic-embed-text',
176
+ prompt: text,
177
+ }),
178
+ });
179
+ if (!response.ok) {
180
+ const error = await response.text();
181
+ throw new Error(`Ollama API error: ${response.status} - ${error}`);
182
+ }
183
+ const data = await response.json();
184
+ return data.embedding;
185
+ }
186
+ }
187
+ /**
188
+ * Create a provider based on configuration
189
+ */
190
+ export function createProvider(config) {
191
+ const defaultProvider = config.providers.default;
192
+ switch (defaultProvider) {
193
+ case 'anthropic': {
194
+ const anthropicConfig = config.providers.anthropic;
195
+ if (!anthropicConfig?.apiKey) {
196
+ throw new Error('Anthropic API key not configured');
197
+ }
198
+ return new AnthropicProvider(anthropicConfig.apiKey, anthropicConfig.model);
199
+ }
200
+ case 'openai': {
201
+ const openaiConfig = config.providers.openai;
202
+ if (!openaiConfig?.apiKey) {
203
+ throw new Error('OpenAI API key not configured');
204
+ }
205
+ return new OpenAIProvider(openaiConfig.apiKey, openaiConfig.model);
206
+ }
207
+ case 'ollama': {
208
+ const ollamaConfig = config.providers.ollama;
209
+ return new OllamaProvider(ollamaConfig?.baseUrl, ollamaConfig?.model);
210
+ }
211
+ default:
212
+ throw new Error(`Unknown provider: ${defaultProvider}`);
213
+ }
214
+ }
215
+ // Provider registry for custom providers
216
+ const customProviders = new Map();
217
+ /**
218
+ * Register a custom provider
219
+ */
220
+ export function registerProvider(name, provider) {
221
+ customProviders.set(name, provider);
222
+ log.info('Registered custom provider', { name });
223
+ }
224
+ /**
225
+ * Get a provider by name
226
+ */
227
+ export function getProvider(name, config) {
228
+ // Check custom providers first
229
+ const custom = customProviders.get(name);
230
+ if (custom)
231
+ return custom;
232
+ // Check built-in providers
233
+ switch (name) {
234
+ case 'anthropic': {
235
+ const anthropicConfig = config.providers.anthropic;
236
+ if (!anthropicConfig?.apiKey)
237
+ return null;
238
+ return new AnthropicProvider(anthropicConfig.apiKey, anthropicConfig.model);
239
+ }
240
+ case 'openai': {
241
+ const openaiConfig = config.providers.openai;
242
+ if (!openaiConfig?.apiKey)
243
+ return null;
244
+ return new OpenAIProvider(openaiConfig.apiKey, openaiConfig.model);
245
+ }
246
+ case 'ollama': {
247
+ const ollamaConfig = config.providers.ollama;
248
+ return new OllamaProvider(ollamaConfig?.baseUrl, ollamaConfig?.model);
249
+ }
250
+ default:
251
+ return null;
252
+ }
253
+ }
254
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}