@sashabogi/foundation 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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/dist/cli.d.ts +12 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +308 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +32 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +78 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/services/config.service.d.ts +92 -0
  12. package/dist/services/config.service.d.ts.map +1 -0
  13. package/dist/services/config.service.js +284 -0
  14. package/dist/services/config.service.js.map +1 -0
  15. package/dist/services/git.service.d.ts +175 -0
  16. package/dist/services/git.service.d.ts.map +1 -0
  17. package/dist/services/git.service.js +395 -0
  18. package/dist/services/git.service.js.map +1 -0
  19. package/dist/services/provider.service.d.ts +74 -0
  20. package/dist/services/provider.service.d.ts.map +1 -0
  21. package/dist/services/provider.service.js +182 -0
  22. package/dist/services/provider.service.js.map +1 -0
  23. package/dist/services/storage.service.d.ts +84 -0
  24. package/dist/services/storage.service.d.ts.map +1 -0
  25. package/dist/services/storage.service.js +320 -0
  26. package/dist/services/storage.service.js.map +1 -0
  27. package/dist/tools/demerzel/index.d.ts +21 -0
  28. package/dist/tools/demerzel/index.d.ts.map +1 -0
  29. package/dist/tools/demerzel/index.js +166 -0
  30. package/dist/tools/demerzel/index.js.map +1 -0
  31. package/dist/tools/gaia/index.d.ts +27 -0
  32. package/dist/tools/gaia/index.d.ts.map +1 -0
  33. package/dist/tools/gaia/index.js +466 -0
  34. package/dist/tools/gaia/index.js.map +1 -0
  35. package/dist/tools/seldon/index.d.ts +43 -0
  36. package/dist/tools/seldon/index.d.ts.map +1 -0
  37. package/dist/tools/seldon/index.js +886 -0
  38. package/dist/tools/seldon/index.js.map +1 -0
  39. package/dist/types/index.d.ts +392 -0
  40. package/dist/types/index.d.ts.map +1 -0
  41. package/dist/types/index.js +10 -0
  42. package/dist/types/index.js.map +1 -0
  43. package/package.json +85 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * ProviderService - Multi-provider AI routing with failover
