@stackmemoryai/stackmemory 1.10.5 → 1.14.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 (225) hide show
  1. package/LICENSE +131 -64
  2. package/README.md +107 -24
  3. package/bin/claude-sm +16 -1
  4. package/bin/claude-smd +16 -1
  5. package/bin/codex-smd +16 -1
  6. package/bin/gemini-sm +16 -1
  7. package/bin/hermes-sm +21 -0
  8. package/bin/hermes-smd +21 -0
  9. package/bin/opencode-sm +16 -1
  10. package/dist/src/cli/claude-sm.js +266 -84
  11. package/dist/src/cli/codex-sm.js +225 -33
  12. package/dist/src/cli/commands/bench.js +209 -2
  13. package/dist/src/cli/commands/brain.js +206 -0
  14. package/dist/src/cli/commands/cache.js +126 -0
  15. package/dist/src/cli/commands/company-os.js +184 -0
  16. package/dist/src/cli/commands/context.js +5 -0
  17. package/dist/src/cli/commands/daemon.js +41 -0
  18. package/dist/src/cli/commands/handoff.js +40 -9
  19. package/dist/src/cli/commands/onboard.js +70 -3
  20. package/dist/src/cli/commands/operator.js +127 -0
  21. package/dist/src/cli/commands/optimize.js +117 -0
  22. package/dist/src/cli/commands/orchestrate.js +232 -5
  23. package/dist/src/cli/commands/orchestrator.js +315 -26
  24. package/dist/src/cli/commands/pack.js +322 -0
  25. package/dist/src/cli/commands/patterns.js +254 -0
  26. package/dist/src/cli/commands/portal.js +161 -0
  27. package/dist/src/cli/commands/scaffold.js +92 -0
  28. package/dist/src/cli/commands/search.js +40 -1
  29. package/dist/src/cli/commands/setup.js +178 -11
  30. package/dist/src/cli/commands/skills.js +10 -1
  31. package/dist/src/cli/commands/state.js +265 -0
  32. package/dist/src/cli/commands/sync.js +253 -0
  33. package/dist/src/cli/commands/tasks.js +130 -1
  34. package/dist/src/cli/commands/vision.js +221 -0
  35. package/dist/src/cli/gemini-sm.js +19 -29
  36. package/dist/src/cli/hermes-sm.js +224 -0
  37. package/dist/src/cli/index.js +105 -39
  38. package/dist/src/cli/opencode-sm.js +38 -21
  39. package/dist/src/cli/utils/determinism-watcher.js +66 -0
  40. package/dist/src/cli/utils/real-cli-bin.js +116 -0
  41. package/dist/src/core/brain/brain-store.js +187 -0
  42. package/dist/src/core/brain/brain-sync.js +193 -0
  43. package/dist/src/core/brain/index.js +78 -0
  44. package/dist/src/core/brain/types.js +10 -0
  45. package/dist/src/core/cache/content-cache.js +238 -0
  46. package/dist/src/{integrations/diffmem → core/cache}/index.js +5 -5
  47. package/dist/src/core/cache/token-estimator.js +39 -0
  48. package/dist/src/core/config/feature-flags.js +2 -6
  49. package/dist/src/core/context/frame-database.js +79 -27
  50. package/dist/src/core/context/recursive-context-manager.js +1 -1
  51. package/dist/src/core/context/rehydration.js +2 -1
  52. package/dist/src/core/cross-search/cross-project-search.js +269 -0
  53. package/dist/src/core/cross-search/index.js +10 -0
  54. package/dist/src/core/database/sqlite-adapter.js +14 -84
  55. package/dist/src/core/extensions/provider-adapter.js +5 -0
  56. package/dist/src/core/models/model-router.js +54 -2
  57. package/dist/src/core/models/provider-pricing.js +58 -4
  58. package/dist/src/core/monitoring/logger.js +2 -1
  59. package/dist/src/core/optimization/trace-optimizer.js +413 -0
  60. package/dist/src/core/patterns/index.js +22 -0
  61. package/dist/src/core/patterns/pattern-applier.js +39 -0
  62. package/dist/src/core/patterns/pattern-observer.js +157 -0
  63. package/dist/src/core/patterns/pattern-store.js +259 -0
  64. package/dist/src/core/patterns/types.js +19 -0
  65. package/dist/src/core/provenance/confidence-scorer.js +128 -0
  66. package/dist/src/core/provenance/index.js +40 -0
  67. package/dist/src/core/provenance/provenance-store.js +194 -0
  68. package/dist/src/core/provenance/types.js +82 -0
  69. package/dist/src/core/retrieval/llm-context-retrieval.js +5 -4
  70. package/dist/src/core/retrieval/unified-context-assembler.js +11 -66
  71. package/dist/src/core/session/project-handoff.js +64 -0
  72. package/dist/src/core/session/session-manager.js +28 -0
  73. package/dist/src/core/shared-state/canonical-store.js +564 -0
  74. package/dist/src/core/skill-packs/index.js +18 -0
  75. package/dist/src/core/skill-packs/parser.js +42 -0
  76. package/dist/src/core/skill-packs/registry.js +224 -0
  77. package/dist/src/core/skill-packs/types.js +79 -0
  78. package/dist/src/core/storage/cloud-sync-manager.js +116 -0
  79. package/dist/src/core/storage/cloud-sync.js +574 -0
  80. package/dist/src/core/storage/two-tier-storage.js +5 -1
  81. package/dist/src/core/tasks/master-tasks-template.js +43 -0
  82. package/dist/src/core/tasks/md-task-parser.js +138 -0
  83. package/dist/src/core/trace/trace-event-store.js +282 -0
  84. package/dist/src/core/vision/index.js +27 -0
  85. package/dist/src/core/vision/signals.js +79 -0
  86. package/dist/src/core/vision/types.js +22 -0
  87. package/dist/src/core/vision/vision-file.js +146 -0
  88. package/dist/src/core/vision/vision-loop.js +220 -0
  89. package/dist/src/core/wiki/wiki-compiler.js +103 -1
  90. package/dist/src/daemon/daemon-config.js +52 -0
  91. package/dist/src/daemon/services/desire-path-service.js +566 -0
  92. package/dist/src/daemon/services/github-service.js +126 -0
  93. package/dist/src/daemon/services/research-stream-service.js +320 -0
  94. package/dist/src/daemon/services/telemetry-service.js +192 -0
  95. package/dist/src/daemon/unified-daemon.js +58 -1
  96. package/dist/src/features/browser/cli-browser-agent.js +417 -0
  97. package/dist/src/features/browser/stagehand-workflows.js +578 -0
  98. package/dist/src/features/operator/adapter-factory.js +62 -0
  99. package/dist/src/features/operator/browser-adapter.js +109 -0
  100. package/dist/src/features/operator/desktop-adapter.js +125 -0
  101. package/dist/src/features/operator/index.js +39 -0
  102. package/dist/src/features/operator/llm-decision.js +137 -0
  103. package/dist/src/features/operator/operator-logger.js +92 -0
  104. package/dist/src/features/operator/overnight-runner.js +327 -0
  105. package/dist/src/features/operator/screen-adapter.js +91 -0
  106. package/dist/src/features/operator/session-manager.js +127 -0
  107. package/dist/src/features/operator/state-machine.js +227 -0
  108. package/dist/src/features/operator/task-queue.js +81 -0
  109. package/dist/src/features/portal/index.js +26 -0
  110. package/dist/src/features/portal/server.js +240 -0
  111. package/dist/src/features/portal/types.js +14 -0
  112. package/dist/src/features/portal/ui.js +195 -0
  113. package/dist/src/features/sweep/pty-wrapper.js +13 -5
  114. package/dist/src/features/tasks/task-aware-context.js +2 -1
  115. package/dist/src/features/tui/simple-monitor.js +0 -23
  116. package/dist/src/features/tui/swarm-monitor.js +8 -66
  117. package/dist/src/features/web/client/hooks/use-socket.js +12 -0
  118. package/dist/src/{core/merge/index.js → features/web/client/lib/utils.js} +8 -4
  119. package/dist/src/features/web/client/next-env.d.js +4 -0
  120. package/dist/src/features/web/client/stores/session-store.js +12 -0
  121. package/dist/src/features/web/server/gcp-billing.js +76 -0
  122. package/dist/src/features/web/server/index.js +10 -0
  123. package/dist/src/features/web/server/spend-calculator.js +228 -0
  124. package/dist/src/hooks/schemas.js +6 -1
  125. package/dist/src/integrations/anthropic/client.js +3 -2
  126. package/dist/src/integrations/claude-code/agent-bridge.js +0 -3
  127. package/dist/src/integrations/claude-code/subagent-client.js +307 -11
  128. package/dist/src/integrations/claude-code/task-coordinator.js +2 -1
  129. package/dist/src/integrations/github/pr-state.js +158 -0
  130. package/dist/src/integrations/linear/client.js +4 -1
  131. package/dist/src/integrations/linear/webhook-retry.js +196 -0
  132. package/dist/src/integrations/linear/webhook-server.js +18 -22
  133. package/dist/src/integrations/mcp/handlers/cloud-sync-handlers.js +101 -0
  134. package/dist/src/integrations/mcp/handlers/index.js +40 -84
  135. package/dist/src/integrations/mcp/server.js +542 -641
  136. package/dist/src/integrations/mcp/tool-alias-registry.js +297 -0
  137. package/dist/src/integrations/mcp/tool-definitions.js +152 -682
  138. package/dist/src/mcp/stackmemory-mcp-server.js +571 -231
  139. package/dist/src/orchestrators/multimodal/determinism.js +244 -0
  140. package/dist/src/orchestrators/multimodal/harness.js +149 -78
  141. package/dist/src/orchestrators/multimodal/providers.js +44 -3
  142. package/dist/src/skills/recursive-agent-orchestrator.js +2 -4
  143. package/dist/src/utils/hook-installer.js +0 -8
  144. package/dist/src/utils/process-cleanup.js +1 -7
  145. package/docs/README.md +42 -0
  146. package/docs/guides/README_INSTALL.md +208 -0
  147. package/package.json +27 -9
  148. package/packs/coding/python-fastapi/instructions.md +60 -0
  149. package/packs/coding/python-fastapi/pack.yaml +28 -0
  150. package/packs/coding/typescript-react/instructions.md +47 -0
  151. package/packs/coding/typescript-react/pack.yaml +28 -0
  152. package/packs/core/commands/capture.md +32 -0
  153. package/packs/core/commands/learn.md +73 -0
  154. package/packs/core/commands/next.md +36 -0
  155. package/packs/core/commands/restart.md +58 -0
  156. package/packs/core/commands/restore.md +29 -0
  157. package/packs/core/commands/start.md +57 -0
  158. package/packs/core/commands/stop.md +65 -0
  159. package/packs/core/commands/summary.md +40 -0
  160. package/packs/core/manifest.json +24 -0
  161. package/packs/ops/decision-recovery/instructions.md +65 -0
  162. package/packs/ops/decision-recovery/pack.yaml +89 -0
  163. package/scripts/claude-code-wrapper.sh +11 -0
  164. package/scripts/claude-sm-setup.sh +12 -1
  165. package/scripts/codex-wrapper.sh +11 -0
  166. package/scripts/git-hooks/branch-context-manager.sh +11 -0
  167. package/scripts/git-hooks/post-checkout-stackmemory.sh +11 -0
  168. package/scripts/git-hooks/post-commit-stackmemory.sh +11 -0
  169. package/scripts/git-hooks/pre-commit-stackmemory.sh +11 -0
  170. package/scripts/hooks/cleanup-shell.sh +12 -1
  171. package/scripts/hooks/task-complete.sh +12 -1
  172. package/scripts/install-code-execution-hooks.sh +12 -1
  173. package/scripts/install-sweep-hook.sh +12 -0
  174. package/scripts/install.sh +11 -0
  175. package/scripts/opencode-wrapper.sh +11 -0
  176. package/scripts/portal/cloud-init.yaml +69 -0
  177. package/scripts/portal/setup.sh +69 -0
  178. package/scripts/portal/stackmemory-portal.service +34 -0
  179. package/scripts/setup-claude-integration.sh +12 -1
  180. package/scripts/smoke-init-db.sh +23 -0
  181. package/scripts/stackmemory-daemon.sh +11 -0
  182. package/scripts/verify-dist.cjs +11 -4
  183. package/dist/src/cli/commands/ralph.js +0 -1053
  184. package/dist/src/cli/commands/team.js +0 -168
  185. package/dist/src/core/context/shared-context-layer.js +0 -620
  186. package/dist/src/core/context/stack-merge-resolver.js +0 -748
  187. package/dist/src/core/merge/conflict-detector.js +0 -430
  188. package/dist/src/core/merge/resolution-engine.js +0 -557
  189. package/dist/src/core/merge/stack-diff.js +0 -531
  190. package/dist/src/core/merge/unified-merge-resolver.js +0 -302
  191. package/dist/src/hooks/diffmem-hooks.js +0 -376
  192. package/dist/src/integrations/diffmem/client.js +0 -208
  193. package/dist/src/integrations/diffmem/config.js +0 -14
  194. package/dist/src/integrations/greptile/client.js +0 -101
  195. package/dist/src/integrations/greptile/config.js +0 -14
  196. package/dist/src/integrations/greptile/index.js +0 -11
  197. package/dist/src/integrations/mcp/handlers/cord-handlers.js +0 -397
  198. package/dist/src/integrations/mcp/handlers/diffmem-handlers.js +0 -455
  199. package/dist/src/integrations/mcp/handlers/greptile-handlers.js +0 -456
  200. package/dist/src/integrations/mcp/handlers/provider-handlers.js +0 -227
  201. package/dist/src/integrations/mcp/handlers/team-handlers.js +0 -211
  202. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -863
  203. package/dist/src/integrations/ralph/context/context-budget-manager.js +0 -308
  204. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +0 -391
  205. package/dist/src/integrations/ralph/index.js +0 -17
  206. package/dist/src/integrations/ralph/learning/pattern-learner.js +0 -435
  207. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
  208. package/dist/src/integrations/ralph/loopmax.js +0 -488
  209. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +0 -293
  210. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +0 -107
  211. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -508
  212. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -407
  213. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +0 -495
  214. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +0 -387
  215. package/dist/src/integrations/ralph/performance/performance-optimizer.js +0 -357
  216. package/dist/src/integrations/ralph/recovery/crash-recovery.js +0 -461
  217. package/dist/src/integrations/ralph/state/state-reconciler.js +0 -420
  218. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +0 -444
  219. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +0 -1007
  220. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +0 -635
  221. package/scripts/ralph-loop-implementation.js +0 -404
  222. /package/dist/src/core/{merge → cache}/types.js +0 -0
  223. /package/dist/src/{integrations/diffmem/types.js → core/storage/cloud-sync-types.js} +0 -0
  224. /package/dist/src/{integrations/greptile/types.js → core/trace/trace-event.js} +0 -0
  225. /package/dist/src/{integrations/ralph → features/operator}/types.js +0 -0
