@jonathanleelx/meddle 0.5.0-beta.12 → 0.5.0-beta.14

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 (42) hide show
  1. package/bin/commands/mock/add.js +8 -1
  2. package/bin/commands/mock/delete.js +8 -1
  3. package/bin/commands/mock/toggle.js +8 -1
  4. package/bin/commands/mock/update.js +8 -1
  5. package/bin/commands/route/active.js +6 -2
  6. package/bin/commands/route/add.js +12 -2
  7. package/bin/commands/route/create.js +8 -1
  8. package/bin/commands/route/delete.js +12 -2
  9. package/bin/commands/route/update.js +12 -2
  10. package/bin/lib/output.js +20 -1
  11. package/bin/lib/proxy-detect.js +99 -20
  12. package/dist/core/mock-handler.d.ts.map +1 -1
  13. package/dist/core/mock-handler.js +39 -0
  14. package/dist/core/mock-handler.js.map +1 -1
  15. package/dist/core/types.d.ts +2 -0
  16. package/dist/core/types.d.ts.map +1 -1
  17. package/index.js +10 -2
  18. package/package.json +1 -1
  19. package/web/dist/assets/{checkbox-DqcyLjRe.js → checkbox-DfpRw_5t.js} +1 -1
  20. package/web/dist/assets/{code-fixer-BXKaY7F8.js → code-fixer-BWFV7546.js} +1 -1
  21. package/web/dist/assets/{detail-panel-ixNPR0m-.js → detail-panel-Mm27FyFh.js} +1 -1
  22. package/web/dist/assets/{global-panel-shell-QniQvRWl.js → global-panel-shell-DZ4TKKlS.js} +1 -1
  23. package/web/dist/assets/{health-panel--A3H1fpl.js → health-panel-DhLw8KKm.js} +1 -1
  24. package/web/dist/assets/{index-CHl5ibmb.js → index-Cw0WJSVU.js} +2 -2
  25. package/web/dist/assets/index-DlO3YLfJ.css +2 -0
  26. package/web/dist/assets/{mobile-proxy-panel-D2ZdvKNl.js → mobile-proxy-panel-rqw9ZZUP.js} +1 -1
  27. package/web/dist/assets/{mock-config-W0ZFx5dQ.js → mock-config-OWiFPvcg.js} +1 -1
  28. package/web/dist/assets/{mock-editor-panel-CWVTWR-o.js → mock-editor-panel-CeZYoHc3.js} +1 -1
  29. package/web/dist/assets/{monaco-editor-Dk9Ev4mh.js → monaco-editor-BQw_uavF.js} +1 -1
  30. package/web/dist/assets/{plugin-code-editor-DtmbZCNZ.js → plugin-code-editor-BXHzyirh.js} +1 -1
  31. package/web/dist/assets/{plugin-config-cTSgUsva.js → plugin-config-d4HeoImD.js} +1 -1
  32. package/web/dist/assets/{plugin-generator-0ZQhqtnh.js → plugin-generator-DqQTPpcL.js} +1 -1
  33. package/web/dist/assets/{plugin-test-dialog-CprJ-Byc.js → plugin-test-dialog-t0lJXL3D.js} +1 -1
  34. package/web/dist/assets/{route-preview-DyZbaemw.js → route-preview-CPzLw9Ze.js} +1 -1
  35. package/web/dist/assets/{rule-ai-assistant-panel-Bl-yK0cP.js → rule-ai-assistant-panel-Crc13ODb.js} +1 -1
  36. package/web/dist/assets/rule-config-LI7rxAJs.js +15 -0
  37. package/web/dist/assets/{rule-overview-panel-KEpeAiaG.js → rule-overview-panel-Cq2mUmBQ.js} +1 -1
  38. package/web/dist/assets/{select-Cjn7kqsh.js → select-C6-okPSH.js} +1 -1
  39. package/web/dist/assets/{settings-panel-CorzmHS5.js → settings-panel-CmCxMJMm.js} +1 -1
  40. package/web/dist/index.html +2 -2
  41. package/web/dist/assets/index-bfV7sxx5.css +0 -2
  42. package/web/dist/assets/rule-config-B_vHYXwb.js +0 -15
