hoomanjs 1.43.1 → 1.45.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 (55) hide show
  1. package/dist/acp/acp-agent.d.ts +2 -1
  2. package/dist/acp/acp-agent.js +116 -7
  3. package/dist/acp/acp-agent.js.map +1 -1
  4. package/dist/chat/app.js +74 -14
  5. package/dist/chat/app.js.map +1 -1
  6. package/dist/chat/components/RetryEvent.d.ts +4 -0
  7. package/dist/chat/components/RetryEvent.js +11 -0
  8. package/dist/chat/components/RetryEvent.js.map +1 -0
  9. package/dist/chat/components/Transcript.js +2 -1
  10. package/dist/chat/components/Transcript.js.map +1 -1
  11. package/dist/chat/types.d.ts +5 -1
  12. package/dist/cli.js +5 -6
  13. package/dist/cli.js.map +1 -1
  14. package/dist/configure/app.js +469 -105
  15. package/dist/configure/app.js.map +1 -1
  16. package/dist/configure/components/MenuScreen.d.ts +3 -2
  17. package/dist/configure/components/MenuScreen.js +6 -2
  18. package/dist/configure/components/MenuScreen.js.map +1 -1
  19. package/dist/configure/index.js +4 -3
  20. package/dist/configure/index.js.map +1 -1
  21. package/dist/configure/types.d.ts +15 -0
  22. package/dist/core/agent/default-retry-strategy.d.ts +7 -0
  23. package/dist/core/agent/default-retry-strategy.js +197 -0
  24. package/dist/core/agent/default-retry-strategy.js.map +1 -0
  25. package/dist/core/agent/index.js +2 -0
  26. package/dist/core/agent/index.js.map +1 -1
  27. package/dist/core/agent/retry-progress.d.ts +14 -0
  28. package/dist/core/agent/retry-progress.js +18 -0
  29. package/dist/core/agent/retry-progress.js.map +1 -0
  30. package/dist/core/approvals/intervention.js +10 -4
  31. package/dist/core/approvals/intervention.js.map +1 -1
  32. package/dist/core/mcp/config.d.ts +26 -3
  33. package/dist/core/mcp/config.js +126 -34
  34. package/dist/core/mcp/config.js.map +1 -1
  35. package/dist/core/prompts/modes/agent.md +6 -0
  36. package/dist/core/prompts/modes/plan.md +17 -0
  37. package/dist/core/prompts/session-mode-appendix.js +2 -1
  38. package/dist/core/prompts/session-mode-appendix.js.map +1 -1
  39. package/dist/core/prompts/static/todo.md +2 -0
  40. package/dist/core/runtime-config.js +4 -0
  41. package/dist/core/runtime-config.js.map +1 -1
  42. package/dist/core/sessions/flat-file-storage.d.ts +5 -0
  43. package/dist/core/sessions/flat-file-storage.js +42 -0
  44. package/dist/core/sessions/flat-file-storage.js.map +1 -1
  45. package/dist/core/state/tool-approvals.d.ts +5 -4
  46. package/dist/core/state/tool-approvals.js +18 -7
  47. package/dist/core/state/tool-approvals.js.map +1 -1
  48. package/dist/core/tools/plan.js +10 -2
  49. package/dist/core/tools/plan.js.map +1 -1
  50. package/dist/exec/approvals.js +7 -3
  51. package/dist/exec/approvals.js.map +1 -1
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.js +1 -0
  54. package/dist/index.js.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,197 @@