@@ -1,208 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- import { DEFAULT_DIFFMEM_CONFIG } from "./config.js";
6
- class DiffMemClientError extends Error {
7
- constructor(message, code, statusCode) {
8
- super(message);
9
- this.code = code;
10
- this.statusCode = statusCode;
11
- this.name = "DiffMemClientError";
12
- }
13
- }
14
- class DiffMemClient {
15
- endpoint;
16
- userId;
17
- timeout;
18
- maxRetries;
19
- constructor(config = {}) {
20
- const mergedConfig = { ...DEFAULT_DIFFMEM_CONFIG, ...config };
21
- this.endpoint = mergedConfig.endpoint.replace(/\/$/, "");
22
- this.userId = mergedConfig.userId;
23
- this.timeout = mergedConfig.timeout;
24
- this.maxRetries = mergedConfig.maxRetries;
25
- }
26
- async request(path, options = {}) {
27
- const controller = new AbortController();
28
- const timeoutId = setTimeout(() => controller.abort(), this.timeout);
29
- let lastError;
30
- for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
31
- try {
32
- const response = await fetch(`${this.endpoint}${path}`, {
33
- ...options,
34
- signal: controller.signal,
35
- headers: {
36
- "Content-Type": "application/json",
37
- ...options.headers
38
- }
39
- });
40
- clearTimeout(timeoutId);
41
- if (!response.ok) {
42
- const _errorBody = await response.text().catch(() => "");
43
- throw new DiffMemClientError(
44
- `Request failed: ${response.statusText}`,
45
- "HTTP_ERROR",
46
- response.status
47
- );
48
- }
49
- return await response.json();
50
- } catch (error) {
51
- lastError = error;
52
- if (error instanceof DiffMemClientError) {
53
- throw error;
54
- }
55
- if (error.name === "AbortError") {
56
- throw new DiffMemClientError("Request timeout", "TIMEOUT");
57
- }
58
- if (attempt < this.maxRetries) {
59
- await new Promise(
60
- (resolve) => setTimeout(resolve, Math.pow(2, attempt) * 100)
61
- );
62
- continue;
63
- }
64
- }
65
- }
66
- clearTimeout(timeoutId);
67
- throw new DiffMemClientError(
68
- lastError?.message || "Request failed after retries",
69
- "NETWORK_ERROR"
70
- );
71
- }
72
- /**
73
- * Get user context/memories from DiffMem
74
- * Maps to POST /memory/{user_id}/context
75
- */
76
- async getMemories(query = {}) {
77
- try {
78
- const conversation = query.query ? [{ role: "user", content: query.query }] : [{ role: "user", content: "What do you know about me?" }];
79
- const response = await this.request(`/memory/${this.userId}/context`, {
80
- method: "POST",
81
- body: JSON.stringify({
82
- conversation,
83
- depth: "wide"
84
- })
85
- });
86
- if (response.entities) {
87
- return response.entities.slice(0, query.limit || 10).map((entity) => ({
88
- id: entity.id,
89
- content: entity.content,
90
- category: "project_knowledge",
91
- confidence: entity.score || 0.7,
92
- timestamp: Date.now()
93
- }));
94
- }
95
- return [];
96
- } catch {
97
- return [];
98
- }
99
- }
100
- /**
101
- * Store an insight/learning in DiffMem
102
- * Maps to POST /memory/{user_id}/process-and-commit
103
- */
104
- async storeInsight(insight) {
105
- const response = await this.request(`/memory/${this.userId}/process-and-commit`, {
106
- method: "POST",
107
- body: JSON.stringify({
108
- memory_input: `[${insight.category}] ${insight.content}`,
109
- session_id: `sm-${Date.now()}`,
110
- session_date: (/* @__PURE__ */ new Date()).toISOString().split("T")[0]
111
- })
112
- });
113
- return { id: response.session_id || `insight-${Date.now()}` };
114
- }
115
- /**
116
- * Search memories in DiffMem
117
- * Maps to POST /memory/{user_id}/search
118
- */
119
- async search(query) {
120
- try {
121
- const response = await this.request(`/memory/${this.userId}/search`, {
122
- method: "POST",
123
- body: JSON.stringify({
124
- query: query.query || "",
125
- k: query.limit || 10
126
- })
127
- });
128
- if (response.results) {
129
- return response.results.map((result) => ({
130
- id: result.snippet.id,
131
- content: result.snippet.content,
132
- category: "project_knowledge",
133
- confidence: result.score,
134
- timestamp: Date.now(),
135
- metadata: { filePath: result.snippet.file_path }
136
- }));
137
- }
138
- return [];
139
- } catch {
140
- return [];
141
- }
142
- }
143
- /**
144
- * Get DiffMem server status
145
- * Maps to GET /health
146
- */
147
- async getStatus() {
148
- try {
149
- const health = await this.request("/health", { method: "GET" });
150
- return {
151
- connected: health.status === "healthy",
152
- memoryCount: health.active_contexts || 0,
153
- lastSync: Date.now(),
154
- version: health.version
155
- };
156
- } catch {
157
- return {
158
- connected: false,
159
- memoryCount: 0,
160
- lastSync: null
161
- };
162
- }
163
- }
164
- /**
165
- * Batch sync multiple insights
166
- * Processes each insight individually since DiffMem doesn't have batch API
167
- */
168
- async batchSync(insights) {
169
- if (insights.length === 0) {
170
- return { synced: 0, failed: 0 };
171
- }
172
- let synced = 0;
173
- let failed = 0;
174
- for (const insight of insights) {
175
- try {
176
- await this.storeInsight(insight);
177
- synced++;
178
- } catch {
179
- failed++;
180
- }
181
- }
182
- return { synced, failed };
183
- }
184
- /**
185
- * Onboard a new user in DiffMem
186
- */
187
- async onboardUser(userInfo) {
188
- try {
189
- const response = await this.request(
190
- `/memory/${this.userId}/onboard`,
191
- {
192
- method: "POST",
193
- body: JSON.stringify({
194
- user_info: userInfo,
195
- session_id: `onboard-${Date.now()}`
196
- })
197
- }
198
- );
199
- return { success: response.status === "success" };
200
- } catch {
201
- return { success: false };
202
- }
203
- }
204
- }
205
- export {
206
- DiffMemClient,
207
- DiffMemClientError
208
- };
@@ -1,14 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- const DEFAULT_DIFFMEM_CONFIG = {
6
- endpoint: process.env.DIFFMEM_ENDPOINT || "http://localhost:8000",
7
- userId: process.env.DIFFMEM_USER_ID || "default",
8
- timeout: 5e3,
9
- maxRetries: 3,
10
- enabled: process.env.DIFFMEM_ENABLED === "true" || !!process.env.DIFFMEM_ENDPOINT
11
- };
12
- export {
13
- DEFAULT_DIFFMEM_CONFIG
14
- };
@@ -1,101 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
6
- import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
7
- import { DEFAULT_GREPTILE_CONFIG } from "./config.js";
8
- class GreptileClientError extends Error {
9
- constructor(message, code) {
10
- super(message);
11
- this.code = code;
12
- this.name = "GreptileClientError";
13
- }
14
- }
15
- class GreptileClient {
16
- config;
17
- client = null;
18
- transport = null;
19
- connecting = null;
20
- constructor(config = {}) {
21
- this.config = { ...DEFAULT_GREPTILE_CONFIG, ...config };
22
- if (!this.config.enabled || !this.config.apiKey) {
23
- throw new GreptileClientError(
24
- "Greptile integration disabled (GREPTILE_API_KEY not set)",
25
- "DISABLED"
26
- );
27
- }
28
- }
29
- async ensureConnected() {
30
- if (this.client) return this.client;
31
- if (this.connecting) {
32
- await this.connecting;
33
- return this.client;
34
- }
35
- this.connecting = this.connect();
36
- try {
37
- await this.connecting;
38
- return this.client;
39
- } finally {
40
- this.connecting = null;
41
- }
42
- }
43
- async connect() {
44
- const transport = new StreamableHTTPClientTransport(
45
- new URL(this.config.mcpEndpoint),
46
- {
47
- requestInit: {
48
- headers: {
49
- Authorization: `Bearer ${this.config.apiKey}`
50
- }
51
- },
52
- reconnectionOptions: {
53
- maxRetries: this.config.maxRetries,
54
- initialReconnectionDelay: 1e3,
55
- reconnectionDelayGrowFactor: 1.5,
56
- maxReconnectionDelay: 1e4
57
- }
58
- }
59
- );
60
- const client = new Client(
61
- { name: "stackmemory-greptile", version: "1.0.0" },
62
- { capabilities: {} }
63
- );
64
- transport.onclose = () => {
65
- this.client = null;
66
- this.transport = null;
67
- };
68
- await client.connect(transport);
69
- this.client = client;
70
- this.transport = transport;
71
- }
72
- async callTool(name, args = {}) {
73
- const client = await this.ensureConnected();
74
- const result = await client.callTool({ name, arguments: args });
75
- if (result.content && Array.isArray(result.content)) {
76
- const textParts = result.content.filter(
77
- (c) => c.type === "text" && typeof c.text === "string"
78
- ).map((c) => c.text);
79
- if (textParts.length === 0) return result;
80
- const combined = textParts.join("\n");
81
- try {
82
- return JSON.parse(combined);
83
- } catch {
84
- return combined;
85
- }
86
- }
87
- return result;
88
- }
89
- async disconnect() {
90
- if (this.transport) {
91
- await this.transport.close();
92
- }
93
- this.client = null;
94
- this.transport = null;
95
- this.connecting = null;
96
- }
97
- }
98
- export {
99
- GreptileClient,
100
- GreptileClientError
101
- };
@@ -1,14 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- const DEFAULT_GREPTILE_CONFIG = {
6
- enabled: !!process.env.GREPTILE_API_KEY,
7
- mcpEndpoint: process.env.GREPTILE_MCP_ENDPOINT || "https://api.greptile.com/mcp",
8
- apiKey: process.env.GREPTILE_API_KEY || "",
9
- timeoutMs: 15e3,
10
- maxRetries: 2
11
- };
12
- export {
13
- DEFAULT_GREPTILE_CONFIG
14
- };
@@ -1,11 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- import { DEFAULT_GREPTILE_CONFIG } from "./config.js";
6
- import { GreptileClient, GreptileClientError } from "./client.js";
7
- export {
8
- DEFAULT_GREPTILE_CONFIG,
9
- GreptileClient,
10
- GreptileClientError
11
- };