procsi 0.4.0 → 0.5.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 (118) hide show
  1. package/README.md +47 -469
  2. package/dist/cli/commands/daemon.d.ts.map +1 -1
  3. package/dist/cli/commands/daemon.js +1 -0
  4. package/dist/cli/commands/daemon.js.map +1 -1
  5. package/dist/cli/commands/off.d.ts.map +1 -1
  6. package/dist/cli/commands/off.js +11 -2
  7. package/dist/cli/commands/off.js.map +1 -1
  8. package/dist/cli/commands/on.d.ts +33 -0
  9. package/dist/cli/commands/on.d.ts.map +1 -1
  10. package/dist/cli/commands/on.js +91 -3
  11. package/dist/cli/commands/on.js.map +1 -1
  12. package/dist/cli/commands/requests.d.ts +25 -0
  13. package/dist/cli/commands/requests.d.ts.map +1 -1
  14. package/dist/cli/commands/requests.js +35 -4
  15. package/dist/cli/commands/requests.js.map +1 -1
  16. package/dist/cli/formatters/detail.d.ts.map +1 -1
  17. package/dist/cli/formatters/detail.js +6 -0
  18. package/dist/cli/formatters/detail.js.map +1 -1
  19. package/dist/cli/formatters/table.d.ts.map +1 -1
  20. package/dist/cli/formatters/table.js +11 -1
  21. package/dist/cli/formatters/table.js.map +1 -1
  22. package/dist/cli/tui/App.d.ts.map +1 -1
  23. package/dist/cli/tui/App.js +47 -2
  24. package/dist/cli/tui/App.js.map +1 -1
  25. package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -1
  26. package/dist/cli/tui/components/AccordionPanel.js +2 -1
  27. package/dist/cli/tui/components/AccordionPanel.js.map +1 -1
  28. package/dist/cli/tui/components/FilterBar.d.ts +10 -2
  29. package/dist/cli/tui/components/FilterBar.d.ts.map +1 -1
  30. package/dist/cli/tui/components/FilterBar.js +100 -12
  31. package/dist/cli/tui/components/FilterBar.js.map +1 -1
  32. package/dist/cli/tui/components/HelpModal.d.ts.map +1 -1
  33. package/dist/cli/tui/components/HelpModal.js +2 -1
  34. package/dist/cli/tui/components/HelpModal.js.map +1 -1
  35. package/dist/cli/tui/components/RequestListItem.d.ts +8 -0
  36. package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -1
  37. package/dist/cli/tui/components/RequestListItem.js +14 -2
  38. package/dist/cli/tui/components/RequestListItem.js.map +1 -1
  39. package/dist/cli/tui/components/StatusBar.d.ts.map +1 -1
  40. package/dist/cli/tui/components/StatusBar.js +1 -0
  41. package/dist/cli/tui/components/StatusBar.js.map +1 -1
  42. package/dist/cli/tui/hooks/useRequests.d.ts +4 -1
  43. package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -1
  44. package/dist/cli/tui/hooks/useRequests.js +36 -9
  45. package/dist/cli/tui/hooks/useRequests.js.map +1 -1
  46. package/dist/cli/tui/utils/filters.d.ts.map +1 -1
  47. package/dist/cli/tui/utils/filters.js +1 -0
  48. package/dist/cli/tui/utils/filters.js.map +1 -1
  49. package/dist/daemon/control.d.ts +3 -0
  50. package/dist/daemon/control.d.ts.map +1 -1
  51. package/dist/daemon/control.js +150 -1
  52. package/dist/daemon/control.js.map +1 -1
  53. package/dist/daemon/index.js +41 -2
  54. package/dist/daemon/index.js.map +1 -1
  55. package/dist/daemon/procsi-client.d.ts.map +1 -1
  56. package/dist/daemon/procsi-client.js +1 -0
  57. package/dist/daemon/procsi-client.js.map +1 -1
  58. package/dist/daemon/proxy.d.ts +3 -0
  59. package/dist/daemon/proxy.d.ts.map +1 -1
  60. package/dist/daemon/proxy.js +19 -6
  61. package/dist/daemon/proxy.js.map +1 -1
  62. package/dist/daemon/replay-tracker.d.ts +11 -0
  63. package/dist/daemon/replay-tracker.d.ts.map +1 -0
  64. package/dist/daemon/replay-tracker.js +47 -0
  65. package/dist/daemon/replay-tracker.js.map +1 -0
  66. package/dist/daemon/replay.d.ts +20 -0
  67. package/dist/daemon/replay.d.ts.map +1 -0
  68. package/dist/daemon/replay.js +113 -0
  69. package/dist/daemon/replay.js.map +1 -0
  70. package/dist/daemon/storage.d.ts +12 -2
  71. package/dist/daemon/storage.d.ts.map +1 -1
  72. package/dist/daemon/storage.js +84 -7
  73. package/dist/daemon/storage.js.map +1 -1
  74. package/dist/mcp/server.d.ts +3 -0
  75. package/dist/mcp/server.d.ts.map +1 -1
  76. package/dist/mcp/server.js +167 -3
  77. package/dist/mcp/server.js.map +1 -1
  78. package/dist/overrides/php.d.ts +15 -0
  79. package/dist/overrides/php.d.ts.map +1 -0
  80. package/dist/overrides/php.js +29 -0
  81. package/dist/overrides/php.js.map +1 -0
  82. package/dist/overrides/python.d.ts +19 -0
  83. package/dist/overrides/python.d.ts.map +1 -0
  84. package/dist/overrides/python.js +74 -0
  85. package/dist/overrides/python.js.map +1 -0
  86. package/dist/overrides/ruby.d.ts +17 -0
  87. package/dist/overrides/ruby.d.ts.map +1 -0
  88. package/dist/overrides/ruby.js +55 -0
  89. package/dist/overrides/ruby.js.map +1 -0
  90. package/dist/shared/body-search.d.ts +28 -0
  91. package/dist/shared/body-search.d.ts.map +1 -0
  92. package/dist/shared/body-search.js +64 -0
  93. package/dist/shared/body-search.js.map +1 -0
  94. package/dist/shared/constants.d.ts +2 -0
  95. package/dist/shared/constants.d.ts.map +1 -1
  96. package/dist/shared/constants.js +2 -0
  97. package/dist/shared/constants.js.map +1 -1
  98. package/dist/shared/control-client.d.ts +23 -2
  99. package/dist/shared/control-client.d.ts.map +1 -1
  100. package/dist/shared/control-client.js +15 -2
  101. package/dist/shared/control-client.js.map +1 -1
  102. package/dist/shared/daemon.js +1 -0
  103. package/dist/shared/daemon.js.map +1 -1
  104. package/dist/shared/project.d.ts +4 -0
  105. package/dist/shared/project.d.ts.map +1 -1
  106. package/dist/shared/project.js +4 -0
  107. package/dist/shared/project.js.map +1 -1
  108. package/dist/shared/proxy-info.d.ts.map +1 -1
  109. package/dist/shared/proxy-info.js +5 -0
  110. package/dist/shared/proxy-info.js.map +1 -1
  111. package/dist/shared/regex-filter.d.ts +35 -0
  112. package/dist/shared/regex-filter.d.ts.map +1 -0
  113. package/dist/shared/regex-filter.js +81 -0
  114. package/dist/shared/regex-filter.js.map +1 -0
  115. package/dist/shared/types.d.ts +13 -0
  116. package/dist/shared/types.d.ts.map +1 -1
  117. package/package.json +1 -1
  118. package/skills/procsi/SKILL.md +9 -4
