procsi 0.2.6

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 (296) hide show
  1. package/LICENSE +665 -0
  2. package/README.md +587 -0
  3. package/dist/cli/commands/clear.d.ts +3 -0
  4. package/dist/cli/commands/clear.d.ts.map +1 -0
  5. package/dist/cli/commands/clear.js +30 -0
  6. package/dist/cli/commands/clear.js.map +1 -0
  7. package/dist/cli/commands/daemon.d.ts +3 -0
  8. package/dist/cli/commands/daemon.d.ts.map +1 -0
  9. package/dist/cli/commands/daemon.js +59 -0
  10. package/dist/cli/commands/daemon.js.map +1 -0
  11. package/dist/cli/commands/debug-dump.d.ts +27 -0
  12. package/dist/cli/commands/debug-dump.d.ts.map +1 -0
  13. package/dist/cli/commands/debug-dump.js +102 -0
  14. package/dist/cli/commands/debug-dump.js.map +1 -0
  15. package/dist/cli/commands/helpers.d.ts +18 -0
  16. package/dist/cli/commands/helpers.d.ts.map +1 -0
  17. package/dist/cli/commands/helpers.js +34 -0
  18. package/dist/cli/commands/helpers.js.map +1 -0
  19. package/dist/cli/commands/init.d.ts +9 -0
  20. package/dist/cli/commands/init.d.ts.map +1 -0
  21. package/dist/cli/commands/init.js +28 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/intercept.d.ts +9 -0
  24. package/dist/cli/commands/intercept.d.ts.map +1 -0
  25. package/dist/cli/commands/intercept.js +121 -0
  26. package/dist/cli/commands/intercept.js.map +1 -0
  27. package/dist/cli/commands/interceptors.d.ts +3 -0
  28. package/dist/cli/commands/interceptors.d.ts.map +1 -0
  29. package/dist/cli/commands/interceptors.js +163 -0
  30. package/dist/cli/commands/interceptors.js.map +1 -0
  31. package/dist/cli/commands/mcp.d.ts +3 -0
  32. package/dist/cli/commands/mcp.d.ts.map +1 -0
  33. package/dist/cli/commands/mcp.js +24 -0
  34. package/dist/cli/commands/mcp.js.map +1 -0
  35. package/dist/cli/commands/off.d.ts +8 -0
  36. package/dist/cli/commands/off.d.ts.map +1 -0
  37. package/dist/cli/commands/off.js +34 -0
  38. package/dist/cli/commands/off.js.map +1 -0
  39. package/dist/cli/commands/on.d.ts +9 -0
  40. package/dist/cli/commands/on.d.ts.map +1 -0
  41. package/dist/cli/commands/on.js +121 -0
  42. package/dist/cli/commands/on.js.map +1 -0
  43. package/dist/cli/commands/project.d.ts +3 -0
  44. package/dist/cli/commands/project.d.ts.map +1 -0
  45. package/dist/cli/commands/project.js +15 -0
  46. package/dist/cli/commands/project.js.map +1 -0
  47. package/dist/cli/commands/restart.d.ts +3 -0
  48. package/dist/cli/commands/restart.d.ts.map +1 -0
  49. package/dist/cli/commands/restart.js +35 -0
  50. package/dist/cli/commands/restart.js.map +1 -0
  51. package/dist/cli/commands/status.d.ts +3 -0
  52. package/dist/cli/commands/status.d.ts.map +1 -0
  53. package/dist/cli/commands/status.js +66 -0
  54. package/dist/cli/commands/status.js.map +1 -0
  55. package/dist/cli/commands/stop.d.ts +3 -0
  56. package/dist/cli/commands/stop.d.ts.map +1 -0
  57. package/dist/cli/commands/stop.js +24 -0
  58. package/dist/cli/commands/stop.js.map +1 -0
  59. package/dist/cli/commands/tui.d.ts +3 -0
  60. package/dist/cli/commands/tui.d.ts.map +1 -0
  61. package/dist/cli/commands/tui.js +36 -0
  62. package/dist/cli/commands/tui.js.map +1 -0
  63. package/dist/cli/commands/vars.d.ts +36 -0
  64. package/dist/cli/commands/vars.d.ts.map +1 -0
  65. package/dist/cli/commands/vars.js +207 -0
  66. package/dist/cli/commands/vars.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +37 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/cli/tui/App.d.ts +15 -0
  72. package/dist/cli/tui/App.d.ts.map +1 -0
  73. package/dist/cli/tui/App.js +544 -0
  74. package/dist/cli/tui/App.js.map +1 -0
  75. package/dist/cli/tui/components/AccordionContent.d.ts +28 -0
  76. package/dist/cli/tui/components/AccordionContent.d.ts.map +1 -0
  77. package/dist/cli/tui/components/AccordionContent.js +87 -0
  78. package/dist/cli/tui/components/AccordionContent.js.map +1 -0
  79. package/dist/cli/tui/components/AccordionPanel.d.ts +38 -0
  80. package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -0
  81. package/dist/cli/tui/components/AccordionPanel.js +110 -0
  82. package/dist/cli/tui/components/AccordionPanel.js.map +1 -0
  83. package/dist/cli/tui/components/AccordionSection.d.ts +32 -0
  84. package/dist/cli/tui/components/AccordionSection.d.ts.map +1 -0
  85. package/dist/cli/tui/components/AccordionSection.js +41 -0
  86. package/dist/cli/tui/components/AccordionSection.js.map +1 -0
  87. package/dist/cli/tui/components/BodyView.d.ts +14 -0
  88. package/dist/cli/tui/components/BodyView.d.ts.map +1 -0
  89. package/dist/cli/tui/components/BodyView.js +39 -0
  90. package/dist/cli/tui/components/BodyView.js.map +1 -0
  91. package/dist/cli/tui/components/ExportModal.d.ts +34 -0
  92. package/dist/cli/tui/components/ExportModal.d.ts.map +1 -0
  93. package/dist/cli/tui/components/ExportModal.js +109 -0
  94. package/dist/cli/tui/components/ExportModal.js.map +1 -0
  95. package/dist/cli/tui/components/FilterBar.d.ts +21 -0
  96. package/dist/cli/tui/components/FilterBar.d.ts.map +1 -0
  97. package/dist/cli/tui/components/FilterBar.js +155 -0
  98. package/dist/cli/tui/components/FilterBar.js.map +1 -0
  99. package/dist/cli/tui/components/HeadersView.d.ts +13 -0
  100. package/dist/cli/tui/components/HeadersView.d.ts.map +1 -0
  101. package/dist/cli/tui/components/HeadersView.js +8 -0
  102. package/dist/cli/tui/components/HeadersView.js.map +1 -0
  103. package/dist/cli/tui/components/HelpModal.d.ts +13 -0
  104. package/dist/cli/tui/components/HelpModal.d.ts.map +1 -0
  105. package/dist/cli/tui/components/HelpModal.js +78 -0
  106. package/dist/cli/tui/components/HelpModal.js.map +1 -0
  107. package/dist/cli/tui/components/HintContent.d.ts +25 -0
  108. package/dist/cli/tui/components/HintContent.d.ts.map +1 -0
  109. package/dist/cli/tui/components/HintContent.js +44 -0
  110. package/dist/cli/tui/components/HintContent.js.map +1 -0
  111. package/dist/cli/tui/components/InfoModal.d.ts +15 -0
  112. package/dist/cli/tui/components/InfoModal.d.ts.map +1 -0
  113. package/dist/cli/tui/components/InfoModal.js +17 -0
  114. package/dist/cli/tui/components/InfoModal.js.map +1 -0
  115. package/dist/cli/tui/components/JsonExplorerModal.d.ts +24 -0
  116. package/dist/cli/tui/components/JsonExplorerModal.d.ts.map +1 -0
  117. package/dist/cli/tui/components/JsonExplorerModal.js +311 -0
  118. package/dist/cli/tui/components/JsonExplorerModal.js.map +1 -0
  119. package/dist/cli/tui/components/Modal.d.ts +26 -0
  120. package/dist/cli/tui/components/Modal.d.ts.map +1 -0
  121. package/dist/cli/tui/components/Modal.js +15 -0
  122. package/dist/cli/tui/components/Modal.js.map +1 -0
  123. package/dist/cli/tui/components/Panel.d.ts +19 -0
  124. package/dist/cli/tui/components/Panel.d.ts.map +1 -0
  125. package/dist/cli/tui/components/Panel.js +37 -0
  126. package/dist/cli/tui/components/Panel.js.map +1 -0
  127. package/dist/cli/tui/components/RequestDetails.d.ts +16 -0
  128. package/dist/cli/tui/components/RequestDetails.d.ts.map +1 -0
  129. package/dist/cli/tui/components/RequestDetails.js +23 -0
  130. package/dist/cli/tui/components/RequestDetails.js.map +1 -0
  131. package/dist/cli/tui/components/RequestList.d.ts +21 -0
  132. package/dist/cli/tui/components/RequestList.d.ts.map +1 -0
  133. package/dist/cli/tui/components/RequestList.js +30 -0
  134. package/dist/cli/tui/components/RequestList.js.map +1 -0
  135. package/dist/cli/tui/components/RequestListItem.d.ts +36 -0
  136. package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -0
  137. package/dist/cli/tui/components/RequestListItem.js +130 -0
  138. package/dist/cli/tui/components/RequestListItem.js.map +1 -0
  139. package/dist/cli/tui/components/SaveModal.d.ts +30 -0
  140. package/dist/cli/tui/components/SaveModal.d.ts.map +1 -0
  141. package/dist/cli/tui/components/SaveModal.js +95 -0
  142. package/dist/cli/tui/components/SaveModal.js.map +1 -0
  143. package/dist/cli/tui/components/StatusBar.d.ts +39 -0
  144. package/dist/cli/tui/components/StatusBar.d.ts.map +1 -0
  145. package/dist/cli/tui/components/StatusBar.js +53 -0
  146. package/dist/cli/tui/components/StatusBar.js.map +1 -0
  147. package/dist/cli/tui/components/TextViewerModal.d.ts +19 -0
  148. package/dist/cli/tui/components/TextViewerModal.d.ts.map +1 -0
  149. package/dist/cli/tui/components/TextViewerModal.js +227 -0
  150. package/dist/cli/tui/components/TextViewerModal.js.map +1 -0
  151. package/dist/cli/tui/hooks/useBodyExport.d.ts +26 -0
  152. package/dist/cli/tui/hooks/useBodyExport.d.ts.map +1 -0
  153. package/dist/cli/tui/hooks/useBodyExport.js +173 -0
  154. package/dist/cli/tui/hooks/useBodyExport.js.map +1 -0
  155. package/dist/cli/tui/hooks/useExport.d.ts +29 -0
  156. package/dist/cli/tui/hooks/useExport.d.ts.map +1 -0
  157. package/dist/cli/tui/hooks/useExport.js +64 -0
  158. package/dist/cli/tui/hooks/useExport.js.map +1 -0
  159. package/dist/cli/tui/hooks/useRequests.d.ts +26 -0
  160. package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -0
  161. package/dist/cli/tui/hooks/useRequests.js +131 -0
  162. package/dist/cli/tui/hooks/useRequests.js.map +1 -0
  163. package/dist/cli/tui/hooks/useSaveBinary.d.ts +26 -0
  164. package/dist/cli/tui/hooks/useSaveBinary.d.ts.map +1 -0
  165. package/dist/cli/tui/hooks/useSaveBinary.js +165 -0
  166. package/dist/cli/tui/hooks/useSaveBinary.js.map +1 -0
  167. package/dist/cli/tui/hooks/useSpinner.d.ts +5 -0
  168. package/dist/cli/tui/hooks/useSpinner.d.ts.map +1 -0
  169. package/dist/cli/tui/hooks/useSpinner.js +25 -0
  170. package/dist/cli/tui/hooks/useSpinner.js.map +1 -0
  171. package/dist/cli/tui/hooks/useStdoutDimensions.d.ts +11 -0
  172. package/dist/cli/tui/hooks/useStdoutDimensions.d.ts.map +1 -0
  173. package/dist/cli/tui/hooks/useStdoutDimensions.js +29 -0
  174. package/dist/cli/tui/hooks/useStdoutDimensions.js.map +1 -0
  175. package/dist/cli/tui/utils/binary.d.ts +24 -0
  176. package/dist/cli/tui/utils/binary.d.ts.map +1 -0
  177. package/dist/cli/tui/utils/binary.js +152 -0
  178. package/dist/cli/tui/utils/binary.js.map +1 -0
  179. package/dist/cli/tui/utils/clipboard.d.ts +9 -0
  180. package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
  181. package/dist/cli/tui/utils/clipboard.js +58 -0
  182. package/dist/cli/tui/utils/clipboard.js.map +1 -0
  183. package/dist/cli/tui/utils/content-type.d.ts +8 -0
  184. package/dist/cli/tui/utils/content-type.d.ts.map +1 -0
  185. package/dist/cli/tui/utils/content-type.js +10 -0
  186. package/dist/cli/tui/utils/content-type.js.map +1 -0
  187. package/dist/cli/tui/utils/curl.d.ts +9 -0
  188. package/dist/cli/tui/utils/curl.d.ts.map +1 -0
  189. package/dist/cli/tui/utils/curl.js +54 -0
  190. package/dist/cli/tui/utils/curl.js.map +1 -0
  191. package/dist/cli/tui/utils/filters.d.ts +6 -0
  192. package/dist/cli/tui/utils/filters.d.ts.map +1 -0
  193. package/dist/cli/tui/utils/filters.js +13 -0
  194. package/dist/cli/tui/utils/filters.js.map +1 -0
  195. package/dist/cli/tui/utils/formatters.d.ts +49 -0
  196. package/dist/cli/tui/utils/formatters.d.ts.map +1 -0
  197. package/dist/cli/tui/utils/formatters.js +200 -0
  198. package/dist/cli/tui/utils/formatters.js.map +1 -0
  199. package/dist/cli/tui/utils/har.d.ts +75 -0
  200. package/dist/cli/tui/utils/har.d.ts.map +1 -0
  201. package/dist/cli/tui/utils/har.js +117 -0
  202. package/dist/cli/tui/utils/har.js.map +1 -0
  203. package/dist/cli/tui/utils/json-tree.d.ts +69 -0
  204. package/dist/cli/tui/utils/json-tree.d.ts.map +1 -0
  205. package/dist/cli/tui/utils/json-tree.js +339 -0
  206. package/dist/cli/tui/utils/json-tree.js.map +1 -0
  207. package/dist/cli/tui/utils/open-external.d.ts +17 -0
  208. package/dist/cli/tui/utils/open-external.d.ts.map +1 -0
  209. package/dist/cli/tui/utils/open-external.js +57 -0
  210. package/dist/cli/tui/utils/open-external.js.map +1 -0
  211. package/dist/cli/tui/utils/syntax-highlight.d.ts +16 -0
  212. package/dist/cli/tui/utils/syntax-highlight.d.ts.map +1 -0
  213. package/dist/cli/tui/utils/syntax-highlight.js +64 -0
  214. package/dist/cli/tui/utils/syntax-highlight.js.map +1 -0
  215. package/dist/daemon/control.d.ts +21 -0
  216. package/dist/daemon/control.d.ts.map +1 -0
  217. package/dist/daemon/control.js +311 -0
  218. package/dist/daemon/control.js.map +1 -0
  219. package/dist/daemon/htpx-client.d.ts +8 -0
  220. package/dist/daemon/htpx-client.d.ts.map +1 -0
  221. package/dist/daemon/htpx-client.js +25 -0
  222. package/dist/daemon/htpx-client.js.map +1 -0
  223. package/dist/daemon/index.d.ts +3 -0
  224. package/dist/daemon/index.d.ts.map +1 -0
  225. package/dist/daemon/index.js +178 -0
  226. package/dist/daemon/index.js.map +1 -0
  227. package/dist/daemon/interceptor-loader.d.ts +30 -0
  228. package/dist/daemon/interceptor-loader.d.ts.map +1 -0
  229. package/dist/daemon/interceptor-loader.js +249 -0
  230. package/dist/daemon/interceptor-loader.js.map +1 -0
  231. package/dist/daemon/interceptor-runner.d.ts +39 -0
  232. package/dist/daemon/interceptor-runner.d.ts.map +1 -0
  233. package/dist/daemon/interceptor-runner.js +312 -0
  234. package/dist/daemon/interceptor-runner.js.map +1 -0
  235. package/dist/daemon/procsi-client.d.ts +8 -0
  236. package/dist/daemon/procsi-client.d.ts.map +1 -0
  237. package/dist/daemon/procsi-client.js +25 -0
  238. package/dist/daemon/procsi-client.js.map +1 -0
  239. package/dist/daemon/proxy.d.ts +34 -0
  240. package/dist/daemon/proxy.d.ts.map +1 -0
  241. package/dist/daemon/proxy.js +213 -0
  242. package/dist/daemon/proxy.js.map +1 -0
  243. package/dist/daemon/storage.d.ts +130 -0
  244. package/dist/daemon/storage.d.ts.map +1 -0
  245. package/dist/daemon/storage.js +761 -0
  246. package/dist/daemon/storage.js.map +1 -0
  247. package/dist/interceptors.d.ts +2 -0
  248. package/dist/interceptors.d.ts.map +1 -0
  249. package/dist/interceptors.js +2 -0
  250. package/dist/interceptors.js.map +1 -0
  251. package/dist/mcp/server.d.ts +110 -0
  252. package/dist/mcp/server.d.ts.map +1 -0
  253. package/dist/mcp/server.js +806 -0
  254. package/dist/mcp/server.js.map +1 -0
  255. package/dist/overrides/node.d.ts +30 -0
  256. package/dist/overrides/node.d.ts.map +1 -0
  257. package/dist/overrides/node.js +66 -0
  258. package/dist/overrides/node.js.map +1 -0
  259. package/dist/shared/config.d.ts +21 -0
  260. package/dist/shared/config.d.ts.map +1 -0
  261. package/dist/shared/config.js +83 -0
  262. package/dist/shared/config.js.map +1 -0
  263. package/dist/shared/content-type.d.ts +64 -0
  264. package/dist/shared/content-type.d.ts.map +1 -0
  265. package/dist/shared/content-type.js +145 -0
  266. package/dist/shared/content-type.js.map +1 -0
  267. package/dist/shared/control-client.d.ts +144 -0
  268. package/dist/shared/control-client.d.ts.map +1 -0
  269. package/dist/shared/control-client.js +272 -0
  270. package/dist/shared/control-client.js.map +1 -0
  271. package/dist/shared/daemon.d.ts +33 -0
  272. package/dist/shared/daemon.d.ts.map +1 -0
  273. package/dist/shared/daemon.js +231 -0
  274. package/dist/shared/daemon.js.map +1 -0
  275. package/dist/shared/logger.d.ts +47 -0
  276. package/dist/shared/logger.d.ts.map +1 -0
  277. package/dist/shared/logger.js +200 -0
  278. package/dist/shared/logger.js.map +1 -0
  279. package/dist/shared/project.d.ts +76 -0
  280. package/dist/shared/project.d.ts.map +1 -0
  281. package/dist/shared/project.js +185 -0
  282. package/dist/shared/project.js.map +1 -0
  283. package/dist/shared/proxy-info.d.ts +10 -0
  284. package/dist/shared/proxy-info.d.ts.map +1 -0
  285. package/dist/shared/proxy-info.js +15 -0
  286. package/dist/shared/proxy-info.js.map +1 -0
  287. package/dist/shared/types.d.ts +128 -0
  288. package/dist/shared/types.d.ts.map +1 -0
  289. package/dist/shared/types.js +5 -0
  290. package/dist/shared/types.js.map +1 -0
  291. package/dist/shared/version.d.ts +5 -0
  292. package/dist/shared/version.d.ts.map +1 -0
  293. package/dist/shared/version.js +21 -0
  294. package/dist/shared/version.js.map +1 -0
  295. package/package.json +113 -0
  296. package/skills/procsi/SKILL.md +228 -0