1
+ import { DefaultModelRetryStrategy, ExponentialBackoff, ModelThrottledError, } from "@strands-agents/sdk";
2
+ import { emitModelRetryProgress } from "./retry-progress.js";
3
+ import { APIConnectionError as OpenAIConnectionError, APIConnectionTimeoutError as OpenAIConnectionTimeoutError, InternalServerError as OpenAIInternalServerError, RateLimitError as OpenAIRateLimitError, } from "openai";
4
+ import { APIConnectionError as AnthropicConnectionError, APIConnectionTimeoutError as AnthropicConnectionTimeoutError, InternalServerError as AnthropicInternalServerError, RateLimitError as AnthropicRateLimitError, RetryableError as AnthropicRetryableError, } from "@anthropic-ai/sdk";
5
+ import { InternalServerException as BedrockInternalServerException, ModelNotReadyException as BedrockModelNotReadyException, ModelStreamErrorException as BedrockModelStreamErrorException, ModelTimeoutException as BedrockModelTimeoutException, ServiceUnavailableException as BedrockServiceUnavailableException, ThrottlingException as BedrockThrottlingException, } from "@aws-sdk/client-bedrock-runtime";
6
+ const DEFAULT_MAX_ATTEMPTS = 10;
7
+ const DEFAULT_BACKOFF = new ExponentialBackoff({
8
+ baseMs: 30_000,
9
+ maxMs: 300_000,
10
+ jitter: "none",
11
+ });
12
+ const RETRYABLE_HTTP_STATUSES = new Set([408, 409, 425, 429]);
13
+ const RETRYABLE_ERROR_CODES = new Set([
14
+ "ECONNRESET",
15
+ "ECONNREFUSED",
16
+ "ECONNABORTED",
17
+ "EHOSTUNREACH",
18
+ "ENETUNREACH",
19
+ "EPIPE",
20
+ "ETIMEDOUT",
21
+ "UND_ERR_CONNECT_TIMEOUT",
22
+ "UND_ERR_HEADERS_TIMEOUT",
23
+ "UND_ERR_BODY_TIMEOUT",
24
+ "UND_ERR_SOCKET",
25
+ ]);
26
+ const RETRYABLE_MESSAGE_FRAGMENTS = [
27
+ "connection error",
28
+ "connection reset",
29
+ "connection refused",
30
+ "fetch failed",
31
+ "gateway timeout",
32
+ "network",
33
+ "overloaded",
34
+ "rate limit",
35
+ "service unavailable",
36
+ "socket hang up",
37
+ "temporarily unavailable",
38
+ "timed out",
39
+ "timeout",
40
+ "too many requests",
41
+ "bad gateway",
42
+ ];
43
+ function errorMessage(error) {
44
+ if (error instanceof Error && error.message) {
45
+ return error.message;
46
+ }
47
+ return String(error);
48
+ }
49
+ function errorDetail(error) {
50
+ if (!(error instanceof Error)) {
51
+ return undefined;
52
+ }
53
+ if (error.stack && error.stack.trim().length > 0) {
54
+ return error.stack;
55
+ }
56
+ return error.message || undefined;
57
+ }
58
+ function numericField(value) {
59
+ return typeof value === "number" && Number.isFinite(value)
60
+ ? value
61
+ : undefined;
62
+ }
63
+ function stringField(value) {
64
+ return typeof value === "string" && value.trim().length > 0
65
+ ? value
66
+ : undefined;
67
+ }
68
+ function hasAbortName(error) {
69
+ return error instanceof Error && error.name === "AbortError";
70
+ }
71
+ function isKnownProviderRetryableError(error) {
72
+ return (error instanceof ModelThrottledError ||
73
+ error instanceof OpenAIRateLimitError ||
74
+ error instanceof OpenAIInternalServerError ||
75
+ error instanceof OpenAIConnectionError ||
76
+ error instanceof OpenAIConnectionTimeoutError ||
77
+ error instanceof AnthropicRateLimitError ||
78
+ error instanceof AnthropicInternalServerError ||
79
+ error instanceof AnthropicConnectionError ||
80
+ error instanceof AnthropicConnectionTimeoutError ||
81
+ error instanceof AnthropicRetryableError ||
82
+ error instanceof BedrockThrottlingException ||
83
+ error instanceof BedrockInternalServerException ||
84
+ error instanceof BedrockServiceUnavailableException ||
85
+ error instanceof BedrockModelTimeoutException ||
86
+ error instanceof BedrockModelStreamErrorException ||
87
+ error instanceof BedrockModelNotReadyException);
88
+ }
89
+ function isRetryableHttpStatus(status) {
90
+ if (status === undefined) {
91
+ return false;
92
+ }
93
+ if (RETRYABLE_HTTP_STATUSES.has(status)) {
94
+ return true;
95
+ }
96
+ return status >= 500 && status < 600;
97
+ }
98
+ function isRetryableSystemCode(code) {
99
+ return code !== undefined && RETRYABLE_ERROR_CODES.has(code.toUpperCase());
100
+ }
101
+ function isRetryableMessage(error) {
102
+ const haystack = `${error.name} ${error.message} ${String(error.cause ?? "")}`
103
+ .toLowerCase()
104
+ .trim();
105
+ return RETRYABLE_MESSAGE_FRAGMENTS.some((fragment) => haystack.includes(fragment));
106
+ }
107
+ function isTransientModelError(error) {
108
+ if (!(error instanceof Error)) {
109
+ return false;
110
+ }
111
+ if (hasAbortName(error)) {
112
+ return false;
113
+ }
114
+ if (isKnownProviderRetryableError(error)) {
115
+ return true;
116
+ }
117
+ const data = error;
118
+ const status = numericField(data.status) ?? numericField(data.statusCode);
119
+ if (status !== undefined) {
120
+ if (isRetryableHttpStatus(status)) {
121
+ return true;
122
+ }
123
+ if (status >= 400 && status < 500) {
124
+ return false;
125
+ }
126
+ }
127
+ const code = stringField(data.code);
128
+ if (isRetryableSystemCode(code)) {
129
+ return true;
130
+ }
131
+ return isRetryableMessage(data);
132
+ }
133
+ export class HoomanDefaultModelRetryStrategy extends DefaultModelRetryStrategy {
134
+ name = "hooman:default-model-retry-strategy";
135
+ constructor() {
136
+ super({
137
+ maxAttempts: DEFAULT_MAX_ATTEMPTS,
138
+ backoff: DEFAULT_BACKOFF,
139
+ });
140
+ }
141
+ isRetryable(error) {
142
+ return super.isRetryable(error) || isTransientModelError(error);
143
+ }
144
+ async retryModel(event) {
145
+ if (event.attemptCount === 1) {
146
+ this.onFirstModelAttempt();
147
+ }
148
+ if (event.retry || event.error === undefined) {
149
+ return;
150
+ }
151
+ const decision = await this.computeRetryDecision(event);
152
+ if (!decision.retry) {
153
+ return;
154
+ }
155
+ await sleepWithProgress(event, decision);
156
+ event.retry = true;
157
+ }
158
+ }
159
+ async function sleepWithProgress(event, decision) {
160
+ const waitMs = Math.max(0, Math.round(decision.waitMs));
161
+ const maxAttempts = DEFAULT_MAX_ATTEMPTS;
162
+ const nextAttempt = event.attemptCount + 1;
163
+ const error = errorMessage(event.error);
164
+ const detail = errorDetail(event.error);
165
+ const sessionValue = event.agent.appState.get("sessionId");
166
+ const sessionId = typeof sessionValue === "string" ? sessionValue : undefined;
167
+ let remainingMs = waitMs;
168
+ while (remainingMs > 0) {
169
+ const retryInSeconds = Math.max(1, Math.ceil(remainingMs / 1000));
170
+ emitModelRetryProgress({
171
+ status: "countdown",
172
+ sessionId,
173
+ attempt: event.attemptCount,
174
+ nextAttempt,
175
+ maxAttempts,
176
+ waitMs,
177
+ retryInSeconds,
178
+ error,
179
+ errorDetail: detail,
180
+ });
181
+ const slice = Math.min(remainingMs, 1000);
182
+ await new Promise((resolve) => globalThis.setTimeout(resolve, slice));
183
+ remainingMs -= slice;
184
+ }
185
+ emitModelRetryProgress({
186
+ status: "retrying",
187
+ sessionId,
188
+ attempt: event.attemptCount,
189
+ nextAttempt,
190
+ maxAttempts,
191
+ waitMs,
192
+ retryInSeconds: 0,
193
+ error,
194
+ errorDetail: detail,
195
+ });
196
+ }
197
+ //# sourceMappingURL=default-retry-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-retry-strategy.js","sourceRoot":"","sources":["../../../src/core/agent/default-retry-strategy.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { ContextOffloader } from "@strands-agents/sdk/vended-plugins/context-off
3
3
  import { FileMemoryStore } from "../memory/index.js";