@@ -13,6 +13,7 @@ export function createProcsiClient(storage) {
13
13
  getRequest: async (id) => storage.getRequest(id) ?? null,
14
14
  searchBodies: async (options) => storage.searchBodies({
15
15
  query: options.query,
16
+ target: options.target,
16
17
  filter: options.filter,
17
18
  limit: options.limit,
18
19
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"procsi-client.js","sourceRoot":"","sources":["../../src/daemon/procsi-client.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO;QACL,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAClE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,mBAAmB,CAAC;YAC1B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC;QACJ,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;QACxD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,YAAY,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACJ,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,eAAe,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;KACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"procsi-client.js","sourceRoot":"","sources":["../../src/daemon/procsi-client.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO;QACL,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAClE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,mBAAmB,CAAC;YAC1B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC;QACJ,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;QACxD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,YAAY,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACJ,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,eAAe,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;KACL,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Headers } from "mockttp";
2
2
  import type { RequestRepository } from "./storage.js";
3
3
  import type { InterceptorRunner } from "./interceptor-runner.js";
4
+ import type { ReplayTracker } from "./replay-tracker.js";
4
5
  import { type LogLevel } from "../shared/logger.js";
5
6
  /** Default maximum body size to capture (10MB) */
6
7
  export declare const DEFAULT_MAX_BODY_SIZE: number;
@@ -17,6 +18,8 @@ export interface ProxyOptions {
17
18
  maxBodySize?: number;
18
19
  /** Interceptor runner for mock/modify/observe interceptors */
19
20
  interceptorRunner?: InterceptorRunner;
21
+ /** Tracks daemon-initiated replay requests via one-time replay tokens. */
22
+ replayTracker?: ReplayTracker;
20
23
  }
21
24
  export interface ProxyServer {
22
25
  port: number;
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoBlE,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AAKtD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uGAAuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAeD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAmV7E;AAkBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvE"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAqBlE,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AAKtD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uGAAuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAeD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA0V7E;AAkBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvE"}
@@ -1,6 +1,6 @@
1
1
  import * as mockttp from "mockttp";
2
2
  import { createLogger } from "../shared/logger.js";
3
- import { PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, } from "../shared/constants.js";
3
+ import { PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, PROCSI_REPLAY_TOKEN_HEADER, } from "../shared/constants.js";
4
4
  /** Default maximum body size to capture (10MB) */
5
5
  export const DEFAULT_MAX_BODY_SIZE = 10 * 1024 * 1024;
6
6
  const MAX_RUNTIME_SOURCE_LENGTH = 32;
@@ -20,7 +20,7 @@ function normaliseRuntimeSource(value) {
20
20
  * Create and start a MITM proxy server that captures all HTTP/HTTPS traffic.
21
21
  */
22
22
  export async function createProxy(options) {
23
- const { storage, sessionId, label, projectRoot, logLevel, interceptorRunner } = options;
23
+ const { storage, sessionId, label, projectRoot, logLevel, interceptorRunner, replayTracker } = options;
24
24
  // Create logger if projectRoot is provided
25
25
  const logger = projectRoot ? createLogger("proxy", projectRoot, logLevel) : undefined;
26
26
  // Map to track request info for response correlation
@@ -93,6 +93,7 @@ export async function createProxy(options) {
93
93
  const requestSessionId = storedHeaders[PROCSI_SESSION_ID_HEADER];
94
94
  const requestSessionToken = storedHeaders[PROCSI_SESSION_TOKEN_HEADER];
95
95
  const runtimeSourceHeader = storedHeaders[PROCSI_RUNTIME_SOURCE_HEADER];
96
+ const replayTokenHeader = storedHeaders[PROCSI_REPLAY_TOKEN_HEADER];
96
97
  const legacySessionId = storedHeaders[LEGACY_SESSION_HEADER];
97
98
  const headersCopy = { ...storedHeaders };
98
99
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
@@ -101,6 +102,8 @@ export async function createProxy(options) {
101
102
  delete headersCopy[PROCSI_SESSION_TOKEN_HEADER];
102
103
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
103
104
  delete headersCopy[PROCSI_RUNTIME_SOURCE_HEADER];
105
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
106
+ delete headersCopy[PROCSI_REPLAY_TOKEN_HEADER];
104
107
  // Legacy header used before token hardening. Strip it for compatibility.
105
108
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
106
109
  delete headersCopy[LEGACY_SESSION_HEADER];
@@ -150,6 +153,12 @@ export async function createProxy(options) {
150
153
  requestBody: decodedBody,
151
154
  requestBodyTruncated,
152
155
  });
156
+ if (typeof replayTokenHeader === "string") {
157
+ const replay = replayTracker?.consume(replayTokenHeader);
158
+ if (replay) {
159
+ storage.updateRequestReplay(ourId, replay.replayedFromId, replay.replayInitiator);
160
+ }
161
+ }
153
162
  // Store mapping from mockttp ID to our ID and timestamp
154
163
  requestInfo.set(request.id, { ourId, timestamp, requestBodyTruncated });
155
164
  // Run interceptor if available
@@ -181,14 +190,16 @@ export async function createProxy(options) {
181
190
  };
182
191
  }
183
192
  if (result?.interception) {
184
- // forward() was called — record interception metadata, let proxy continue
185
- storage.updateRequestInterception(ourId, result.interception.name, result.interception.type);
193
+ // forward() was called — record interceptor name, but delay "modified" marking
194
+ // until we know the response was actually changed.
195
+ storage.updateRequestInterception(ourId, result.interception.name);
186
196
  }
187
197
  }
188
198
  // Strip internal procsi attribution headers from the upstream request.
189
199
  if (requestSessionId !== undefined ||
190
200
  requestSessionToken !== undefined ||
191
201
  runtimeSourceHeader !== undefined ||
202
+ replayTokenHeader !== undefined ||
192
203
  legacySessionId !== undefined) {
193
204
  const upstreamHeaders = flattenHeaders(request.headers);
194
205
  const cleanedHeaders = { ...upstreamHeaders };
@@ -199,6 +210,8 @@ export async function createProxy(options) {
199
210
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
200
211
  delete cleanedHeaders[PROCSI_RUNTIME_SOURCE_HEADER];
201
212
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
213
+ delete cleanedHeaders[PROCSI_REPLAY_TOKEN_HEADER];
214
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
202
215
  delete cleanedHeaders[LEGACY_SESSION_HEADER];
203
216
  return { headers: cleanedHeaders };
204
217
  }
@@ -256,8 +269,8 @@ export async function createProxy(options) {
256
269
  return buildMockttpResponse(interceptResult.responseOverride);
257
270
  }
258
271
  if (interceptResult?.interception) {
259
- // Observe mode — record interception metadata but don't modify response
260
- storage.updateRequestInterception(info.ourId, interceptResult.interception.name, interceptResult.interception.type);
272
+ // Observe mode — keep interceptor attribution without marking as modified.
273
+ storage.updateRequestInterception(info.ourId, interceptResult.interception.name);
261
274
  }
262
275
  }
263
276
  // Update request with response data using our ID
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAMnC,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAehC,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAyBjD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAC1F,OAAO,CAAC;IAEV,2CAA2C;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtF,qDAAqD;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB,CAAC;IAEJ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAEjE,4DAA4D;IAC5D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA8B,CAAC;IACjE,SAAS,gBAAgB,CAAC,GAAW;QACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,2DAA2D;IAC3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+C,CAAC;IAChF,SAAS,uBAAuB,CAC9B,GAAW,EACX,KAAa;QAEb,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAChF,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,QAAQ,EAAE,OAAO,CAAC,UAAU;SAC7B;QACD,yCAAyC;QACzC,aAAa,EAAE,KAAK;QACpB,8DAA8D;QAC9D,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,oDAAoD;IACpD,+EAA+E;IAC/E,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC9B,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC;QAC3C,gEAAgE;QAChE,qBAAqB,EAAE,IAAI;QAE3B,aAAa,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,qCAAqC;YACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEjC,mCAAmC;YACnC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhD,kDAAkD;YAClD,gFAAgF;YAChF,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;YAEnF,kEAAkE;YAClE,2DAA2D;YAC3D,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,CAAC,CAAC,SAAS,CAAC;YAEhB,6EAA6E;YAC7E,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAEzC,qDAAqD;YACrD,MAAM,gBAAgB,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAAC;YACjE,MAAM,mBAAmB,GAAG,aAAa,CAAC,2BAA2B,CAAC,CAAC;YACvE,MAAM,mBAAmB,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAC;YACxE,MAAM,iBAAiB,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YACzC,gEAAgE;YAChE,OAAO,WAAW,CAAC,wBAAwB,CAAC,CAAC;YAC7C,gEAAgE;YAChE,OAAO,WAAW,CAAC,2BAA2B,CAAC,CAAC;YAChD,gEAAgE;YAChE,OAAO,WAAW,CAAC,4BAA4B,CAAC,CAAC;YACjD,gEAAgE;YAChE,OAAO,WAAW,CAAC,0BAA0B,CAAC,CAAC;YAC/C,yEAAyE;YACzE,gEAAgE;YAChE,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAC1C,MAAM,kBAAkB,GAAG,WAAW,CAAC;YAEvC,2EAA2E;YAC3E,IAAI,kBAAkB,GAAG,SAAS,CAAC;YACnC,IAAI,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;gBACpF,MAAM,OAAO,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;gBAC/E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,kBAAkB,GAAG,gBAAgB,CAAC;oBACtC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC/B,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,IAAI,CAAC,uDAAuD,EAAE;wBACpE,SAAS,EAAE,gBAAgB;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,gBAAgB,KAAK,SAAS,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBAC1E,MAAM,EAAE,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAChF,CAAC;YAED,6EAA6E;YAC7E,MAAM,aAAa,GAAG,kBAAkB;gBACtC,CAAC,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;gBAC7C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAG,aAAa,IAAI,aAAa,CAAC;YAE9C,MAAM,EAAE,KAAK,CAAC,kBAAkB,EAAE;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,kBAAkB;gBAC3B,aAAa,EAAE,oBAAoB;aACpC,CAAC,CAAC;YAEH,2CAA2C;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;gBAChC,SAAS,EAAE,kBAAkB;gBAC7B,KAAK;gBACL,MAAM;gBACN,SAAS;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;gBAC/B,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,WAAW;gBACxB,oBAAoB;aACrB,CAAC,CAAC;YAEH,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACzD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAExE,+BAA+B;YAC/B,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,kBAAkB,GAAuB;oBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;oBAC/B,OAAO,EAAE,EAAE,GAAG,kBAAkB,EAAE;oBAClC,IAAI,EAAE,WAAW;iBAClB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;gBAEhF,IAAI,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBAChD,mEAAmE;oBACnE,OAAO,CAAC,yBAAyB,CAC/B,KAAK,EACL,MAAM,CAAC,YAAY,CAAC,IAAI,EACxB,MAAM,CAAC,YAAY,CAAC,IAAI,CACzB,CAAC;oBAEF,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;wBAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;wBACvC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;oBAE/B,OAAO,CAAC,qBAAqB,CAAC,KAAK,EAAE;wBACnC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;wBAClC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;wBAC1C,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAClC,qBAAqB,EAAE,KAAK;qBAC7B,CAAC,CAAC;oBAEH,OAAO;wBACL,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC;qBACpD,CAAC;gBACJ,CAAC;gBAED,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;oBACzB,+EAA+E;oBAC/E,mDAAmD;oBACnD,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,uEAAuE;YACvE,IACE,gBAAgB,KAAK,SAAS;gBAC9B,mBAAmB,KAAK,SAAS;gBACjC,mBAAmB,KAAK,SAAS;gBACjC,iBAAiB,KAAK,SAAS;gBAC/B,eAAe,KAAK,SAAS,EAC7B,CAAC;gBACD,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,cAAc,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;gBAC9C,gEAAgE;gBAChE,OAAO,cAAc,CAAC,wBAAwB,CAAC,CAAC;gBAChD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,2BAA2B,CAAC,CAAC;gBACnD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,4BAA4B,CAAC,CAAC;gBACpD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,0BAA0B,CAAC,CAAC;gBAClD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,qBAAqB,CAAC,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;YACrC,CAAC;YAED,wDAAwD;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,QAA6B,EAAE,OAAyB,EAAE,EAAE;YACjF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,mEAAmE;gBACnE,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/C,mCAAmC;YACnC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEjD,kDAAkD;YAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;YAErF,0DAA0D;YAC1D,mDAAmD;YACnD,MAAM,WAAW,GACf,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC7B,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpE,CAAC,CAAC,SAAS,CAAC;YAEhB,6EAA6E;YAC7E,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAEzC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE;gBAC7B,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,UAAU;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,aAAa,EAAE,qBAAqB;aACrC,CAAC,CAAC;YAEH,gDAAgD;YAChD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,gBAAgB,GAAwB;oBAC5C,MAAM,EAAE,QAAQ,CAAC,UAAU;oBAC3B,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE;oBAC7B,IAAI,EAAE,WAAW;iBAClB,CAAC;gBAEF,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAC5D,IAAI,CAAC,KAAK,EACV,gBAAgB,CACjB,CAAC;gBAEF,IAAI,eAAe,EAAE,gBAAgB,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;oBACtE,gDAAgD;oBAChD,OAAO,CAAC,yBAAyB,CAC/B,IAAI,CAAC,KAAK,EACV,eAAe,CAAC,YAAY,CAAC,IAAI,EACjC,eAAe,CAAC,YAAY,CAAC,IAAI,CAClC,CAAC;oBAEF,MAAM,YAAY,GAChB,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,KAAK,QAAQ;wBACvD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACpD,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAE5C,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;wBACxC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,MAAM;wBAC/C,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,OAAO,IAAI,aAAa;wBAClE,IAAI,EAAE,YAAY;wBAClB,UAAU;wBACV,qBAAqB,EAAE,KAAK;qBAC7B,CAAC,CAAC;oBAEH,OAAO,oBAAoB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAChE,CAAC;gBAED,IAAI,eAAe,EAAE,YAAY,EAAE,CAAC;oBAClC,2EAA2E;oBAC3E,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;gBACxC,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,WAAW;gBACjB,UAAU;gBACV,qBAAqB;aACtB,CAAC,CAAC;YAEH,wDAAwD;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAA6B;IAMzD,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ReplayInitiator } from "../shared/types.js";
2
+ export interface ReplayTracker {
3
+ register(token: string, replayedFromId: string, replayInitiator: ReplayInitiator): void;
4
+ consume(token: string): {
5
+ replayedFromId: string;
6
+ replayInitiator: ReplayInitiator;
7
+ } | undefined;
8
+ close(): void;
9
+ }
10
+ export declare function createReplayTracker(): ReplayTracker;
11
+ //# sourceMappingURL=replay-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-tracker.d.ts","sourceRoot":"","sources":["../../src/daemon/replay-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxF,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE,GAAG,SAAS,CAAC;IACjG,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAoDnD"}
@@ -0,0 +1,47 @@
1
+ const REPLAY_TOKEN_TTL_MS = 60_000;
2
+ const REPLAY_TRACKER_CLEANUP_INTERVAL_MS = 30_000;
3
+ const REPLAY_TRACKER_MAX_ENTRIES = 1000;
4
+ export function createReplayTracker() {
5
+ const pending = new Map();
6
+ function cleanupExpired() {
7
+ const now = Date.now();
8
+ for (const [token, replay] of pending) {
9
+ if (now - replay.createdAt > REPLAY_TOKEN_TTL_MS) {
10
+ pending.delete(token);
11
+ }
12
+ }
13
+ }
14
+ const cleanupTimer = setInterval(cleanupExpired, REPLAY_TRACKER_CLEANUP_INTERVAL_MS);
15
+ return {
16
+ register(token, replayedFromId, replayInitiator) {
17
+ cleanupExpired();
18
+ if (pending.size >= REPLAY_TRACKER_MAX_ENTRIES) {
19
+ const oldestKey = pending.keys().next().value;
20
+ if (typeof oldestKey === "string") {
21
+ pending.delete(oldestKey);
22
+ }
23
+ }
24
+ pending.set(token, {
25
+ replayedFromId,
26
+ replayInitiator,
27
+ createdAt: Date.now(),
28
+ });
29
+ },
30
+ consume(token) {
31
+ const replay = pending.get(token);
32
+ if (!replay) {
33
+ return undefined;
34
+ }
35
+ pending.delete(token);
36
+ return {
37
+ replayedFromId: replay.replayedFromId,
38
+ replayInitiator: replay.replayInitiator,
39
+ };
40
+ },
41
+ close() {
42
+ clearInterval(cleanupTimer);
43
+ pending.clear();
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=replay-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-tracker.js","sourceRoot":"","sources":["../../src/daemon/replay-tracker.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,kCAAkC,GAAG,MAAM,CAAC;AAClD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAcxC,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,SAAS,cAAc;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,mBAAmB,EAAE,CAAC;gBACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAErF,OAAO;QACL,QAAQ,CAAC,KAAa,EAAE,cAAsB,EAAE,eAAgC;YAC9E,cAAc,EAAE,CAAC;YAEjB,IAAI,OAAO,CAAC,IAAI,IAAI,0BAA0B,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACjB,cAAc;gBACd,eAAe;gBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CACL,KAAa;YAEb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;QAED,KAAK;YACH,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare function buildReplayHeaders(options: {
2
+ baseHeaders: Record<string, string>;
3
+ setHeaders?: Record<string, string>;
4
+ removeHeaders?: string[];
5
+ replayToken: string;
6
+ }): Record<string, string>;
7
+ export interface ReplayExecutionOptions {
8
+ proxyPort: number;
9
+ method: string;
10
+ url: string;
11
+ headers: Record<string, string>;
12
+ body?: Buffer;
13
+ timeoutMs?: number;
14
+ caCertPem?: string;
15
+ }
16
+ export interface ReplayExecutionResult {
17
+ status: number;
18
+ }
19
+ export declare function replayViaProxy(options: ReplayExecutionOptions): Promise<ReplayExecutionResult>;
20
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/daemon/replay.ts"],"names":[],"mappings":"AA6DA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCzB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAqChC"}
@@ -0,0 +1,113 @@
1
+ import { ProxyAgent } from "undici";
2
+ import { PROCSI_REPLAY_TOKEN_HEADER, PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, } from "../shared/constants.js";
3
+ const DEFAULT_REPLAY_TIMEOUT_MS = 10_000;
4
+ const MIN_REPLAY_TIMEOUT_MS = 1_000;
5
+ const MAX_REPLAY_TIMEOUT_MS = 120_000;
6
+ const LOOPBACK_PROXY_HOST = "127.0.0.1";
7
+ function getErrorMessageWithCause(error) {
8
+ if (!(error instanceof Error)) {
9
+ return String(error);
10
+ }
11
+ const maybeCause = Reflect.get(error, "cause");
12
+ if (maybeCause instanceof Error) {
13
+ return `${error.message}: ${maybeCause.message}`;
14
+ }
15
+ if (typeof maybeCause === "string") {
16
+ return `${error.message}: ${maybeCause}`;
17
+ }
18
+ return error.message;
19
+ }
20
+ const HOP_BY_HOP_HEADERS = new Set([
21
+ "connection",
22
+ "keep-alive",
23
+ "proxy-authenticate",
24
+ "proxy-authorization",
25
+ "te",
26
+ "trailer",
27
+ "transfer-encoding",
28
+ "upgrade",
29
+ ]);
30
+ const INTERNAL_HEADERS = new Set([
31
+ PROCSI_SESSION_ID_HEADER,
32
+ PROCSI_SESSION_TOKEN_HEADER,
33
+ PROCSI_RUNTIME_SOURCE_HEADER,
34
+ PROCSI_REPLAY_TOKEN_HEADER,
35
+ ]);
36
+ function clampReplayTimeout(timeoutMs) {
37
+ const raw = timeoutMs ?? DEFAULT_REPLAY_TIMEOUT_MS;
38
+ return Math.max(MIN_REPLAY_TIMEOUT_MS, Math.min(MAX_REPLAY_TIMEOUT_MS, Math.floor(raw)));
39
+ }
40
+ function normaliseMethod(method) {
41
+ return method.toUpperCase();
42
+ }
43
+ function canHaveRequestBody(method) {
44
+ const upper = normaliseMethod(method);
45
+ return upper !== "GET" && upper !== "HEAD";
46
+ }
47
+ export function buildReplayHeaders(options) {
48
+ const headers = {};
49
+ for (const [name, value] of Object.entries(options.baseHeaders)) {
50
+ const lowerName = name.toLowerCase();
51
+ if (HOP_BY_HOP_HEADERS.has(lowerName) || INTERNAL_HEADERS.has(lowerName)) {
52
+ continue;
53
+ }
54
+ headers[lowerName] = value;
55
+ }
56
+ if (options.setHeaders) {
57
+ for (const [name, value] of Object.entries(options.setHeaders)) {
58
+ const lowerName = name.toLowerCase();
59
+ if (HOP_BY_HOP_HEADERS.has(lowerName) || INTERNAL_HEADERS.has(lowerName)) {
60
+ continue;
61
+ }
62
+ headers[lowerName] = value;
63
+ }
64
+ }
65
+ if (options.removeHeaders) {
66
+ for (const name of options.removeHeaders) {
67
+ const lowerName = name.toLowerCase();
68
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
69
+ delete headers[lowerName];
70
+ }
71
+ }
72
+ // Let fetch calculate content-length for us
73
+ delete headers["content-length"];
74
+ headers[PROCSI_REPLAY_TOKEN_HEADER] = options.replayToken;
75
+ return headers;
76
+ }
77
+ export async function replayViaProxy(options) {
78
+ const timeoutMs = clampReplayTimeout(options.timeoutMs);
79
+ const dispatcher = new ProxyAgent({
80
+ uri: `http://${LOOPBACK_PROXY_HOST}:${options.proxyPort}`,
81
+ requestTls: options.caCertPem ? { ca: options.caCertPem } : undefined,
82
+ });
83
+ const abortController = new AbortController();
84
+ const timeout = setTimeout(() => abortController.abort(), timeoutMs);
85
+ try {
86
+ const method = normaliseMethod(options.method);
87
+ const body = canHaveRequestBody(method) ? options.body : undefined;
88
+ const response = await fetch(options.url, {
89
+ method,
90
+ headers: options.headers,
91
+ body,
92
+ redirect: "manual",
93
+ signal: abortController.signal,
94
+ dispatcher,
95
+ });
96
+ // Drain response body so the request lifecycle completes.
97
+ await response.arrayBuffer();
98
+ return {
99
+ status: response.status,
100
+ };
101
+ }
102
+ catch (error) {
103
+ if (error instanceof Error && error.name === "AbortError") {
104
+ throw new Error(`Replay timed out after ${timeoutMs}ms`);
105
+ }
106
+ throw new Error(`Replay fetch failed: ${getErrorMessageWithCause(error)}`);
107
+ }
108
+ finally {
109
+ clearTimeout(timeout);
110
+ await dispatcher.close();
111
+ }
112
+ }
113
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/daemon/replay.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CapturedRequest, CapturedRequestSummary, InterceptionType, JsonQueryResult, RegisteredSession, RequestFilter, Session } from "../shared/types.js";
1
+ import type { CapturedRequest, CapturedRequestSummary, InterceptionType, JsonQueryResult, RegisteredSession, RequestFilter, Session, BodySearchTarget, ReplayInitiator } from "../shared/types.js";
2
2
  import { type LogLevel } from "../shared/logger.js";
3
3
  export interface RepositoryOptions {
4
4
  maxStoredRequests?: number;
@@ -13,6 +13,10 @@ export declare class RequestRepository {
13
13
  * Apply pending database migrations using SQLite's user_version pragma for tracking.
14
14
  */
15
15
  private applyMigrations;
16
+ /**
17
+ * Register custom SQLite functions used by filters.
18
+ */
19
+ private registerSqlFunctions;
16
20
  /**
17
21
  * Register a new session.
18
22
  */
@@ -54,7 +58,11 @@ export declare class RequestRepository {
54
58
  /**
55
59
  * Update a request with interceptor metadata.
56
60
  */
57
- updateRequestInterception(id: string, interceptedBy: string, interceptionType: InterceptionType): void;
61
+ updateRequestInterception(id: string, interceptedBy: string, interceptionType?: InterceptionType): void;
62
+ /**
63
+ * Mark a request as replayed, including lineage metadata.
64
+ */
65
+ updateRequestReplay(id: string, replayedFromId: string, replayInitiator: ReplayInitiator): void;
58
66
  /**
59
67
  * Get a request by ID.
60
68
  */
@@ -90,10 +98,12 @@ export declare class RequestRepository {
90
98
  }): number;
91
99
  /**
92
100
  * Search through request/response body content for a text pattern.
101
+ * Target can be request, response, or both (default).
93
102
  * Only searches text-based bodies (not binary).
94
103
  */
95
104
  searchBodies(options: {
96
105
  query: string;
106
+ target?: BodySearchTarget;
97
107
  limit?: number;
98
108
  offset?: number;
99
109
  filter?: RequestFilter;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/daemon/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/daemon/storage.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,12 @@ import { v4 as uuidv4 } from "uuid";
4
4
  import { createLogger } from "../shared/logger.js";
5
5
  import { normaliseContentType, buildTextContentTypeSqlCondition, buildJsonContentTypeSqlCondition, } from "../shared/content-type.js";
6
6
  import { DEFAULT_MAX_STORED_REQUESTS } from "../shared/config.js";
7
+ import { normaliseRegexFilterInput } from "../shared/regex-filter.js";
7
8
  const DEFAULT_QUERY_LIMIT = 1000;
8
9
  const EVICTION_CHECK_INTERVAL = 100;
9
10
  const SESSION_TOKEN_BYTES = 16;
11
+ const REGEXP_SQL_FUNCTION = "REGEXP";
12
+ const REGEX_CACHE_MAX_ENTRIES = 100;
10
13
  const SCHEMA = `
11
14
  CREATE TABLE IF NOT EXISTS sessions (
12
15
  id TEXT PRIMARY KEY,
@@ -38,6 +41,8 @@ CREATE TABLE IF NOT EXISTS requests (
38
41
  response_content_type TEXT,
39
42
  intercepted_by TEXT,
40
43
  interception_type TEXT CHECK(interception_type IN ('modified', 'mocked')),
44
+ replayed_from_id TEXT,
45
+ replay_initiator TEXT CHECK(replay_initiator IN ('mcp', 'tui')),
41
46
  source TEXT,
42
47
  saved INTEGER DEFAULT 0,
43
48
  created_at INTEGER DEFAULT (unixepoch()),
@@ -107,6 +112,14 @@ const MIGRATIONS = [
107
112
  description: "Add internal session token for trusted runtime attribution headers",
108
113
  sql: `ALTER TABLE sessions ADD COLUMN internal_token TEXT;`,
109
114
  },
115
+ {
116
+ version: 9,
117
+ description: "Add replay metadata columns",
118
+ sql: `
119
+ ALTER TABLE requests ADD COLUMN replayed_from_id TEXT;
120
+ ALTER TABLE requests ADD COLUMN replay_initiator TEXT;
121
+ `,
122
+ },
110
123
  ];
111
124
  const STATUS_RANGE_MULTIPLIER = 100;
112
125
  const MIN_HTTP_STATUS = 100;
@@ -183,6 +196,11 @@ function applyFilterConditions(conditions, params, filter) {
183
196
  params.push(pattern, pattern);
184
197
  }
185
198
  }
199
+ if (filter.regex) {
200
+ const regex = normaliseRegexFilterInput(filter.regex, filter.regexFlags);
201
+ conditions.push(`${REGEXP_SQL_FUNCTION}(?, ?, url) = 1`);
202
+ params.push(regex.pattern, regex.flags);
203
+ }
186
204
  if (filter.host) {
187
205
  if (filter.host.startsWith(".")) {
188
206
  // Suffix match — e.g. ".example.com" matches "api.example.com"
@@ -268,6 +286,7 @@ export class RequestRepository {
268
286
  this.db = new Database(dbPath);
269
287
  this.db.pragma("journal_mode = WAL");
270
288
  this.db.exec(SCHEMA);
289
+ this.registerSqlFunctions();
271
290
  this.maxStoredRequests = options?.maxStoredRequests ?? DEFAULT_MAX_STORED_REQUESTS;
272
291
  // Fresh databases already have the latest schema — stamp to latest version
273
292
  // so migrations don't try to re-apply what's already in the CREATE TABLE.
@@ -301,6 +320,33 @@ export class RequestRepository {
301
320
  });
302
321
  applyAll();
303
322
  }
323
+ /**
324
+ * Register custom SQLite functions used by filters.
325
+ */
326
+ registerSqlFunctions() {
327
+ const regexCache = new Map();
328
+ this.db.function(REGEXP_SQL_FUNCTION, (patternValue, flagsValue, value) => {
329
+ if (typeof patternValue !== "string")
330
+ return 0;
331
+ const flags = typeof flagsValue === "string" ? flagsValue : "";
332
+ const target = typeof value === "string" ? value : value == null ? "" : String(value);
333
+ const cacheKey = `${flags}\u0000${patternValue}`;
334
+ let regex = regexCache.get(cacheKey);
335
+ if (!regex) {
336
+ const spec = normaliseRegexFilterInput(patternValue, flags);
337
+ regex = new RegExp(spec.pattern, spec.flags);
338
+ regexCache.set(cacheKey, regex);
339
+ if (regexCache.size > REGEX_CACHE_MAX_ENTRIES) {
340
+ const oldest = regexCache.keys().next().value;
341
+ if (typeof oldest === "string") {
342
+ regexCache.delete(oldest);
343
+ }
344
+ }
345
+ }
346
+ regex.lastIndex = 0;
347
+ return regex.test(target) ? 1 : 0;
348
+ });
349
+ }
304
350
  /**
305
351
  * Register a new session.
306
352
  */
@@ -444,7 +490,18 @@ export class RequestRepository {
444
490
  SET intercepted_by = ?, interception_type = ?
445
491
  WHERE id = ?
446
492
  `);
447
- stmt.run(interceptedBy, interceptionType, id);
493
+ stmt.run(interceptedBy, interceptionType ?? null, id);
494
+ }
495
+ /**
496
+ * Mark a request as replayed, including lineage metadata.
497
+ */
498
+ updateRequestReplay(id, replayedFromId, replayInitiator) {
499
+ const stmt = this.db.prepare(`
500
+ UPDATE requests
501
+ SET replayed_from_id = ?, replay_initiator = ?
502
+ WHERE id = ?
503
+ `);
504
+ stmt.run(replayedFromId, replayInitiator, id);
448
505
  }
449
506
  /**
450
507
  * Get a request by ID.
@@ -520,6 +577,8 @@ export class RequestRepository {
520
577
  COALESCE(LENGTH(response_body), 0) as response_body_size,
521
578
  intercepted_by,
522
579
  interception_type,
580
+ replayed_from_id,
581
+ replay_initiator,
523
582
  saved
524
583
  FROM requests
525
584
  ${whereClause}
@@ -554,19 +613,27 @@ export class RequestRepository {
554
613
  }
555
614
  /**
556
615
  * Search through request/response body content for a text pattern.
616
+ * Target can be request, response, or both (default).
557
617
  * Only searches text-based bodies (not binary).
558
618
  */
559
619
  searchBodies(options) {
560
620
  const conditions = [];
561
621
  const params = [];
622
+ const target = options.target ?? "both";
562
623
  const escaped = escapeLikeWildcards(options.query);
563
624
  const pattern = `%${escaped}%`;
564
- // Build content-type conditions — only search text-based bodies
565
- const reqCt = buildTextContentTypeSqlCondition("request_content_type");
566
- const resCt = buildTextContentTypeSqlCondition("response_content_type");
567
- // Search in both request and response bodies, but only where the content type is text-based
568
- conditions.push(`((${reqCt.clause} AND CAST(request_body AS TEXT) LIKE ? ESCAPE '\\') OR (${resCt.clause} AND CAST(response_body AS TEXT) LIKE ? ESCAPE '\\'))`);
569
- params.push(...reqCt.params, pattern, ...resCt.params, pattern);
625
+ const bodyMatchClauses = [];
626
+ if (target === "request" || target === "both") {
627
+ const reqCt = buildTextContentTypeSqlCondition("request_content_type");
628
+ bodyMatchClauses.push(`(${reqCt.clause} AND CAST(request_body AS TEXT) LIKE ? ESCAPE '\\')`);
629
+ params.push(...reqCt.params, pattern);
630
+ }
631
+ if (target === "response" || target === "both") {
632
+ const resCt = buildTextContentTypeSqlCondition("response_content_type");
633
+ bodyMatchClauses.push(`(${resCt.clause} AND CAST(response_body AS TEXT) LIKE ? ESCAPE '\\')`);
634
+ params.push(...resCt.params, pattern);
635
+ }
636
+ conditions.push(`(${bodyMatchClauses.join(" OR ")})`);
570
637
  applyFilterConditions(conditions, params, options.filter);
571
638
  const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
572
639
  const limit = options.limit ?? DEFAULT_QUERY_LIMIT;
@@ -588,6 +655,8 @@ export class RequestRepository {
588
655
  COALESCE(LENGTH(response_body), 0) as response_body_size,
589
656
  intercepted_by,
590
657
  interception_type,
658
+ replayed_from_id,
659
+ replay_initiator,
591
660
  saved
592
661
  FROM requests
593
662
  ${whereClause}
@@ -804,6 +873,10 @@ export class RequestRepository {
804
873
  interceptionType: row.interception_type === "modified" || row.interception_type === "mocked"
805
874
  ? row.interception_type
806
875
  : undefined,
876
+ replayedFromId: row.replayed_from_id ?? undefined,
877
+ replayInitiator: row.replay_initiator === "mcp" || row.replay_initiator === "tui"
878
+ ? row.replay_initiator
879
+ : undefined,
807
880
  ...(row.saved === 1 ? { saved: true } : {}),
808
881
  };
809
882
  }
@@ -840,6 +913,10 @@ export class RequestRepository {
840
913
  interceptionType: row.interception_type === "modified" || row.interception_type === "mocked"
841
914
  ? row.interception_type
842
915
  : undefined,
916
+ replayedFromId: row.replayed_from_id ?? undefined,
917
+ replayInitiator: row.replay_initiator === "mcp" || row.replay_initiator === "tui"
918
+ ? row.replay_initiator
919
+ : undefined,
843
920
  ...(row.saved === 1 ? { saved: true } : {}),
844
921
  };
845
922
  }