@@ -79,6 +79,7 @@ async function run() {
79
79
  const running = await isProxyRunning()
80
80
 
81
81
  let result
82
+ let fileOnly = false
82
83
  if (running) {
83
84
  try {
84
85
  result = await apiPost('/api/mocks', rule)
@@ -86,13 +87,19 @@ async function run() {
86
87
  } catch (e) {
87
88
  // Fallback to file mode
88
89
  result = addMockRule(rule)
90
+ fileOnly = true
89
91
  }
90
92
  } else {
91
93
  result = addMockRule(rule)
94
+ fileOnly = true
92
95
  }
93
96
 
97
+ if (fileOnly) output.warnFileOnlyMode()
98
+
94
99
  if (jsonFlag) {
95
- output.jsonRaw(result)
100
+ output.jsonRaw(fileOnly
101
+ ? { ...result, fileOnly: true, warning: output.FILE_ONLY_WARNING }
102
+ : result)
96
103
  return
97
104
  }
98
105
 
@@ -24,6 +24,7 @@ async function run() {
24
24
 
25
25
  const running = await isProxyRunning()
26
26
 
27
+ let fileOnly = false
27
28
  if (running) {
28
29
  try {
29
30
  await apiDelete(`/api/mocks/${id}`)
@@ -34,6 +35,7 @@ async function run() {
34
35
  output.error(`Mock rule not found: id=${id}`)
35
36
  process.exit(1)
36
37
  }
38
+ fileOnly = true
37
39
  }
38
40
  } else {
39
41
  const deleted = deleteMockRule(id)
@@ -41,10 +43,15 @@ async function run() {
41
43
  output.error(`Mock rule not found: id=${id}`)
42
44
  process.exit(1)
43
45
  }
46
+ fileOnly = true
44
47
  }
45
48
 
49
+ if (fileOnly) output.warnFileOnlyMode()
50
+
46
51
  if (jsonFlag) {
47
- output.jsonRaw({ success: true, id })
52
+ output.jsonRaw(fileOnly
53
+ ? { success: true, id, fileOnly: true, warning: output.FILE_ONLY_WARNING }
54
+ : { success: true, id })
48
55
  return
49
56
  }
50
57
 
@@ -28,6 +28,7 @@ async function run() {
28
28
  const running = await isProxyRunning()
29
29
 
30
30
  let result
31
+ let fileOnly = false
31
32
  if (running) {
32
33
  try {
33
34
  result = await apiPut(`/api/mocks/${id}`, { enabled })
@@ -39,6 +40,7 @@ async function run() {
39
40
  output.error(`Mock rule not found: id=${id}`)
40
41
  process.exit(1)
41
42
  }
43
+ fileOnly = true
42
44
  }
43
45
  } else {
44
46
  result = updateMockRule(id, { enabled })
@@ -46,10 +48,15 @@ async function run() {
46
48
  output.error(`Mock rule not found: id=${id}`)
47
49
  process.exit(1)
48
50
  }
51
+ fileOnly = true
49
52
  }
50
53
 
54
+ if (fileOnly) output.warnFileOnlyMode()
55
+
51
56
  if (jsonFlag) {
52
- output.jsonRaw(result)
57
+ output.jsonRaw(fileOnly
58
+ ? { ...result, fileOnly: true, warning: output.FILE_ONLY_WARNING }
59
+ : result)
53
60
  return
54
61
  }
55
62
 
@@ -72,6 +72,7 @@ async function run() {
72
72
  const running = await isProxyRunning()
73
73
 
74
74
  let result
75
+ let fileOnly = false
75
76
  if (running) {
76
77
  try {
77
78
  result = await apiPut(`/api/mocks/${id}`, options)
@@ -83,6 +84,7 @@ async function run() {
83
84
  output.error(`Mock rule not found: id=${id}`)
84
85
  process.exit(1)
85
86
  }
87
+ fileOnly = true
86
88
  }
87
89
  } else {
88
90
  result = updateMockRule(id, options)
@@ -90,10 +92,15 @@ async function run() {
90
92
  output.error(`Mock rule not found: id=${id}`)
91
93
  process.exit(1)
92
94
  }
95
+ fileOnly = true
93
96
  }
94
97
 
98
+ if (fileOnly) output.warnFileOnlyMode()
99
+
95
100
  if (jsonFlag) {
96
- output.jsonRaw(result)
101
+ output.jsonRaw(fileOnly
102
+ ? { ...result, fileOnly: true, warning: output.FILE_ONLY_WARNING }
103
+ : result)
97
104
  return
98
105
  }
99
106
 
@@ -64,8 +64,10 @@ async function run() {
64
64
  // Disable all, then enable target
65
65
  files.forEach(f => setRuleFileEnabled(f.name, f.name === targetFile))
66
66
 
67
+ output.warnFileOnlyMode()
68
+
67
69
  if (jsonFlag) {
68
- output.jsonRaw({ success: true, activeFile: targetFile })
70
+ output.jsonRaw({ success: true, activeFile: targetFile, fileOnly: true, warning: output.FILE_ONLY_WARNING })
69
71
  return
70
72
  }
71
73
 
@@ -83,8 +85,10 @@ async function run() {
83
85
 
84
86
  files.forEach(f => setRuleFileEnabled(f.name, f.name === targetFile))
85
87
 
88
+ output.warnFileOnlyMode()
89
+
86
90
  if (jsonFlag) {
87
- output.jsonRaw({ success: true, activeFile: targetFile })
91
+ output.jsonRaw({ success: true, activeFile: targetFile, fileOnly: true, warning: output.FILE_ONLY_WARNING })
88
92
  return
89
93
  }
90
94
 
@@ -81,12 +81,17 @@ async function run() {
81
81
 
82
82
  const newContent = ruleMapToEprcText(ruleMap)
83
83
  saveRuleFileContent(fileName, newContent)
84
+ output.warnFileOnlyMode()
84
85
 
85
86
  if (jsonFlag) {
86
- output.jsonRaw({ success: true, file: fileName, pattern: pat, target: tgt })
87
+ output.jsonRaw({ success: true, file: fileName, pattern: pat, target: tgt,
88
+ fileOnly: true,
89
+ warning: output.FILE_ONLY_WARNING
90
+ })
87
91
  return
88
92
  }
89
93
 
94
+
90
95
  output.header('Route Rule Added')
91
96
  output.success(`${pat} -> ${tgt}`)
92
97
  output.kv('File', fileName)
@@ -109,12 +114,17 @@ async function run() {
109
114
 
110
115
  const newContent = ruleMapToEprcText(ruleMap)
111
116
  saveRuleFileContent(fileName, newContent)
117
+ output.warnFileOnlyMode()
112
118
 
113
119
  if (jsonFlag) {
114
- output.jsonRaw({ success: true, file: fileName, pattern: pat, target: tgt })
120
+ output.jsonRaw({ success: true, file: fileName, pattern: pat, target: tgt,
121
+ fileOnly: true,
122
+ warning: output.FILE_ONLY_WARNING
123
+ })
115
124
  return
116
125
  }
117
126
 
127
+
118
128
  output.header('Route Rule Added')
119
129
  output.success(`${pat} -> ${tgt}`)
120
130
  output.kv('File', fileName)
@@ -34,6 +34,7 @@ async function run() {
34
34
  const running = await isProxyRunning()
35
35
 
36
36
  let result
37
+ let fileOnly = false
37
38
  if (running) {
38
39
  try {
39
40
  result = await apiPost('/api/rule-files', {
@@ -46,6 +47,7 @@ async function run() {
46
47
  // Fallback to file mode
47
48
  try {
48
49
  result = createRuleFile(fileName, content, true)
50
+ fileOnly = true
49
51
  } catch (err) {
50
52
  output.error(err.message)
51
53
  process.exit(1)
@@ -54,14 +56,19 @@ async function run() {
54
56
  } else {
55
57
  try {
56
58
  result = createRuleFile(fileName, content, true)
59
+ fileOnly = true
57
60
  } catch (err) {
58
61
  output.error(err.message)
59
62
  process.exit(1)
60
63
  }
61
64
  }
62
65
 
66
+ if (fileOnly) output.warnFileOnlyMode()
67
+
63
68
  if (jsonFlag) {
64
- output.jsonRaw(result)
69
+ output.jsonRaw(fileOnly
70
+ ? { ...result, fileOnly: true, warning: output.FILE_ONLY_WARNING }
71
+ : result)
65
72
  return
66
73
  }
67
74
 
@@ -75,12 +75,17 @@ async function run() {
75
75
  delete ruleMap[internalKey]
76
76
  const newContent = ruleMapToEprcText(ruleMap)
77
77
  saveRuleFileContent(fileName, newContent)
78
+ output.warnFileOnlyMode()
78
79
 
79
80
  if (jsonFlag) {
80
- output.jsonRaw({ success: true, file: fileName, pattern: pat })
81
+ output.jsonRaw({ success: true, file: fileName, pattern: pat,
82
+ fileOnly: true,
83
+ warning: output.FILE_ONLY_WARNING
84
+ })
81
85
  return
82
86
  }
83
87
 
88
+
84
89
  output.header('Route Rule Deleted')
85
90
  output.success(pat)
86
91
  output.kv('File', fileName)
@@ -102,12 +107,17 @@ async function run() {
102
107
  delete ruleMap[internalKey]
103
108
  const newContent = ruleMapToEprcText(ruleMap)
104
109
  saveRuleFileContent(fileName, newContent)
110
+ output.warnFileOnlyMode()
105
111
 
106
112
  if (jsonFlag) {
107
- output.jsonRaw({ success: true, file: fileName, pattern: pat })
113
+ output.jsonRaw({ success: true, file: fileName, pattern: pat,
114
+ fileOnly: true,
115
+ warning: output.FILE_ONLY_WARNING
116
+ })
108
117
  return
109
118
  }
110
119
 
120
+
111
121
  output.header('Route Rule Deleted')
112
122
  output.success(pat)
113
123
  output.kv('File', fileName)
@@ -81,12 +81,17 @@ async function run() {
81
81
  ruleMap[internalKey] = bm ? tgt + bm[0] : tgt
82
82
  const newContent = ruleMapToEprcText(ruleMap)
83
83
  saveRuleFileContent(fileName, newContent)
84
+ output.warnFileOnlyMode()
84
85
 
85
86
  if (jsonFlag) {
86
- output.jsonRaw({ success: true, file: fileName, pattern: pat, newTarget: tgt })
87
+ output.jsonRaw({ success: true, file: fileName, pattern: pat, newTarget: tgt,
88
+ fileOnly: true,
89
+ warning: output.FILE_ONLY_WARNING
90
+ })
87
91
  return
88
92
  }
89
93
 
94
+
90
95
  output.header('Route Rule Updated')
91
96
  output.success(`${pat} -> ${tgt}`)
92
97
  output.kv('File', fileName)
@@ -108,12 +113,17 @@ async function run() {
108
113
  ruleMap[internalKey] = bm ? tgt + bm[0] : tgt
109
114
  const newContent = ruleMapToEprcText(ruleMap)
110
115
  saveRuleFileContent(fileName, newContent)
116
+ output.warnFileOnlyMode()
111
117
 
112
118
  if (jsonFlag) {
113
- output.jsonRaw({ success: true, file: fileName, pattern: pat, newTarget: tgt })
119
+ output.jsonRaw({ success: true, file: fileName, pattern: pat, newTarget: tgt,
120
+ fileOnly: true,
121
+ warning: output.FILE_ONLY_WARNING
122
+ })
114
123
  return
115
124
  }
116
125
 
126
+
117
127
  output.header('Route Rule Updated')
118
128
  output.success(`${pat} -> ${tgt}`)
119
129
  output.kv('File', fileName)
package/bin/lib/output.js CHANGED
@@ -128,6 +128,23 @@ function tableRow(columns, widths) {
128
128
  console.log(' ' + row)
129
129
  }
130
130
 
131
+ /**
132
+ * Shared downgrade warning when CLI mutates config but cannot reach a live proxy
133
+ * (issue #85). Same wording for mock + route families.
134
+ */
135
+ const FILE_ONLY_WARNING =
136
+ 'Config written to file, but could not connect to a running proxy — restart required for changes to take effect.'
137
+
138
+ /**
139
+ * Emit the file-only downgrade warning. Always prints to stderr (including
140
+ * --json mode) so the failure mode is never silent.
141
+ * @returns {string} the warning message
142
+ */
143
+ function warnFileOnlyMode() {
144
+ console.error(chalk.yellow(' ⚠'), FILE_ONLY_WARNING)
145
+ return FILE_ONLY_WARNING
146
+ }
147
+
131
148
  module.exports = {
132
149
  setJsonMode,
133
150
  isJsonMode,
@@ -142,5 +159,7 @@ module.exports = {
142
159
  plain,
143
160
  kv,
144
161
  bullet,
145
- tableRow
162
+ tableRow,
163
+ FILE_ONLY_WARNING,
164
+ warnFileOnlyMode,
146
165
  }
@@ -6,6 +6,15 @@
6
6
  * every CLI command session-aware without individual changes: when
7
7
  * --session <id> is set, MEDDLE_HOME is pinned to the session's data dir
8
8
  * and getProxyUrl() returns that session's port.
9
+ *
10
+ * Probe priority (issue #85):
11
+ * 1. MEDDLE_SESSION_PORT (pinned session)
12
+ * 2. mcp-proxy-url.json (written by proxy on every start)
13
+ * 3. DEFAULT_PROXY_BASE (http://127.0.0.1:8989)
14
+ *
15
+ * Stale ports in mcp-proxy-url.json must not stick forever: isProxyRunning /
16
+ * resolveLiveProxyUrl fall through to later candidates when a probe fails,
17
+ * and cache the first live URL for subsequent getProxyUrl() / API calls.
9
18
  */
10
19
 
11
20
  const fs = require('fs')
@@ -16,39 +25,61 @@ const { applySessionContext, GLOBAL_DEFAULT_PORT } = require('./session-args')
16
25
  // Apply --session / MEDDLE_HOME precedence before computing paths.
17
26
  applySessionContext()
18
27
 
28
+ // Resolved once for CLI (MEDDLE_HOME is set before this module loads).
19
29
  const meddleDir = resolveMeddleHome()
20
30
  const mcpFile = path.join(meddleDir, 'mcp-proxy-url.json')
21
31
  const DEFAULT_PROXY_BASE = `http://127.0.0.1:${GLOBAL_DEFAULT_PORT}`
22
32
 
33
+ /** @type {string | null} */
34
+ let resolvedProxyUrl = null
35
+
36
+ function getMcpFilePath() {
37
+ // Prefer live MEDDLE_HOME so tests can point at a temp home after require.
38
+ const home = (process.env.MEDDLE_HOME || '').trim() || meddleDir
39
+ return path.join(home, 'mcp-proxy-url.json')
40
+ }
41
+
23
42
  /**
24
- * Get proxy URL.
25
- *
26
- * Priority:
27
- * 1. MEDDLE_SESSION_PORT env (set by --session resolution)
28
- * 2. mcp-proxy-url.json (written by proxy on startup)
29
- * 3. DEFAULT_PROXY_BASE (http://127.0.0.1:8989)
43
+ * Sync best-effort URL (no liveness check). Prefer a previously resolved live
44
+ * URL so API calls after isProxyRunning() hit the working port.
30
45
  */
31
46
  function getProxyUrl() {
47
+ if (resolvedProxyUrl) return resolvedProxyUrl
48
+ const candidates = getCandidateProxyUrls()
49
+ return candidates[0] || DEFAULT_PROXY_BASE
50
+ }
51
+
52
+ /**
53
+ * Ordered candidate URLs to probe (deduped).
54
+ * Session pin is exclusive — do not fall back to global file/default.
55
+ */
56
+ function getCandidateProxyUrls() {
32
57
  if (process.env.MEDDLE_SESSION_PORT) {
33
- return `http://127.0.0.1:${process.env.MEDDLE_SESSION_PORT}`
58
+ return [`http://127.0.0.1:${process.env.MEDDLE_SESSION_PORT}`]
34
59
  }
60
+ const urls = []
35
61
  try {
36
- if (fs.existsSync(mcpFile)) {
37
- const data = JSON.parse(fs.readFileSync(mcpFile, 'utf8'))
38
- if (data.proxyUrl) return data.proxyUrl
62
+ const file = getMcpFilePath()
63
+ if (fs.existsSync(file)) {
64
+ const data = JSON.parse(fs.readFileSync(file, 'utf8'))
65
+ if (data.proxyUrl && typeof data.proxyUrl === 'string') {
66
+ urls.push(data.proxyUrl.replace(/\/$/, ''))
67
+ }
39
68
  }
40
69
  } catch (_) {}
41
- return DEFAULT_PROXY_BASE
70
+ if (!urls.includes(DEFAULT_PROXY_BASE)) {
71
+ urls.push(DEFAULT_PROXY_BASE)
72
+ }
73
+ return urls
42
74
  }
43
75
 
44
76
  /**
45
- * Check if proxy is running by attempting to connect
46
- * @param {number} timeoutMs - Timeout in milliseconds (default 2000)
77
+ * @param {string} url
78
+ * @param {number} timeoutMs
47
79
  */
48
- async function isProxyRunning(timeoutMs = 2000) {
49
- const url = getProxyUrl()
80
+ async function probeUrl(url, timeoutMs = 2000) {
50
81
  try {
51
- const response = await fetch(url + '/api/mocks', {
82
+ const response = await fetch(url.replace(/\/$/, '') + '/api/mocks', {
52
83
  method: 'GET',
53
84
  signal: AbortSignal.timeout(timeoutMs)
54
85
  })
@@ -58,6 +89,38 @@ async function isProxyRunning(timeoutMs = 2000) {
58
89
  }
59
90
  }
60
91
 
92
+ /**
93
+ * Probe candidates in order; cache and return the first live URL, or null.
94
+ * @param {number} timeoutMs
95
+ * @param {(url: string, timeoutMs: number) => Promise<boolean>} [probe]
96
+ */
97
+ async function resolveLiveProxyUrl(timeoutMs = 2000, probe = probeUrl) {
98
+ if (resolvedProxyUrl) {
99
+ const perTry = Math.min(timeoutMs, 800)
100
+ if (await probe(resolvedProxyUrl, perTry)) return resolvedProxyUrl
101
+ resolvedProxyUrl = null
102
+ }
103
+
104
+ const candidates = getCandidateProxyUrls()
105
+ const perTry = Math.max(200, Math.floor(timeoutMs / Math.max(1, candidates.length)))
106
+ for (const url of candidates) {
107
+ if (await probe(url, perTry)) {
108
+ resolvedProxyUrl = url
109
+ return url
110
+ }
111
+ }
112
+ return null
113
+ }
114
+
115
+ /**
116
+ * Check if proxy is running by probing candidates (file → default fallback).
117
+ * @param {number} timeoutMs - Timeout in milliseconds (default 2000)
118
+ */
119
+ async function isProxyRunning(timeoutMs = 2000) {
120
+ const url = await resolveLiveProxyUrl(timeoutMs)
121
+ return !!url
122
+ }
123
+
61
124
  /**
62
125
  * Wait for proxy to start
63
126
  * @param {number} timeoutMs - Timeout in milliseconds (default 5000)
@@ -69,15 +132,15 @@ function waitForProxyUrl(timeoutMs = 5000) {
69
132
  const check = () => {
70
133
  try {
71
134
  if (process.env.MEDDLE_SESSION_PORT) {
72
- // For --session mode, poll the HTTP endpoint directly.
73
135
  const port = process.env.MEDDLE_SESSION_PORT
74
136
  fetch(`http://127.0.0.1:${port}/api/mocks`, { method: 'GET', signal: AbortSignal.timeout(500) })
75
137
  .then((r) => { if (r.ok) resolve(`http://127.0.0.1:${port}`); else retry() })
76
138
  .catch(() => retry())
77
139
  return
78
140
  }
79
- if (fs.existsSync(mcpFile)) {
80
- const data = JSON.parse(fs.readFileSync(mcpFile, 'utf8'))
141
+ const file = getMcpFilePath()
142
+ if (fs.existsSync(file)) {
143
+ const data = JSON.parse(fs.readFileSync(file, 'utf8'))
81
144
  if (data.proxyUrl) {
82
145
  return resolve(data.proxyUrl)
83
146
  }
@@ -95,11 +158,27 @@ function waitForProxyUrl(timeoutMs = 5000) {
95
158
  })
96
159
  }
97
160
 
161
+ /** Test-only: clear cached live URL so the next probe re-reads candidates. */
162
+ function __resetResolvedProxyUrlForTest() {
163
+ resolvedProxyUrl = null
164
+ }
165
+
166
+ /** Test-only: seed the cached live URL. */
167
+ function __setResolvedProxyUrlForTest(url) {
168
+ resolvedProxyUrl = url || null
169
+ }
170
+
98
171
  module.exports = {
99
172
  meddleDir,
100
173
  mcpFile,
101
174
  DEFAULT_PROXY_BASE,
102
175
  getProxyUrl,
176
+ getCandidateProxyUrls,
177
+ getMcpFilePath,
178
+ resolveLiveProxyUrl,
179
+ probeUrl,
103
180
  isProxyRunning,
104
- waitForProxyUrl
181
+ waitForProxyUrl,
182
+ __resetResolvedProxyUrlForTest,
183
+ __setResolvedProxyUrlForTest,
105
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mock-handler.d.ts","sourceRoot":"","sources":["../../core/mock-handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAUvE,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAQ3E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,WAAW,CAgQhE"}
1
+ {"version":3,"file":"mock-handler.d.ts","sourceRoot":"","sources":["../../core/mock-handler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAUvE,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAQ3E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,WAAW,CAmShE"}
@@ -40,6 +40,7 @@ exports.dedupeMockRulesById = dedupeMockRulesById;
40
40
  exports.createMockHandler = createMockHandler;
41
41
  const fs = __importStar(require("fs"));
42
42
  const path = __importStar(require("path"));
43
+ const chokidar_1 = __importDefault(require("chokidar"));
43
44
  const debug_1 = __importDefault(require("debug"));
44
45
  const map_local_1 = require("./map-local");
45
46
  const proxy_record_1 = require("./proxy-record");
@@ -95,6 +96,11 @@ function createMockHandler(ctx) {
95
96
  ctx.mockIdSeq = (data.nextId || Math.max(0, ...ctx.mockRules.map(r => r.id || 0))) + 1;
96
97
  proxyDebug(`已加载 ${ctx.mockRules.length} 条 Mock 规则 (${mockFile})`);
97
98
  }
99
+ else {
100
+ // File removed / never created — clear in-memory rules (watcher unlink).
101
+ ctx.mockRules = [];
102
+ proxyDebug(`Mock 规则文件不存在,已清空内存规则 (${mockFile})`);
103
+ }
98
104
  }
99
105
  catch (err) {
100
106
  console.error('加载 mock 规则失败:', err.message);
@@ -336,9 +342,42 @@ function createMockHandler(ctx) {
336
342
  doSend();
337
343
  }
338
344
  }
345
+ /**
346
+ * Watch the mocks file for external edits (CLI file-mode / hand edits).
347
+ * Aligns with route-rules watcher so file-only writes still hot-reload (issue #85).
348
+ */
349
+ function initMockFileWatcher(onReload) {
350
+ const mockFile = getMockFilePath();
351
+ const dir = path.dirname(mockFile);
352
+ const base = path.basename(mockFile);
353
+ try {
354
+ if (!fs.existsSync(dir))
355
+ fs.mkdirSync(dir, { recursive: true });
356
+ }
357
+ catch (_) { /* ignore */ }
358
+ // Watch the directory (not only the file) so atomic replace / recreate
359
+ // still triggers — same pattern as route-rules watcher.
360
+ const watcher = chokidar_1.default.watch(dir, {
361
+ ignoreInitial: true,
362
+ awaitWriteFinish: { stabilityThreshold: 50, pollInterval: 25 },
363
+ });
364
+ const reload = (event, changedPath) => {
365
+ if (changedPath && path.basename(changedPath) !== base)
366
+ return;
367
+ proxyDebug(`mocks file ${event}: ${base}`);
368
+ loadMockRules();
369
+ if (onReload)
370
+ onReload();
371
+ };
372
+ watcher.on('change', (p) => reload('changed', p));
373
+ watcher.on('add', (p) => reload('added', p));
374
+ watcher.on('unlink', (p) => reload('removed', p));
375
+ proxyDebug(`watching mocks file: ${mockFile}`);
376
+ }
339
377
  return {
340
378
  getMockFilePath, loadMockRules, saveMockRules, matchMockRule,
341
379
  buildMockResponseForTest, sendMockResponse, loadCustomPathsFromSettings,
380
+ initMockFileWatcher,
342
381
  };
343
382
  }
344
383
  //# sourceMappingURL=mock-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-handler.js","sourceRoot":"","sources":["../../core/mock-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-handler.js","sourceRoot":"","sources":["../../core/mock-handler.ts"],"names":[],"mappings":"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"}
@@ -591,6 +591,8 @@ export interface MockHandler {
591
591
  loadCustomPathsFromSettings(): {
592
592
  mocksFilePath: string | null;
593
593
  };
594
+ /** Watch mocks file for external edits; optional onReload syncs serverContext + broadcasts. */
595
+ initMockFileWatcher(onReload?: () => void): void;
594
596
  }
595
597
  export interface DiagnosticCheck {
596
598
  name: string;