4
4
  import { ToolBasedModelExtractor } from "../memory/model-extractor.js";
5
5
  import { modelProviders } from "../models/index.js";
6
+ import { HoomanDefaultModelRetryStrategy } from "./default-retry-strategy.js";
6
7
  import { FlatFileStorage } from "../sessions/flat-file-storage.js";
7
8
  import { LazySessionManager } from "../sessions/lazy-session-manager.js";
8
9
  import { TolerantFileStorage } from "../sessions/tolerant-file-storage.js";
@@ -117,6 +118,7 @@ export async function create(config, system, mcp, print = false, meta) {
117
118
  ],
118
119
  interventions: meta.interventions ?? [],
119
120
  tools,
121
+ retryStrategy: new HoomanDefaultModelRetryStrategy(),
120
122
  printer: print,
121
123
  ...(conversationManager ? { conversationManager } : {}),
122
124
  ...(sessionManager ? { sessionManager } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type ModelRetryProgress = {
2
+ status: "countdown" | "retrying";
3
+ sessionId?: string;
4
+ attempt: number;
5
+ nextAttempt: number;
6
+ maxAttempts: number;
7
+ waitMs: number;
8
+ retryInSeconds: number;
9
+ error: string;
10
+ errorDetail?: string;
11
+ };
12
+ export type ModelRetryProgressListener = (progress: ModelRetryProgress) => void;
13
+ export declare function subscribeModelRetryProgress(listener: ModelRetryProgressListener): () => void;
14
+ export declare function emitModelRetryProgress(progress: ModelRetryProgress): void;
@@ -0,0 +1,18 @@
1
+ const listeners = new Set();
2
+ export function subscribeModelRetryProgress(listener) {
3
+ listeners.add(listener);
4
+ return () => {
5
+ listeners.delete(listener);
6
+ };
7
+ }
8
+ export function emitModelRetryProgress(progress) {
9
+ for (const listener of [...listeners]) {
10
+ try {
11
+ listener(progress);
12
+ }
13
+ catch {
14
+ // A broken frontend listener must not fail the retry itself.
15
+ }
16
+ }
17
+ }
18
+ //# sourceMappingURL=retry-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-progress.js","sourceRoot":"","sources":["../../../src/core/agent/retry-progress.ts"],"names":[],"mappings":"AAcA,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;AAExD,MAAM,UAAU,2BAA2B,CACzC,QAAoC;IAEpC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IACjE,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { InterventionHandler, InterventionActions, } from "@strands-agents/sdk";
2
2
  import fs from "node:fs/promises";
3
3
  import { getPlanState } from "../state/plan.js";
4
+ import { getModeState } from "../state/session-mode.js";
4
5
  import { EXIT_PLAN_MODE_TOOL, INTERNAL_ALWAYS_ALLOWED, isImplicitlyAllowed, planModeWriteEditRejectionMessage, } from "../state/tool-approvals.js";
5
6
  import { isYoloEnabled } from "../state/yolo.js";
6
7
  import { getAllowlist } from "./allowlist.js";
@@ -59,14 +60,15 @@ export class HoomanToolApprovalIntervention extends InterventionHandler {
59
60
  await this.onRejected?.(request, event, planReject);
60
61
  return InterventionActions.deny(planReject);
61
62
  }
62
- if (isYoloEnabled(event.agent) ||
63
+ const isPlanExit = toolName === EXIT_PLAN_MODE_TOOL;
64
+ if ((!isPlanExit && isYoloEnabled(event.agent)) ||
63
65
  INTERNAL_ALWAYS_ALLOWED.has(toolName) ||
64
- isImplicitlyAllowed(toolName, event.toolUse.input) ||
65
- getAllowlist().isAllowed(toolName, event.toolUse.input)) {
66
+ isImplicitlyAllowed(toolName, event.toolUse.input, getModeState(event.agent).mode) ||
67
+ (!isPlanExit && getAllowlist().isAllowed(toolName, event.toolUse.input))) {
66
68
  await this.onApproved?.(request, event, "auto");
67
69
  return InterventionActions.proceed();
68
70
  }
69
- if (toolName === EXIT_PLAN_MODE_TOOL) {
71
+ if (isPlanExit) {
70
72
  const preview = await readPlanPreview(event.agent);
71
73
  if (preview) {
72
74
  request = { ...request, preview };
@@ -79,6 +81,10 @@ export class HoomanToolApprovalIntervention extends InterventionHandler {
79
81
  return InterventionActions.proceed();
80
82
  }
81
83
  if (result === "always") {
84
+ if (isPlanExit) {
85
+ await this.onApproved?.(request, event, "allow");
86
+ return InterventionActions.proceed();
87
+ }
82
88
  getAllowlist().allowAlways(toolName, event.toolUse.input);
83
89
  await this.onApproved?.(request, event, "always");
84
90
  return InterventionActions.proceed();
@@ -1 +1 @@
1
- {"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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"}
@@ -50,31 +50,54 @@ declare const McpServersFileSchema: z.ZodObject<{
50
50
  export type McpServersFile = z.infer<typeof McpServersFileSchema>;
51
51
  export type ConfigOptions = {
52
52
  overlayPaths?: readonly string[];
53
+ projectPath?: string;
53
54
  };
54
55
  /** One named MCP transport from the config file. */
55
56
  export type NamedMcpTransport = {
56
57
  name: string;
57
58
  transport: McpTransport;
58
59
  };
60
+ export type McpConfigScope = "global" | "project";
61
+ export type NamedMcpTransportWithSource = NamedMcpTransport & {
62
+ sourcePath: string;
63
+ scope: McpConfigScope;
64
+ };
65
+ export type McpWriteTarget = {
66
+ path: string;
67
+ scope: McpConfigScope;
68
+ };
59
69
  /**
60
70
  * Read/write `{"mcpServers": { "<name>": <transport> }}` on disk.
61
71
  */
62
72
  export declare class Config {
63
73
  private readonly path;
64
74
  private readonly overlayPaths;
65
- private servers;
75
+ private readonly projectPath?;
76
+ private entries;
66
77
  constructor(path: string, options?: ConfigOptions);
67
78
  private readJson;
68
79
  private parse;
69
- private mergedServers;
80
+ private sourcePaths;
81
+ private scopeForPath;
82
+ private mergedEntries;
70
83
  /** Reload servers from disk (overwrites unsaved in-memory changes). */
71
84
  reload(): void;
72
85
  /** All configured servers, stable sort by name. */
73
86
  list(): NamedMcpTransport[];
87
+ /** All configured servers, stable sort by name, including source metadata. */
88
+ listWithSources(): NamedMcpTransportWithSource[];
74
89
  get(name: string): McpTransport | undefined;
75
- private persist;
90
+ getEntry(name: string): NamedMcpTransportWithSource | undefined;
91
+ primaryPath(): string;
92
+ writableTargets(): McpWriteTarget[];
93
+ private persistFile;
94
+ private requireVisibleEntry;
76
95
  add(name: string, transport: McpTransport): void;
77
96
  update(name: string, transport: McpTransport): void;
78
97
  remove(name: string): void;
98
+ addToPath(targetPath: string, name: string, transport: McpTransport): void;
99
+ updateInPath(targetPath: string, name: string, transport: McpTransport): void;
100
+ renameInPath(targetPath: string, currentName: string, nextName: string, transport: McpTransport): void;
101
+ removeFromPath(targetPath: string, name: string): void;
79
102
  }
80
103
  export {};
@@ -1,5 +1,5 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { dirname } from "node:path";
2
+ import { dirname, resolve } from "node:path";
3
3
  import { z } from "zod";
4
4
  import { McpTransportSchema } from "./types.js";
5
5
  const McpServersFileSchema = z.object({
@@ -11,11 +11,15 @@ const McpServersFileSchema = z.object({
11
11
  export class Config {
12
12
  path;
13
13
  overlayPaths;
14
- servers;
14
+ projectPath;
15
+ entries;
15
16
  constructor(path, options) {
16
- this.path = path;
17
- this.overlayPaths = [...(options?.overlayPaths ?? [])];
18
- this.servers = {};
17
+ this.path = resolve(path);
18
+ this.overlayPaths = [...(options?.overlayPaths ?? [])].map((overlayPath) => resolve(overlayPath));
19
+ this.projectPath = options?.projectPath
20
+ ? resolve(options.projectPath)
21
+ : undefined;
22
+ this.entries = {};
19
23
  this.reload();
20
24
  }
21
25
  readJson(path, fallback) {
@@ -44,58 +48,146 @@ export class Config {
44
48
  });
45
49
  }
46
50
  }
47
- mergedServers() {
48
- const primary = this.parse(this.path, { mcpServers: {} });
49
- const merged = { ...primary.mcpServers };
50
- for (const overlayPath of this.overlayPaths) {
51
- const overlay = this.parse(overlayPath, { mcpServers: {} });
52
- Object.assign(merged, overlay.mcpServers);
51
+ sourcePaths() {
52
+ return [this.path, ...this.overlayPaths];
53
+ }
54
+ scopeForPath(path) {
55
+ return resolve(path) === this.path ? "global" : "project";
56
+ }
57
+ mergedEntries() {
58
+ const entries = {};
59
+ for (const path of this.sourcePaths()) {
60
+ const file = this.parse(path, { mcpServers: {} });
61
+ for (const [name, transport] of Object.entries(file.mcpServers)) {
62
+ entries[name] = {
63
+ name,
64
+ transport,
65
+ sourcePath: path,
66
+ scope: this.scopeForPath(path),
67
+ };
68
+ }
53
69
  }
54
- return merged;
70
+ return entries;
55
71
  }
56
72
  /** Reload servers from disk (overwrites unsaved in-memory changes). */
57
73
  reload() {
58
74
  const wasMissing = !existsSync(this.path);
59
- this.servers = this.mergedServers();
75
+ this.entries = this.mergedEntries();
60
76
  if (wasMissing) {
61
- this.persist();
77
+ this.persistFile(this.path, { mcpServers: {} });
62
78
  }
63
79
  }
64
80
  /** All configured servers, stable sort by name. */
65
81
  list() {
66
- return Object.entries(this.servers)
67
- .sort(([a], [b]) => a.localeCompare(b))
68
- .map(([name, transport]) => ({ name, transport }));
82
+ return this.listWithSources().map(({ name, transport }) => ({
83
+ name,
84
+ transport,
85
+ }));
86
+ }
87
+ /** All configured servers, stable sort by name, including source metadata. */
88
+ listWithSources() {
89
+ return Object.values(this.entries).sort((a, b) => a.name.localeCompare(b.name));
69
90
  }
70
91
  get(name) {
71
- return this.servers[name];
92
+ return this.entries[name]?.transport;
93
+ }
94
+ getEntry(name) {
95
+ return this.entries[name];
72
96
  }
73
- persist() {
74
- const data = { mcpServers: this.servers };
75
- mkdirSync(dirname(this.path), { recursive: true });
76
- writeFileSync(this.path, JSON.stringify(data, null, 2), "utf8");
97
+ primaryPath() {
98
+ return this.path;
99
+ }
100
+ writableTargets() {
101
+ const targets = [{ path: this.path, scope: "global" }];
102
+ if (this.projectPath && this.projectPath !== this.path) {
103
+ targets.push({ path: this.projectPath, scope: "project" });
104
+ }
105
+ return targets;
106
+ }
107
+ persistFile(path, data) {
108
+ mkdirSync(dirname(path), { recursive: true });
109
+ writeFileSync(path, JSON.stringify(data, null, 2), "utf8");
110
+ }
111
+ requireVisibleEntry(name) {
112
+ const entry = this.getEntry(name);
113
+ if (!entry) {
114
+ throw new Error(`MCP server "${name}" does not exist.`);
115
+ }
116
+ return entry;
77
117
  }
78
118
  add(name, transport) {
79
- if (this.servers[name]) {
119
+ this.addToPath(this.path, name, transport);
120
+ }
121
+ update(name, transport) {
122
+ this.updateInPath(this.path, name, transport);
123
+ }
124
+ remove(name) {
125
+ this.removeFromPath(this.path, name);
126
+ }
127
+ addToPath(targetPath, name, transport) {
128
+ if (this.get(name)) {
80
129
  throw new Error(`MCP server "${name}" already exists.`);
81
130
  }
82
- this.servers = { ...this.servers, [name]: transport };
83
- this.persist();
131
+ const resolvedTargetPath = resolve(targetPath);
132
+ const file = this.parse(resolvedTargetPath, { mcpServers: {} });
133
+ if (file.mcpServers[name]) {
134
+ throw new Error(`MCP server "${name}" already exists.`);
135
+ }
136
+ file.mcpServers[name] = transport;
137
+ this.persistFile(resolvedTargetPath, file);
138
+ this.reload();
84
139
  }
85
- update(name, transport) {
86
- if (!this.servers[name]) {
140
+ updateInPath(targetPath, name, transport) {
141
+ const resolvedTargetPath = resolve(targetPath);
142
+ const entry = this.requireVisibleEntry(name);
143
+ if (entry.sourcePath !== resolvedTargetPath) {
144
+ throw new Error(`MCP server "${name}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
145
+ }
146
+ const file = this.parse(resolvedTargetPath, { mcpServers: {} });
147
+ if (!file.mcpServers[name]) {
87
148
  throw new Error(`MCP server "${name}" does not exist.`);
88
149
  }
89
- this.servers = { ...this.servers, [name]: transport };
90
- this.persist();
150
+ file.mcpServers[name] = transport;
151
+ this.persistFile(resolvedTargetPath, file);
152
+ this.reload();
91
153
  }
92
- remove(name) {
93
- if (!this.servers[name]) {
154
+ renameInPath(targetPath, currentName, nextName, transport) {
155
+ const resolvedTargetPath = resolve(targetPath);
156
+ const entry = this.requireVisibleEntry(currentName);
157
+ if (entry.sourcePath !== resolvedTargetPath) {
158
+ throw new Error(`MCP server "${currentName}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
159
+ }
160
+ if (currentName === nextName) {
161
+ this.updateInPath(resolvedTargetPath, currentName, transport);
162
+ return;
163
+ }
164
+ const existing = this.getEntry(nextName);
165
+ if (existing) {
166
+ throw new Error(`MCP server "${nextName}" already exists.`);
167
+ }
168
+ const file = this.parse(resolvedTargetPath, { mcpServers: {} });
169
+ if (!file.mcpServers[currentName]) {
170
+ throw new Error(`MCP server "${currentName}" does not exist.`);
171
+ }
172
+ const { [currentName]: _removed, ...remaining } = file.mcpServers;
173
+ file.mcpServers = { ...remaining, [nextName]: transport };
174
+ this.persistFile(resolvedTargetPath, file);
175
+ this.reload();
176
+ }
177
+ removeFromPath(targetPath, name) {
178
+ const resolvedTargetPath = resolve(targetPath);
179
+ const entry = this.requireVisibleEntry(name);
180
+ if (entry.sourcePath !== resolvedTargetPath) {
181
+ throw new Error(`MCP server "${name}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
182
+ }
183
+ const file = this.parse(resolvedTargetPath, { mcpServers: {} });
184
+ if (!file.mcpServers[name]) {
94
185
  throw new Error(`MCP server "${name}" does not exist.`);
95
186
  }
96
- const { [name]: _removed, ...remaining } = this.servers;
97
- this.servers = remaining;
98
- this.persist();
187
+ const { [name]: _removed, ...remaining } = file.mcpServers;
188
+ file.mcpServers = remaining;
189
+ this.persistFile(resolvedTargetPath, file);
190
+ this.reload();
99
191
  }
100
192
  }
101
193
  //# sourceMappingURL=config.js.map