package/README.md ADDED
@@ -0,0 +1,587 @@
1
+ # procsi
2
+
3
+ [![npm version](https://img.shields.io/npm/v/procsi.svg)](https://www.npmjs.com/package/procsi)
4
+ [![CI](https://github.com/mtford90/procsi/actions/workflows/ci.yml/badge.svg)](https://github.com/mtford90/procsi/actions/workflows/ci.yml)
5
+ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
6
+
7
+ HTTP interception for the terminal. Each project gets its own proxy, its own traffic database, its own mocks — all in a `.procsi/` directory that lives alongside your code.
8
+
9
+ ![procsi demo](demo.gif)
10
+
11
+ No browser extensions, no global system proxy, no separate apps. A MITM proxy captures your traffic, a lazygit-style TUI lets you browse it, TypeScript files let you mock it, and AI agents can query and manipulate all of it via MCP.
12
+
13
+ ## Quick Start
14
+
15
+ ```bash
16
+ npm install -g procsi
17
+
18
+ # One-time shell setup
19
+ eval "$(procsi init)"
20
+
21
+ # In your project directory
22
+ procsi on
23
+ curl https://api.example.com/users
24
+ procsi tui
25
+ ```
26
+
27
+ Requires Node.js 20+.
28
+
29
+ ### Shell Setup
30
+
31
+ Run this once per shell session (or add it to your shell profile):
32
+
33
+ ```bash
34
+ eval "$(procsi init)"
35
+ ```
36
+
37
+ This creates a shell function that lets `procsi on`/`procsi off` set proxy environment variables in your current session.
38
+
39
+ ## Features
40
+
41
+ - **Project-scoped** — each project gets its own `.procsi/` directory with a separate daemon, database, CA cert and interceptors. No cross-project bleed.
42
+ - **TypeScript interceptors** — mock, modify or observe traffic with `.ts` files. Match on anything, query past traffic from within handlers, compose complex scenarios.
43
+ - **MCP server** — AI agents get full access to your captured traffic and can write interceptor files for you. Search, filter, inspect, mock — all via tool calls.
44
+ - **Terminal TUI** — vim-style keybindings, mouse support, JSON explorer, filtering. Stays in your terminal where you're already working.
45
+ - **HTTPS** — automatic CA certificate generation and trust
46
+ - **Export** — copy as curl, export as HAR, save bodies to disk
47
+ - **Zero config** — works with curl, wget, Node.js, Python, Go, Rust and anything else that respects `HTTP_PROXY`
48
+
49
+ ## Project Isolation
50
+
51
+ procsi doesn't use a global system proxy. Each project gets its own `.procsi/` directory in the project root (detected by `.git` or an existing `.procsi/`):
52
+
53
+ ```
54
+ your-project/
55
+ ├── .procsi/
56
+ │ ├── interceptors/ # TypeScript interceptor files
57
+ │ ├── config.json # Optional project config
58
+ │ ├── proxy.port # Proxy TCP port
59
+ │ ├── control.sock # IPC socket
60
+ │ ├── requests.db # Captured traffic
61
+ │ ├── ca.pem # CA certificate
62
+ │ └── daemon.pid # Process ID
63
+ └── src/...
64
+ ```
65
+
66
+ Separate daemon, separate database, separate certificates. You can run procsi in multiple projects at the same time without them interfering with each other.
67
+
68
+ ## Interceptors
69
+
70
+ TypeScript files in `.procsi/interceptors/` that intercept HTTP traffic as it passes through the proxy. They can return mock responses, modify upstream responses, or just observe.
71
+
72
+ ```bash
73
+ procsi interceptors init # scaffold an example
74
+ procsi interceptors reload # reload after editing
75
+ ```
76
+
77
+ ### Mock
78
+
79
+ Return a response without hitting upstream:
80
+
81
+ ```typescript
82
+ import type { Interceptor } from "procsi/interceptors";
83
+
84
+ export default {
85
+ name: "mock-users",
86
+ match: (req) => req.path === "/api/users",
87
+ handler: async () => ({
88
+ status: 200,
89
+ headers: { "content-type": "application/json" },
90
+ body: JSON.stringify([{ id: 1, name: "Alice" }]),
91
+ }),
92
+ } satisfies Interceptor;
93
+ ```
94
+
95
+ ### Modify
96
+
97
+ Forward to upstream, then alter the response:
98
+
99
+ ```typescript
100
+ import type { Interceptor } from "procsi/interceptors";
101
+
102
+ export default {
103
+ name: "inject-header",
104
+ match: (req) => req.host.includes("example.com"),
105
+ handler: async (ctx) => {
106
+ const response = await ctx.forward();
107
+ return { ...response, headers: { ...response.headers, "x-debug": "procsi" } };
108
+ },
109
+ } satisfies Interceptor;
110
+ ```
111
+
112
+ ### Observe
113
+
114
+ Log traffic without altering it:
115
+
116
+ ```typescript
117
+ import type { Interceptor } from "procsi/interceptors";
118
+
119
+ export default {
120
+ name: "log-api",
121
+ match: (req) => req.path.startsWith("/api/"),
122
+ handler: async (ctx) => {
123
+ ctx.log(`${ctx.request.method} ${ctx.request.url}`);
124
+ const response = await ctx.forward();
125
+ ctx.log(` -> ${response.status}`);
126
+ return response;
127
+ },
128
+ } satisfies Interceptor;
129
+ ```
130
+
131
+ ### Query Past Traffic
132
+
133
+ Interceptors can query the traffic database via `ctx.procsi`. This lets you build mocks that react to what's already happened — rate limiting, conditional failures, responses based on prior requests:
134
+
135
+ ```typescript
136
+ import type { Interceptor } from "procsi/interceptors";
137
+
138
+ export default {
139
+ name: "rate-limit",
140
+ match: (req) => req.path.startsWith("/api/"),
141
+ handler: async (ctx) => {
142
+ // Count how many requests this endpoint has seen in the last minute
143
+ const since = new Date(Date.now() - 60_000).toISOString();
144
+ const count = await ctx.procsi.countRequests({
145
+ path: ctx.request.path,
146
+ since,
147
+ });
148
+
149
+ if (count >= 10) {
150
+ return {
151
+ status: 429,
152
+ headers: { "retry-after": "60" },
153
+ body: JSON.stringify({ error: "rate_limited" }),
154
+ };
155
+ }
156
+
157
+ return ctx.forward();
158
+ },
159
+ } satisfies Interceptor;
160
+ ```
161
+
162
+ ### Handler Context
163
+
164
+ | Property | Description |
165
+ |----------|-------------|
166
+ | `ctx.request` | The incoming request (frozen, read-only) |
167
+ | `ctx.forward()` | Forward to upstream, returns the response |
168
+ | `ctx.procsi` | Query captured traffic (see below) |
169
+ | `ctx.log(msg)` | Write to `.procsi/procsi.log` |
170
+
171
+ #### `ctx.procsi`
172
+
173
+ | Method | Description |
174
+ |--------|-------------|
175
+ | `countRequests(filter?)` | Count matching requests |
176
+ | `listRequests({ filter?, limit?, offset? })` | List request summaries |
177
+ | `getRequest(id)` | Full request details by ID |
178
+ | `searchBodies({ query, ...filter? })` | Full-text search through bodies |
179
+ | `queryJsonBodies({ json_path, ...filter? })` | Extract values from JSON bodies via JSONPath |
180
+
181
+ ### How Interceptors Work
182
+
183
+ - Any `.ts` file in `.procsi/interceptors/` is loaded automatically
184
+ - Files load alphabetically; first match wins
185
+ - `match` is optional — omit it to match everything
186
+ - Hot-reloads on file changes, or run `procsi interceptors reload`
187
+ - 30s handler timeout, 5s match timeout
188
+ - Errors fall through gracefully (never crashes the proxy)
189
+ - `ctx.log()` writes to `.procsi/procsi.log` since `console.log` goes nowhere in the daemon
190
+ - Use `satisfies Interceptor` for full intellisense
191
+
192
+ ## MCP Integration
193
+
194
+ procsi has a built-in [MCP](https://modelcontextprotocol.io/) server that gives AI agents full access to your captured traffic and interceptor system. Agents can search through requests, inspect headers and bodies, and write interceptor files directly into `.procsi/interceptors/`.
195
+
196
+ This means you can ask things like:
197
+
198
+ - "Find all failing requests to the payments API and write mocks that return valid responses"
199
+ - "Make every 5th request to /api/users return a 429 so I can test rate limiting"
200
+ - "What's the average response time for requests to the auth service in the last hour?"
201
+ - "Write an interceptor that logs all requests with missing auth headers"
202
+
203
+ The agent reads your traffic, writes the TypeScript, and procsi hot-reloads it.
204
+
205
+ ### Setup
206
+
207
+ Add procsi to your MCP client config:
208
+
209
+ ```json
210
+ {
211
+ "mcpServers": {
212
+ "procsi": {
213
+ "command": "procsi",
214
+ "args": ["mcp"]
215
+ }
216
+ }
217
+ }
218
+ ```
219
+
220
+ The proxy must be running (`procsi on` or `eval "$(procsi vars)"`) — the MCP server connects to the same daemon as the TUI.
221
+
222
+ ### Agent Skill
223
+
224
+ procsi also ships an agent skill that teaches AI assistants how to use the MCP tools properly. Gets you better results out of the box.
225
+
226
+ **Claude Code:**
227
+
228
+ ```bash
229
+ /plugin marketplace add mtford90/procsi
230
+ /plugin install procsi
231
+ ```
232
+
233
+ **npm-agentskills** (works with Cursor, Copilot, Codex, etc.):
234
+
235
+ ```bash
236
+ npx agents export --target claude
237
+ ```
238
+
239
+ ### Available Tools
240
+
241
+ | Tool | Description |
242
+ |------|-------------|
243
+ | `procsi_get_status` | Daemon status, proxy port, request count |
244
+ | `procsi_list_requests` | Search and filter captured requests |
245
+ | `procsi_get_request` | Full request details by ID (headers, bodies, timing) |
246
+ | `procsi_search_bodies` | Full-text search through body content |
247
+ | `procsi_query_json` | Extract values from JSON bodies via JSONPath |
248
+ | `procsi_count_requests` | Count matching requests |
249
+ | `procsi_clear_requests` | Delete all captured requests |
250
+ | `procsi_list_sessions` | List active proxy sessions |
251
+ | `procsi_list_interceptors` | List loaded interceptors with status and errors |
252
+ | `procsi_reload_interceptors` | Reload interceptors from disk |
253
+
254
+ ### Filtering
255
+
256
+ Most tools accept these filters:
257
+
258
+ | Parameter | Description | Example |
259
+ |-----------|-------------|---------|
260
+ | `method` | HTTP method(s), comma-separated | `"GET,POST"` |
261
+ | `status_range` | Status code, Nxx pattern, or range | `"4xx"`, `"401"`, `"500-503"` |
262
+ | `search` | Substring match on URL/path | `"api/users"` |
263
+ | `host` | Exact or suffix match (prefix with `.`) | `"api.example.com"`, `".example.com"` |
264
+ | `path` | Path prefix match | `"/api/v2"` |
265
+ | `since` / `before` | Time window (ISO 8601) | `"2024-01-15T10:30:00Z"` |
266
+ | `header_name` | Filter by header existence or value | `"content-type"` |
267
+ | `header_value` | Exact header value (requires `header_name`) | `"application/json"` |
268
+ | `header_target` | Which headers to search | `"request"`, `"response"`, `"both"` |
269
+ | `intercepted_by` | Filter by interceptor name | `"mock-users"` |
270
+ | `offset` | Pagination offset (0-based) | `0` |
271
+ | `limit` | Max results (default 50, max 500) | `100` |
272
+
273
+ `procsi_get_request` accepts comma-separated IDs for batch fetching (e.g. `"id1,id2,id3"`).
274
+
275
+ `procsi_query_json` also takes:
276
+
277
+ | Parameter | Description | Example |
278
+ |-----------|-------------|---------|
279
+ | `target` | Which body to query: `"request"`, `"response"`, or `"both"` (default) | `"response"` |
280
+ | `value` | Exact value match after JSONPath extraction | `"active"` |
281
+
282
+ ### Output Formats
283
+
284
+ All query tools accept a `format` parameter:
285
+
286
+ - `text` (default) — markdown summaries, readable by humans and AI
287
+ - `json` — structured JSON for programmatic use
288
+
289
+ ### Examples
290
+
291
+ ```
292
+ procsi_list_requests({ status_range: "5xx", path: "/api" })
293
+ procsi_search_bodies({ query: "error_code", method: "POST" })
294
+ procsi_query_json({ json_path: "$.user.id", target: "response" })
295
+ procsi_list_requests({ header_name: "authorization", header_target: "request" })
296
+ ```
297
+
298
+ ## How It Works
299
+
300
+ ```
301
+ ┌─────────────────────────────────────────────────────────────┐
302
+ │ Your Shell │
303
+ │ ┌─────────────────────────────────────────────────────┐ │
304
+ │ │ curl, wget, node, python... │ │
305
+ │ │ │ │ │
306
+ │ │ ▼ │ │
307
+ │ │ HTTP_PROXY=localhost:54321 │ │
308
+ │ └─────────────────────────────────────────────────────┘ │
309
+ │ │ │
310
+ └──────────────────────────┼──────────────────────────────────┘
311
+
312
+ ┌─────────────────────────────────────────────────────────────┐
313
+ │ procsi daemon │
314
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
315
+ │ │ MITM Proxy │───▶│ SQLite │◀───│ Control API │ │
316
+ │ │ (mockttp) │ │ requests │ │ (unix sock) │ │
317
+ │ └─────────────┘ └─────────────┘ └─────────────┘ │
318
+ └─────────────────────────────────────────────────────────────┘
319
+
320
+
321
+ ┌──────────────────────────┼──────────────────────────────────┐
322
+ │ procsi tui │ │
323
+ │ ┌───────────────────────┴─────────────────────────────┐ │
324
+ │ │ ● POST /api/users │ POST https://api.example.com │ │
325
+ │ │ GET /health │ Status: 200 │ Duration: 45ms │ │
326
+ │ │ POST /login │ │ │
327
+ │ │ │ Request Headers: │ │
328
+ │ │ │ Content-Type: application/ │ │
329
+ │ └─────────────────────┴───────────────────────────────┘ │
330
+ └─────────────────────────────────────────────────────────────┘
331
+ ```
332
+
333
+ `procsi on` (via the shell wrapper) starts a daemon, sets `HTTP_PROXY`/`HTTPS_PROXY` in your shell, and captures everything that flows through. `procsi off` unsets them. The TUI connects to the daemon via Unix socket.
334
+
335
+ ### Environment Variables
336
+
337
+ `procsi on` sets these in your shell (`procsi off` unsets them). Without the shell wrapper, use `eval "$(procsi vars)"` and `eval "$(procsi vars --clear)"`:
338
+
339
+ | Variable | Purpose |
340
+ |----------|---------|
341
+ | `HTTP_PROXY` | Proxy URL for HTTP clients |
342
+ | `HTTPS_PROXY` | Proxy URL for HTTPS clients |
343
+ | `SSL_CERT_FILE` | CA cert path (curl, git, etc.) |
344
+ | `REQUESTS_CA_BUNDLE` | CA cert path (Python requests) |
345
+ | `NODE_EXTRA_CA_CERTS` | CA cert path (Node.js) |
346
+ | `PROCSI_SESSION_ID` | UUID identifying the current session |
347
+ | `PROCSI_LABEL` | Session label (when `-l` flag used) |
348
+
349
+ ## Configuration
350
+
351
+ Create `.procsi/config.json` to override defaults. All fields are optional:
352
+
353
+ ```json
354
+ {
355
+ "maxStoredRequests": 5000,
356
+ "maxBodySize": 10485760,
357
+ "maxLogSize": 10485760,
358
+ "pollInterval": 2000
359
+ }
360
+ ```
361
+
362
+ | Setting | Default | Description |
363
+ |---------|---------|-------------|
364
+ | `maxStoredRequests` | `5000` | Max requests in the database. Oldest evicted automatically. |
365
+ | `maxBodySize` | `10485760` (10 MB) | Max body size to capture. Larger bodies are proxied but not stored. |
366
+ | `maxLogSize` | `10485760` (10 MB) | Max log file size before rotation. |
367
+ | `pollInterval` | `2000` | TUI polling interval in ms. Lower = faster updates, more IPC traffic. |
368
+
369
+ Missing or invalid values fall back to defaults.
370
+
371
+ ## Supported HTTP Clients
372
+
373
+ Anything that respects `HTTP_PROXY` works:
374
+
375
+ | Client | Support |
376
+ |--------|---------|
377
+ | curl | Automatic |
378
+ | wget | Automatic |
379
+ | Node.js (fetch, axios, etc.) | With `NODE_EXTRA_CA_CERTS` |
380
+ | Python (requests, httpx) | With `REQUESTS_CA_BUNDLE` |
381
+ | Go | Automatic |
382
+ | Rust (reqwest) | Automatic |
383
+
384
+ ## Export
385
+
386
+ Press `c` to copy a request as curl:
387
+
388
+ ```bash
389
+ curl -X POST 'https://api.example.com/users' \
390
+ -H 'Content-Type: application/json' \
391
+ -H 'Authorization: Bearer token123' \
392
+ -d '{"name": "test"}'
393
+ ```
394
+
395
+ Press `H` to export all requests as a HAR file. Compatible with browser dev tools.
396
+
397
+ Press `s` on a body to open the export modal — clipboard, `.procsi/exports/`, `~/Downloads/`, custom path, or open in default application.
398
+
399
+ ## TUI Keybindings
400
+
401
+ `j`/`k` to navigate, `Tab` to switch panels, `/` to filter, `c` to copy as curl, `Enter` to inspect bodies, `q` to quit.
402
+
403
+ Mouse support: click to select, scroll to navigate, click panels to focus.
404
+
405
+ <details>
406
+ <summary>Full keybinding reference</summary>
407
+
408
+ ### Main View
409
+
410
+ | Key | Action |
411
+ |-----|--------|
412
+ | `j`/`k` or `↑`/`↓` | Navigate up/down |
413
+ | `g` / `G` | Jump to first / last item |
414
+ | `Ctrl+u` / `Ctrl+d` | Half-page up / down |
415
+ | `Ctrl+f` / `Ctrl+b` | Full-page down / up |
416
+ | `Tab` / `Shift+Tab` | Next / previous panel |
417
+ | `1`-`5` | Jump to section (list / request / request body / response / response body) |
418
+ | `Enter` | Open body in full-screen viewer |
419
+ | `/` | Open filter bar |
420
+ | `u` | Toggle full URL display |
421
+ | `c` | Copy request as curl |
422
+ | `y` | Copy body to clipboard |
423
+ | `s` | Export body (opens export modal) |
424
+ | `H` | Export all as HAR |
425
+ | `r` | Refresh |
426
+ | `?` | Help |
427
+ | `i` | Proxy connection info |
428
+ | `q` | Quit |
429
+
430
+ ### Filter Bar (`/`)
431
+
432
+ | Key | Action |
433
+ |-----|--------|
434
+ | `Tab` / `Shift+Tab` | Cycle between search, method, status fields |
435
+ | `←` / `→` | Cycle method (ALL/GET/POST/PUT/PATCH/DELETE) or status (ALL/2xx-5xx) |
436
+ | `Return` | Apply filter |
437
+ | `Esc` | Cancel and revert |
438
+
439
+ ### JSON Explorer (Enter on a JSON body)
440
+
441
+ | Key | Action |
442
+ |-----|--------|
443
+ | `j`/`k` | Navigate nodes |
444
+ | `Enter`/`l` | Expand/collapse node |
445
+ | `h` | Collapse node |
446
+ | `e` / `c` | Expand / collapse all |
447
+ | `/` | Filter by path |
448
+ | `n` / `N` | Next / previous match |
449
+ | `y` | Copy value |
450
+ | `q` / `Esc` | Close |
451
+
452
+ ### Text Viewer (Enter on a non-JSON body)
453
+
454
+ | Key | Action |
455
+ |-----|--------|
456
+ | `j`/`k` | Scroll line by line |
457
+ | `Space` | Page down |
458
+ | `g` / `G` | Top / bottom |
459
+ | `/` | Search text |
460
+ | `n` / `N` | Next / previous match |
461
+ | `y` | Copy to clipboard |
462
+ | `q` / `Esc` | Close |
463
+
464
+ </details>
465
+
466
+ ## CLI Reference
467
+
468
+ ### Global Options
469
+
470
+ | Flag | Description |
471
+ |------|-------------|
472
+ | `-v, --verbose` | Increase log verbosity (stackable: `-vv`, `-vvv`) |
473
+ | `-d, --dir <path>` | Override project root directory |
474
+
475
+ ### `procsi init`
476
+
477
+ Output shell wrapper function. Enables `procsi on`/`procsi off` to set environment variables in the current shell.
478
+
479
+ ### `procsi vars`
480
+
481
+ Output shell `export` statements to set proxy environment variables. Use with `eval`:
482
+
483
+ ```bash
484
+ eval "$(procsi vars)"
485
+ ```
486
+
487
+ With the shell wrapper from `procsi init`, you can use the simpler `procsi on` instead.
488
+
489
+ | Flag | Description |
490
+ |------|-------------|
491
+ | `-l, --label <label>` | Label this session (visible in TUI and MCP) |
492
+ | `--no-restart` | Don't auto-restart daemon on version mismatch |
493
+ | `--clear` | Output `unset` statements to stop interception |
494
+
495
+ ### `procsi tui`
496
+
497
+ Open the interactive TUI.
498
+
499
+ | Flag | Description |
500
+ |------|-------------|
501
+ | `--ci` | CI mode: render once and exit (for testing) |
502
+
503
+ ### `procsi status`
504
+
505
+ Show comprehensive status: daemon state, interception state, sessions, request count, loaded interceptors.
506
+
507
+ ### `procsi daemon stop`
508
+
509
+ Stop the daemon.
510
+
511
+ ### `procsi daemon restart`
512
+
513
+ Restart the daemon (or start it if not running).
514
+
515
+ ### `procsi clear`
516
+
517
+ Clear all captured requests.
518
+
519
+ ### `procsi debug-dump`
520
+
521
+ Collect diagnostics (system info, daemon status, recent logs) into `.procsi/debug-dump-<timestamp>.json`.
522
+
523
+ ### `procsi mcp`
524
+
525
+ Start the MCP server (stdio transport). See [MCP Integration](#mcp-integration).
526
+
527
+ ### `procsi project init`
528
+
529
+ Manually initialise a `.procsi` directory in the current location.
530
+
531
+ ### `procsi interceptors`
532
+
533
+ List loaded interceptors, or manage them with subcommands.
534
+
535
+ ### `procsi interceptors init`
536
+
537
+ Scaffold an example interceptor in `.procsi/interceptors/`.
538
+
539
+ ### `procsi interceptors reload`
540
+
541
+ Reload interceptors from disk without restarting the daemon.
542
+
543
+ ## Development
544
+
545
+ ```bash
546
+ git clone https://github.com/mtford90/procsi.git
547
+ cd procsi
548
+ npm install
549
+
550
+ npm run build # Compile TypeScript
551
+ npm test # Run all tests
552
+ npm run typecheck # Type checking only
553
+ npm run lint # ESLint
554
+ npm run dev # Watch mode
555
+ ```
556
+
557
+ ## Troubleshooting
558
+
559
+ ### Certificate errors
560
+
561
+ procsi sets common CA environment variables automatically, but some tools need manual configuration:
562
+
563
+ ```bash
564
+ cat .procsi/ca.pem
565
+ ```
566
+
567
+ ### Daemon won't start
568
+
569
+ Check if something else is using the socket:
570
+
571
+ ```bash
572
+ procsi status
573
+ procsi daemon stop
574
+ procsi on # or: eval "$(procsi vars)"
575
+ ```
576
+
577
+ ### Terminal too small
578
+
579
+ The TUI needs at least 60 columns by 10 rows.
580
+
581
+ ### Requests not appearing
582
+
583
+ Your HTTP client needs to respect proxy environment variables. Browsers typically don't — use curl, wget, or language-level HTTP clients instead.
584
+
585
+ ## Licence
586
+
587
+ AGPL-3.0-or-later
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const clearCommand: Command;
3
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAuBrB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Command } from "commander";
2
+ import { getProcsiPaths } from "../../shared/project.js";
3
+ import { isDaemonRunning } from "../../shared/daemon.js";
4
+ import { ControlClient } from "../../shared/control-client.js";
5
+ import { requireProjectRoot, getErrorMessage, getGlobalOptions } from "./helpers.js";
6
+ export const clearCommand = new Command("clear")
7
+ .description("Clear all captured requests")
8
+ .action(async (_, command) => {
9
+ const globalOpts = getGlobalOptions(command);
10
+ const projectRoot = requireProjectRoot(globalOpts.dir);
11
+ const paths = getProcsiPaths(projectRoot);
12
+ const running = await isDaemonRunning(projectRoot);
13
+ if (!running) {
14
+ console.log("Daemon is not running");
15
+ process.exit(1);
16
+ }
17
+ const client = new ControlClient(paths.controlSocketFile);
18
+ try {
19
+ await client.clearRequests();
20
+ console.log("Requests cleared");
21
+ }
22
+ catch (err) {
23
+ console.error(`Error clearing requests: ${getErrorMessage(err)}`);
24
+ process.exit(1);
25
+ }
26
+ finally {
27
+ client.close();
28
+ }
29
+ });
30
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAgB,EAAE,EAAE;IACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const daemonCommand: Command;
3
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmEpC,eAAO,MAAM,aAAa,SAGM,CAAC"}