3
+ *
4
+ * Supports 13+ AI providers:
5
+ * - Anthropic (Claude)
6
+ * - OpenAI (GPT-4o, o1, o3)
7
+ * - Google (Gemini)
8
+ * - DeepSeek
9
+ * - Groq
10
+ * - Together
11
+ * - Fireworks
12
+ * - OpenRouter
13
+ * - Z.AI (GLM)
14
+ * - Kimi
15
+ * - Ollama (local)
16
+ * - Perplexity
17
+ *
18
+ * Features:
19
+ * - Automatic retry with exponential backoff
20
+ * - Health tracking per provider
21
+ * - Circuit breakers
22
+ * - Cost-aware routing
23
+ * - Session delegation for Anthropic
24
+ */
25
+ import { StorageService } from './storage.service.js';
26
+ export class ProviderService {
27
+ static instance;
28
+ config = null;
29
+ storage;
30
+ initialized = false;
31
+ constructor() {
32
+ this.storage = StorageService.getInstance();
33
+ }
34
+ static getInstance() {
35
+ if (!ProviderService.instance) {
36
+ ProviderService.instance = new ProviderService();
37
+ }
38
+ return ProviderService.instance;
39
+ }
40
+ /**
41
+ * Initialize with configuration
42
+ */
43
+ async init(config) {
44
+ if (this.initialized)
45
+ return;
46
+ this.config = config;
47
+ this.initialized = true;
48
+ }
49
+ /**
50
+ * Invoke an agent role with a task
51
+ */
52
+ async invoke(options) {
53
+ if (!this.config) {
54
+ throw new Error('ProviderService not initialized');
55
+ }
56
+ const roleConfig = this.config.roles[options.role];
57
+ if (!roleConfig) {
58
+ throw new Error(`Unknown role: ${options.role}`);
59
+ }
60
+ const startTime = Date.now();
61
+ try {
62
+ // Get the provider for this role
63
+ const result = await this.invokeProvider(roleConfig, options);
64
+ // Update health tracking
65
+ this.storage.updateProviderHealth(roleConfig.provider, {
66
+ healthy: true,
67
+ lastCheck: Date.now(),
68
+ lastSuccess: Date.now(),
69
+ });
70
+ return {
71
+ success: true,
72
+ output: result,
73
+ provider: roleConfig.provider,
74
+ model: roleConfig.model || 'default',
75
+ latencyMs: Date.now() - startTime,
76
+ };
77
+ }
78
+ catch (error) {
79
+ // Update health tracking
80
+ this.storage.updateProviderHealth(roleConfig.provider, {
81
+ healthy: false,
82
+ lastCheck: Date.now(),
83
+ lastError: error.message,
84
+ });
85
+ // Try fallback chain if configured
86
+ if (roleConfig.fallback_chain?.length) {
87
+ return this.invokeWithFallback(roleConfig, options, startTime);
88
+ }
89
+ return {
90
+ success: false,
91
+ output: '',
92
+ provider: roleConfig.provider,
93
+ model: roleConfig.model || 'default',
94
+ latencyMs: Date.now() - startTime,
95
+ error: error.message,
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * Invoke with fallback chain
101
+ */
102
+ async invokeWithFallback(roleConfig, options, startTime) {
103
+ const failoverChain = [roleConfig.provider];
104
+ for (const fallback of roleConfig.fallback_chain || []) {
105
+ failoverChain.push(fallback.provider);
106
+ try {
107
+ const result = await this.invokeProvider({ ...roleConfig, provider: fallback.provider, model: fallback.model }, options);
108
+ return {
109
+ success: true,
110
+ output: result,
111
+ provider: fallback.provider,
112
+ model: fallback.model || 'default',
113
+ latencyMs: Date.now() - startTime,
114
+ failedOver: true,
115
+ failoverChain,
116
+ };
117
+ }
118
+ catch {
119
+ // Continue to next fallback
120
+ }
121
+ }
122
+ return {
123
+ success: false,
124
+ output: '',
125
+ provider: roleConfig.provider,
126
+ model: roleConfig.model || 'default',
127
+ latencyMs: Date.now() - startTime,
128
+ error: 'All providers in fallback chain failed',
129
+ failoverChain,
130
+ };
131
+ }
132
+ /**
133
+ * Invoke a specific provider
134
+ */
135
+ async invokeProvider(roleConfig, options) {
136
+ // TODO: Implement actual provider calls
137
+ // This is a stub that will be replaced with real implementations
138
+ // ported from hari-seldon
139
+ const provider = roleConfig.provider;
140
+ const model = roleConfig.model;
141
+ console.error(`[ProviderService] Would invoke ${provider}/${model} for role ${options.role}`);
142
+ console.error(`[ProviderService] Task: ${options.task.slice(0, 100)}...`);
143
+ // For now, return a placeholder
144
+ return `[Stub response from ${provider}/${model}] This is where the real AI response would go.`;
145
+ }
146
+ /**
147
+ * List available providers
148
+ */
149
+ listProviders() {
150
+ if (!this.config)
151
+ return [];
152
+ return Object.keys(this.config.providers);
153
+ }
154
+ /**
155
+ * Get health status for all providers
156
+ */
157
+ getProviderHealth() {
158
+ return this.storage.getProviderHealth();
159
+ }
160
+ /**
161
+ * Test a specific provider's connectivity
162
+ */
163
+ async testProvider(provider) {
164
+ const startTime = Date.now();
165
+ try {
166
+ // TODO: Implement actual connectivity test
167
+ console.error(`[ProviderService] Testing ${provider}...`);
168
+ return {
169
+ success: true,
170
+ latencyMs: Date.now() - startTime,
171
+ };
172
+ }
173
+ catch (error) {
174
+ return {
175
+ success: false,
176
+ latencyMs: Date.now() - startTime,
177
+ error: error.message,
178
+ };
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.service.js","sourceRoot":"","sources":["../../src/services/provider.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * StorageService - Unified persistence layer
3
+ *
4
+ * Manages JSON file storage for all Foundation modules:
5
+ * - Worktrees
6
+ * - Sessions
7
+ * - Learnings
8
+ * - Pipelines
9
+ * - Tasks
10
+ * - Context Snapshots
11
+ * - Provider Health
12
+ *
13
+ * Storage locations:
14
+ * - ~/.foundation/state/ (global state)
15
+ * - .foundation/ (project-specific state)
16
+ */
17
+ import type { Worktree, Session, Learning, Pipeline, Task, ContextSnapshot, ProviderHealth } from '../types/index.js';
18
+ export declare class StorageService {
19
+ private static instance;
20
+ private globalStateDir;
21
+ private projectStateDir;
22
+ private state;
23
+ private initialized;
24
+ private constructor();
25
+ static getInstance(): StorageService;
26
+ /**
27
+ * Initialize storage by loading existing state
28
+ */
29
+ init(): Promise<void>;
30
+ getWorktrees(): Worktree[];
31
+ getWorktree(id: string): Worktree | undefined;
32
+ getWorktreeByPath(path: string): Worktree | undefined;
33
+ getWorktreeByAlias(alias: string): Worktree | undefined;
34
+ addWorktree(worktree: Worktree): void;
35
+ updateWorktree(id: string, updates: Partial<Worktree>): void;
36
+ removeWorktree(id: string): void;
37
+ getSessions(): Session[];
38
+ getSession(id: string): Session | undefined;
39
+ getActiveSessions(): Session[];
40
+ addSession(session: Session): void;
41
+ updateSession(id: string, updates: Partial<Session>): void;
42
+ removeSession(id: string): void;
43
+ getLearnings(scope?: 'global' | 'project'): Learning[];
44
+ getLearning(id: string): Learning | undefined;
45
+ getPendingLearnings(scope?: 'global' | 'project'): Learning[];
46
+ addLearning(learning: Learning): void;
47
+ updateLearning(id: string, updates: Partial<Learning>): void;
48
+ removeLearning(id: string): void;
49
+ private saveLearnings;
50
+ getPipelines(): Pipeline[];
51
+ getPipeline(id: string): Pipeline | undefined;
52
+ getActivePipelines(): Pipeline[];
53
+ addPipeline(pipeline: Pipeline): void;
54
+ updatePipeline(id: string, updates: Partial<Pipeline>): void;
55
+ removePipeline(id: string): void;
56
+ getTasks(): Task[];
57
+ getTask(id: string): Task | undefined;
58
+ getTasksByPipeline(pipelineId: string): Task[];
59
+ addTask(task: Task): void;
60
+ updateTask(id: string, updates: Partial<Task>): void;
61
+ removeTask(id: string): void;
62
+ getSnapshots(): ContextSnapshot[];
63
+ getSnapshot(id: string): ContextSnapshot | undefined;
64
+ getSnapshotByName(name: string): ContextSnapshot | undefined;
65
+ addSnapshot(snapshot: ContextSnapshot): void;
66
+ removeSnapshot(id: string): void;
67
+ getProviderHealth(): ProviderHealth[];
68
+ getProviderHealthByName(provider: string): ProviderHealth | undefined;
69
+ updateProviderHealth(provider: string, updates: Partial<ProviderHealth>): void;
70
+ private ensureDir;
71
+ private getFilePath;
72
+ private loadFile;
73
+ private saveFile;
74
+ private mergeArrays;
75
+ /**
76
+ * Get the global state directory path
77
+ */
78
+ getGlobalStateDir(): string;
79
+ /**
80
+ * Get the project state directory path
81
+ */
82
+ getProjectStateDir(): string;
83
+ }
84
+ //# sourceMappingURL=storage.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../src/services/storage.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,320 @@
1
+ /**
2
+ * StorageService - Unified persistence layer
3
+ *
4
+ * Manages JSON file storage for all Foundation modules:
5
+ * - Worktrees
6
+ * - Sessions
7
+ * - Learnings
8
+ * - Pipelines
9
+ * - Tasks
10
+ * - Context Snapshots
11
+ * - Provider Health
12
+ *
13
+ * Storage locations:
14
+ * - ~/.foundation/state/ (global state)
15
+ * - .foundation/ (project-specific state)
16
+ */
17
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
18
+ import { join } from 'path';
19
+ import { homedir } from 'os';
20
+ // Empty state
21
+ const EMPTY_STATE = {
22
+ worktrees: [],
23
+ sessions: [],
24
+ learnings: [],
25
+ pipelines: [],
26
+ tasks: [],
27
+ snapshots: [],
28
+ providerHealth: [],
29
+ };
30
+ export class StorageService {
31
+ static instance;
32
+ globalStateDir;
33
+ projectStateDir;
34
+ state = { ...EMPTY_STATE };
35
+ initialized = false;
36
+ constructor() {
37
+ this.globalStateDir = join(homedir(), '.foundation', 'state');
38
+ this.projectStateDir = join(process.cwd(), '.foundation');
39
+ }
40
+ static getInstance() {
41
+ if (!StorageService.instance) {
42
+ StorageService.instance = new StorageService();
43
+ }
44
+ return StorageService.instance;
45
+ }
46
+ /**
47
+ * Initialize storage by loading existing state
48
+ */
49
+ async init() {
50
+ if (this.initialized)
51
+ return;
52
+ // Ensure directories exist
53
+ this.ensureDir(this.globalStateDir);
54
+ this.ensureDir(this.projectStateDir);
55
+ // Load global state
56
+ this.state = {
57
+ worktrees: this.loadFile('worktrees.json', 'global') || [],
58
+ sessions: this.loadFile('sessions.json', 'global') || [],
59
+ learnings: this.mergeArrays(this.loadFile('learnings.json', 'global') || [], this.loadFile('learnings.json', 'project') || []),
60
+ pipelines: this.loadFile('pipelines.json', 'global') || [],
61
+ tasks: this.loadFile('tasks.json', 'global') || [],
62
+ snapshots: this.loadFile('snapshots.json', 'global') || [],
63
+ providerHealth: this.loadFile('provider-health.json', 'global') || [],
64
+ };
65
+ this.initialized = true;
66
+ }
67
+ // ===========================================================================
68
+ // Worktree Operations
69
+ // ===========================================================================
70
+ getWorktrees() {
71
+ return this.state.worktrees;
72
+ }
73
+ getWorktree(id) {
74
+ return this.state.worktrees.find((w) => w.id === id);
75
+ }
76
+ getWorktreeByPath(path) {
77
+ return this.state.worktrees.find((w) => w.path === path);
78
+ }
79
+ getWorktreeByAlias(alias) {
80
+ return this.state.worktrees.find((w) => w.alias === alias);
81
+ }
82
+ addWorktree(worktree) {
83
+ this.state.worktrees.push(worktree);
84
+ this.saveFile('worktrees.json', this.state.worktrees, 'global');
85
+ }
86
+ updateWorktree(id, updates) {
87
+ const index = this.state.worktrees.findIndex((w) => w.id === id);
88
+ if (index !== -1) {
89
+ this.state.worktrees[index] = { ...this.state.worktrees[index], ...updates };
90
+ this.saveFile('worktrees.json', this.state.worktrees, 'global');
91
+ }
92
+ }
93
+ removeWorktree(id) {
94
+ this.state.worktrees = this.state.worktrees.filter((w) => w.id !== id);
95
+ this.saveFile('worktrees.json', this.state.worktrees, 'global');
96
+ }
97
+ // ===========================================================================
98
+ // Session Operations
99
+ // ===========================================================================
100
+ getSessions() {
101
+ return this.state.sessions;
102
+ }
103
+ getSession(id) {
104
+ return this.state.sessions.find((s) => s.id === id);
105
+ }
106
+ getActiveSessions() {
107
+ return this.state.sessions.filter((s) => s.status === 'active' || s.status === 'paused');
108
+ }
109
+ addSession(session) {
110
+ this.state.sessions.push(session);
111
+ this.saveFile('sessions.json', this.state.sessions, 'global');
112
+ }
113
+ updateSession(id, updates) {
114
+ const index = this.state.sessions.findIndex((s) => s.id === id);
115
+ if (index !== -1) {
116
+ this.state.sessions[index] = { ...this.state.sessions[index], ...updates };
117
+ this.saveFile('sessions.json', this.state.sessions, 'global');
118
+ }
119
+ }
120
+ removeSession(id) {
121
+ this.state.sessions = this.state.sessions.filter((s) => s.id !== id);
122
+ this.saveFile('sessions.json', this.state.sessions, 'global');
123
+ }
124
+ // ===========================================================================
125
+ // Learning Operations
126
+ // ===========================================================================
127
+ getLearnings(scope) {
128
+ if (scope) {
129
+ return this.state.learnings.filter((l) => l.scope === scope);
130
+ }
131
+ return this.state.learnings;
132
+ }
133
+ getLearning(id) {
134
+ return this.state.learnings.find((l) => l.id === id);
135
+ }
136
+ getPendingLearnings(scope) {
137
+ return this.getLearnings(scope).filter((l) => !l.applied);
138
+ }
139
+ addLearning(learning) {
140
+ this.state.learnings.push(learning);
141
+ this.saveLearnings();
142
+ }
143
+ updateLearning(id, updates) {
144
+ const index = this.state.learnings.findIndex((l) => l.id === id);
145
+ if (index !== -1) {
146
+ this.state.learnings[index] = { ...this.state.learnings[index], ...updates };
147
+ this.saveLearnings();
148
+ }
149
+ }
150
+ removeLearning(id) {
151
+ this.state.learnings = this.state.learnings.filter((l) => l.id !== id);
152
+ this.saveLearnings();
153
+ }
154
+ saveLearnings() {
155
+ const global = this.state.learnings.filter((l) => l.scope === 'global');
156
+ const project = this.state.learnings.filter((l) => l.scope === 'project');
157
+ this.saveFile('learnings.json', global, 'global');
158
+ this.saveFile('learnings.json', project, 'project');
159
+ }
160
+ // ===========================================================================
161
+ // Pipeline Operations
162
+ // ===========================================================================
163
+ getPipelines() {
164
+ return this.state.pipelines;
165
+ }
166
+ getPipeline(id) {
167
+ return this.state.pipelines.find((p) => p.id === id);
168
+ }
169
+ getActivePipelines() {
170
+ return this.state.pipelines.filter((p) => p.status === 'pending' || p.status === 'running');
171
+ }
172
+ addPipeline(pipeline) {
173
+ this.state.pipelines.push(pipeline);
174
+ this.saveFile('pipelines.json', this.state.pipelines, 'global');
175
+ }
176
+ updatePipeline(id, updates) {
177
+ const index = this.state.pipelines.findIndex((p) => p.id === id);
178
+ if (index !== -1) {
179
+ this.state.pipelines[index] = { ...this.state.pipelines[index], ...updates };
180
+ this.saveFile('pipelines.json', this.state.pipelines, 'global');
181
+ }
182
+ }
183
+ removePipeline(id) {
184
+ this.state.pipelines = this.state.pipelines.filter((p) => p.id !== id);
185
+ this.saveFile('pipelines.json', this.state.pipelines, 'global');
186
+ }
187
+ // ===========================================================================
188
+ // Task Operations
189
+ // ===========================================================================
190
+ getTasks() {
191
+ return this.state.tasks;
192
+ }
193
+ getTask(id) {
194
+ return this.state.tasks.find((t) => t.id === id);
195
+ }
196
+ getTasksByPipeline(pipelineId) {
197
+ return this.state.tasks.filter((t) => t.pipelineId === pipelineId);
198
+ }
199
+ addTask(task) {
200
+ this.state.tasks.push(task);
201
+ this.saveFile('tasks.json', this.state.tasks, 'global');
202
+ }
203
+ updateTask(id, updates) {
204
+ const index = this.state.tasks.findIndex((t) => t.id === id);
205
+ if (index !== -1) {
206
+ this.state.tasks[index] = { ...this.state.tasks[index], ...updates };
207
+ this.saveFile('tasks.json', this.state.tasks, 'global');
208
+ }
209
+ }
210
+ removeTask(id) {
211
+ this.state.tasks = this.state.tasks.filter((t) => t.id !== id);
212
+ this.saveFile('tasks.json', this.state.tasks, 'global');
213
+ }
214
+ // ===========================================================================
215
+ // Context Snapshot Operations
216
+ // ===========================================================================
217
+ getSnapshots() {
218
+ return this.state.snapshots;
219
+ }
220
+ getSnapshot(id) {
221
+ return this.state.snapshots.find((s) => s.id === id);
222
+ }
223
+ getSnapshotByName(name) {
224
+ return this.state.snapshots.find((s) => s.name === name);
225
+ }
226
+ addSnapshot(snapshot) {
227
+ this.state.snapshots.push(snapshot);
228
+ this.saveFile('snapshots.json', this.state.snapshots, 'global');
229
+ }
230
+ removeSnapshot(id) {
231
+ this.state.snapshots = this.state.snapshots.filter((s) => s.id !== id);
232
+ this.saveFile('snapshots.json', this.state.snapshots, 'global');
233
+ }
234
+ // ===========================================================================
235
+ // Provider Health Operations
236
+ // ===========================================================================
237
+ getProviderHealth() {
238
+ return this.state.providerHealth;
239
+ }
240
+ getProviderHealthByName(provider) {
241
+ return this.state.providerHealth.find((h) => h.provider === provider);
242
+ }
243
+ updateProviderHealth(provider, updates) {
244
+ const index = this.state.providerHealth.findIndex((h) => h.provider === provider);
245
+ if (index !== -1) {
246
+ this.state.providerHealth[index] = { ...this.state.providerHealth[index], ...updates };
247
+ }
248
+ else {
249
+ this.state.providerHealth.push({
250
+ provider: provider,
251
+ healthy: true,
252
+ lastCheck: Date.now(),
253
+ successRate: 1,
254
+ avgLatencyMs: 0,
255
+ circuitOpen: false,
256
+ ...updates,
257
+ });
258
+ }
259
+ this.saveFile('provider-health.json', this.state.providerHealth, 'global');
260
+ }
261
+ // ===========================================================================
262
+ // Helper Methods
263
+ // ===========================================================================
264
+ ensureDir(dir) {
265
+ if (!existsSync(dir)) {
266
+ mkdirSync(dir, { recursive: true });
267
+ }
268
+ }
269
+ getFilePath(filename, scope) {
270
+ return scope === 'global'
271
+ ? join(this.globalStateDir, filename)
272
+ : join(this.projectStateDir, filename);
273
+ }
274
+ loadFile(filename, scope) {
275
+ const path = this.getFilePath(filename, scope);
276
+ if (!existsSync(path))
277
+ return null;
278
+ try {
279
+ const content = readFileSync(path, 'utf-8');
280
+ return JSON.parse(content);
281
+ }
282
+ catch (error) {
283
+ console.error(`Warning: Failed to load ${path}:`, error);
284
+ return null;
285
+ }
286
+ }
287
+ saveFile(filename, data, scope) {
288
+ const path = this.getFilePath(filename, scope);
289
+ const dir = scope === 'global' ? this.globalStateDir : this.projectStateDir;
290
+ this.ensureDir(dir);
291
+ try {
292
+ writeFileSync(path, JSON.stringify(data, null, 2), 'utf-8');
293
+ }
294
+ catch (error) {
295
+ console.error(`Warning: Failed to save ${path}:`, error);
296
+ }
297
+ }
298
+ mergeArrays(global, project) {
299
+ const merged = [...global];
300
+ for (const item of project) {
301
+ if (!merged.find((m) => m.id === item.id)) {
302
+ merged.push(item);
303
+ }
304
+ }
305
+ return merged;
306
+ }
307
+ /**
308
+ * Get the global state directory path
309
+ */
310
+ getGlobalStateDir() {
311
+ return this.globalStateDir;
312
+ }
313
+ /**
314
+ * Get the project state directory path
315
+ */
316
+ getProjectStateDir() {
317
+ return this.projectStateDir;
318
+ }
319
+ }
320
+ //# sourceMappingURL=storage.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../src/services/storage.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Demerzel Module Tools
3
+ *
4
+ * Codebase intelligence beyond context limits.
5
+ * Named after R. Daneel Olivaw/Demerzel - 20,000 years of perfect memory,
6
+ * observing silently, knowing everything about the codebase.
7
+ *
8
+ * Tools:
9
+ * - demerzel_snapshot: Create codebase snapshot
10
+ * - demerzel_search: Regex search across codebase
11
+ * - demerzel_find_files: Glob pattern file matching
12
+ * - demerzel_find_symbol: Locate function/class definitions
13
+ * - demerzel_find_importers: Find files that import a module
14
+ * - demerzel_get_deps: Get file dependencies
15
+ * - demerzel_get_context: Get lines around a location
16
+ * - demerzel_analyze: AI-powered deep analysis
17
+ * - demerzel_semantic_search: Natural language code search
18
+ */
19
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
20
+ export declare function registerDemerzelTools(server: McpServer): void;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/demerzel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsM7D"}