everything-dev 0.3.3 → 1.3.3

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 (313) hide show
  1. package/README.md +64 -0
  2. package/cli.js +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/api-contract.cjs +172 -0
  5. package/dist/api-contract.cjs.map +1 -0
  6. package/dist/api-contract.mjs +171 -0
  7. package/dist/api-contract.mjs.map +1 -0
  8. package/dist/api.cjs +124 -0
  9. package/dist/api.cjs.map +1 -0
  10. package/dist/api.d.cts +36 -0
  11. package/dist/api.d.cts.map +1 -0
  12. package/dist/api.d.mts +36 -0
  13. package/dist/api.d.mts.map +1 -0
  14. package/dist/api.mjs +119 -0
  15. package/dist/api.mjs.map +1 -0
  16. package/dist/app.cjs +156 -0
  17. package/dist/app.cjs.map +1 -0
  18. package/dist/app.mjs +153 -0
  19. package/dist/app.mjs.map +1 -0
  20. package/dist/cli/catalog.cjs +30 -0
  21. package/dist/cli/catalog.cjs.map +1 -0
  22. package/dist/cli/catalog.mjs +29 -0
  23. package/dist/cli/catalog.mjs.map +1 -0
  24. package/dist/cli/help.cjs +16 -0
  25. package/dist/cli/help.cjs.map +1 -0
  26. package/dist/cli/help.mjs +16 -0
  27. package/dist/cli/help.mjs.map +1 -0
  28. package/dist/cli/init.cjs +287 -0
  29. package/dist/cli/init.cjs.map +1 -0
  30. package/dist/cli/init.d.cts +36 -0
  31. package/dist/cli/init.d.cts.map +1 -0
  32. package/dist/cli/init.d.mts +36 -0
  33. package/dist/cli/init.d.mts.map +1 -0
  34. package/dist/cli/init.mjs +279 -0
  35. package/dist/cli/init.mjs.map +1 -0
  36. package/dist/cli/parse.cjs +96 -0
  37. package/dist/cli/parse.cjs.map +1 -0
  38. package/dist/cli/parse.mjs +95 -0
  39. package/dist/cli/parse.mjs.map +1 -0
  40. package/dist/cli/prompts.cjs +42 -0
  41. package/dist/cli/prompts.cjs.map +1 -0
  42. package/dist/cli/prompts.mjs +41 -0
  43. package/dist/cli/prompts.mjs.map +1 -0
  44. package/dist/cli.cjs +167 -0
  45. package/dist/cli.cjs.map +1 -0
  46. package/dist/cli.d.cts +1 -0
  47. package/dist/cli.d.mts +1 -0
  48. package/dist/cli.mjs +166 -0
  49. package/dist/cli.mjs.map +1 -0
  50. package/dist/components/dev-view.cjs +307 -0
  51. package/dist/components/dev-view.cjs.map +1 -0
  52. package/dist/components/dev-view.mjs +306 -0
  53. package/dist/components/dev-view.mjs.map +1 -0
  54. package/dist/components/streaming-view.cjs +146 -0
  55. package/dist/components/streaming-view.cjs.map +1 -0
  56. package/dist/components/streaming-view.mjs +144 -0
  57. package/dist/components/streaming-view.mjs.map +1 -0
  58. package/dist/config.cjs +280 -0
  59. package/dist/config.cjs.map +1 -0
  60. package/dist/config.d.cts +35 -0
  61. package/dist/config.d.cts.map +1 -0
  62. package/dist/config.d.mts +35 -0
  63. package/dist/config.d.mts.map +1 -0
  64. package/dist/config.mjs +266 -0
  65. package/dist/config.mjs.map +1 -0
  66. package/dist/contract.cjs +209 -0
  67. package/dist/contract.cjs.map +1 -0
  68. package/dist/contract.d.cts +490 -0
  69. package/dist/contract.d.cts.map +1 -0
  70. package/dist/contract.d.mts +490 -0
  71. package/dist/contract.d.mts.map +1 -0
  72. package/dist/contract.meta.cjs +104 -0
  73. package/dist/contract.meta.cjs.map +1 -0
  74. package/dist/contract.meta.d.cts +141 -0
  75. package/dist/contract.meta.d.cts.map +1 -0
  76. package/dist/contract.meta.d.mts +141 -0
  77. package/dist/contract.meta.d.mts.map +1 -0
  78. package/dist/contract.meta.mjs +102 -0
  79. package/dist/contract.meta.mjs.map +1 -0
  80. package/dist/contract.mjs +186 -0
  81. package/dist/contract.mjs.map +1 -0
  82. package/dist/dev-logs.cjs +53 -0
  83. package/dist/dev-logs.cjs.map +1 -0
  84. package/dist/dev-logs.mjs +51 -0
  85. package/dist/dev-logs.mjs.map +1 -0
  86. package/dist/dev-session.cjs +195 -0
  87. package/dist/dev-session.cjs.map +1 -0
  88. package/dist/dev-session.mjs +194 -0
  89. package/dist/dev-session.mjs.map +1 -0
  90. package/dist/fastkv.cjs +89 -0
  91. package/dist/fastkv.cjs.map +1 -0
  92. package/dist/fastkv.d.cts +11 -0
  93. package/dist/fastkv.d.cts.map +1 -0
  94. package/dist/fastkv.d.mts +11 -0
  95. package/dist/fastkv.d.mts.map +1 -0
  96. package/dist/fastkv.mjs +82 -0
  97. package/dist/fastkv.mjs.map +1 -0
  98. package/dist/federation.server.cjs +27 -0
  99. package/dist/federation.server.cjs.map +1 -0
  100. package/dist/federation.server.mjs +27 -0
  101. package/dist/federation.server.mjs.map +1 -0
  102. package/dist/host.cjs +367 -0
  103. package/dist/host.cjs.map +1 -0
  104. package/dist/host.d.cts +22 -0
  105. package/dist/host.d.cts.map +1 -0
  106. package/dist/host.d.mts +22 -0
  107. package/dist/host.d.mts.map +1 -0
  108. package/dist/host.mjs +364 -0
  109. package/dist/host.mjs.map +1 -0
  110. package/dist/index.cjs +122 -0
  111. package/dist/index.d.cts +7 -0
  112. package/dist/index.d.mts +7 -0
  113. package/dist/index.mjs +9 -0
  114. package/dist/integrity.cjs +39 -0
  115. package/dist/integrity.cjs.map +1 -0
  116. package/dist/integrity.d.cts +7 -0
  117. package/dist/integrity.d.cts.map +1 -0
  118. package/dist/integrity.d.mts +7 -0
  119. package/dist/integrity.d.mts.map +1 -0
  120. package/dist/integrity.mjs +35 -0
  121. package/dist/integrity.mjs.map +1 -0
  122. package/dist/internal/manifest-normalizer.cjs +140 -0
  123. package/dist/internal/manifest-normalizer.cjs.map +1 -0
  124. package/dist/internal/manifest-normalizer.mjs +138 -0
  125. package/dist/internal/manifest-normalizer.mjs.map +1 -0
  126. package/dist/mf.cjs +77 -0
  127. package/dist/mf.cjs.map +1 -0
  128. package/dist/mf.d.cts +19 -0
  129. package/dist/mf.d.cts.map +1 -0
  130. package/dist/mf.d.mts +19 -0
  131. package/dist/mf.d.mts.map +1 -0
  132. package/dist/mf.mjs +71 -0
  133. package/dist/mf.mjs.map +1 -0
  134. package/dist/near-cli.cjs +196 -0
  135. package/dist/near-cli.cjs.map +1 -0
  136. package/dist/near-cli.mjs +193 -0
  137. package/dist/near-cli.mjs.map +1 -0
  138. package/dist/network.cjs +9 -0
  139. package/dist/network.cjs.map +1 -0
  140. package/dist/network.mjs +8 -0
  141. package/dist/network.mjs.map +1 -0
  142. package/dist/orchestrator.cjs +441 -0
  143. package/dist/orchestrator.cjs.map +1 -0
  144. package/dist/orchestrator.d.cts +40 -0
  145. package/dist/orchestrator.d.cts.map +1 -0
  146. package/dist/orchestrator.d.mts +40 -0
  147. package/dist/orchestrator.d.mts.map +1 -0
  148. package/dist/orchestrator.mjs +436 -0
  149. package/dist/orchestrator.mjs.map +1 -0
  150. package/dist/plugin.cjs +830 -0
  151. package/dist/plugin.cjs.map +1 -0
  152. package/dist/plugin.d.cts +347 -0
  153. package/dist/plugin.d.cts.map +1 -0
  154. package/dist/plugin.d.mts +348 -0
  155. package/dist/plugin.d.mts.map +1 -0
  156. package/dist/plugin.mjs +827 -0
  157. package/dist/plugin.mjs.map +1 -0
  158. package/dist/process-registry.cjs +120 -0
  159. package/dist/process-registry.cjs.map +1 -0
  160. package/dist/process-registry.d.cts +25 -0
  161. package/dist/process-registry.d.cts.map +1 -0
  162. package/dist/process-registry.d.mts +25 -0
  163. package/dist/process-registry.d.mts.map +1 -0
  164. package/dist/process-registry.mjs +119 -0
  165. package/dist/process-registry.mjs.map +1 -0
  166. package/dist/sdk.cjs +61 -0
  167. package/dist/sdk.d.cts +5 -0
  168. package/dist/sdk.d.mts +5 -0
  169. package/dist/sdk.mjs +6 -0
  170. package/dist/shared.cjs +143 -0
  171. package/dist/shared.cjs.map +1 -0
  172. package/dist/shared.d.cts +33 -0
  173. package/dist/shared.d.cts.map +1 -0
  174. package/dist/shared.d.mts +33 -0
  175. package/dist/shared.d.mts.map +1 -0
  176. package/dist/shared.mjs +140 -0
  177. package/dist/shared.mjs.map +1 -0
  178. package/dist/types.cjs +160 -0
  179. package/dist/types.cjs.map +1 -0
  180. package/dist/types.d.cts +269 -0
  181. package/dist/types.d.cts.map +1 -0
  182. package/dist/types.d.mts +269 -0
  183. package/dist/types.d.mts.map +1 -0
  184. package/dist/types.mjs +144 -0
  185. package/dist/types.mjs.map +1 -0
  186. package/dist/ui/head.cjs +67 -0
  187. package/dist/ui/head.cjs.map +1 -0
  188. package/dist/ui/head.d.cts +19 -0
  189. package/dist/ui/head.d.cts.map +1 -0
  190. package/dist/ui/head.d.mts +19 -0
  191. package/dist/ui/head.d.mts.map +1 -0
  192. package/dist/ui/head.mjs +61 -0
  193. package/dist/ui/head.mjs.map +1 -0
  194. package/dist/ui/index.cjs +32 -0
  195. package/dist/ui/index.d.cts +7 -0
  196. package/dist/ui/index.d.mts +7 -0
  197. package/dist/ui/index.mjs +6 -0
  198. package/dist/ui/metadata.cjs +106 -0
  199. package/dist/ui/metadata.cjs.map +1 -0
  200. package/dist/ui/metadata.d.cts +35 -0
  201. package/dist/ui/metadata.d.cts.map +1 -0
  202. package/dist/ui/metadata.d.mts +35 -0
  203. package/dist/ui/metadata.d.mts.map +1 -0
  204. package/dist/ui/metadata.mjs +100 -0
  205. package/dist/ui/metadata.mjs.map +1 -0
  206. package/dist/ui/router.cjs +56 -0
  207. package/dist/ui/router.cjs.map +1 -0
  208. package/dist/ui/router.d.cts +11 -0
  209. package/dist/ui/router.d.cts.map +1 -0
  210. package/dist/ui/router.d.mts +11 -0
  211. package/dist/ui/router.d.mts.map +1 -0
  212. package/dist/ui/router.mjs +51 -0
  213. package/dist/ui/router.mjs.map +1 -0
  214. package/dist/ui/runtime.cjs +65 -0
  215. package/dist/ui/runtime.cjs.map +1 -0
  216. package/dist/ui/runtime.d.cts +29 -0
  217. package/dist/ui/runtime.d.cts.map +1 -0
  218. package/dist/ui/runtime.d.mts +29 -0
  219. package/dist/ui/runtime.d.mts.map +1 -0
  220. package/dist/ui/runtime.mjs +53 -0
  221. package/dist/ui/runtime.mjs.map +1 -0
  222. package/dist/ui/types.cjs +0 -0
  223. package/dist/ui/types.d.cts +52 -0
  224. package/dist/ui/types.d.cts.map +1 -0
  225. package/dist/ui/types.d.mts +52 -0
  226. package/dist/ui/types.d.mts.map +1 -0
  227. package/dist/ui/types.mjs +1 -0
  228. package/dist/utils/banner.cjs +24 -0
  229. package/dist/utils/banner.cjs.map +1 -0
  230. package/dist/utils/banner.mjs +23 -0
  231. package/dist/utils/banner.mjs.map +1 -0
  232. package/dist/utils/linkify.cjs +15 -0
  233. package/dist/utils/linkify.cjs.map +1 -0
  234. package/dist/utils/linkify.mjs +14 -0
  235. package/dist/utils/linkify.mjs.map +1 -0
  236. package/dist/utils/run.cjs +40 -0
  237. package/dist/utils/run.cjs.map +1 -0
  238. package/dist/utils/run.mjs +39 -0
  239. package/dist/utils/run.mjs.map +1 -0
  240. package/dist/utils/theme.cjs +44 -0
  241. package/dist/utils/theme.cjs.map +1 -0
  242. package/dist/utils/theme.mjs +37 -0
  243. package/dist/utils/theme.mjs.map +1 -0
  244. package/package.json +269 -80
  245. package/src/api-contract.ts +309 -0
  246. package/src/api.ts +181 -0
  247. package/src/app.ts +346 -0
  248. package/src/cli/catalog.ts +49 -0
  249. package/src/cli/help.ts +13 -0
  250. package/src/cli/init.ts +386 -0
  251. package/src/cli/parse.ts +130 -0
  252. package/src/cli/prompts.ts +64 -0
  253. package/src/cli.ts +203 -1507
  254. package/src/components/dev-view.tsx +307 -255
  255. package/src/components/streaming-view.ts +164 -128
  256. package/src/config.ts +462 -532
  257. package/src/contract.meta.ts +96 -0
  258. package/src/contract.ts +164 -561
  259. package/src/dev-logs.ts +85 -0
  260. package/src/dev-session.ts +318 -0
  261. package/src/fastkv.ts +153 -0
  262. package/src/federation.server.ts +43 -0
  263. package/src/host.ts +526 -0
  264. package/src/index.ts +6 -3
  265. package/src/integrity.ts +54 -0
  266. package/src/internal/manifest-normalizer.ts +251 -0
  267. package/src/mf.ts +105 -0
  268. package/src/near-cli.ts +284 -0
  269. package/src/network.ts +3 -0
  270. package/src/orchestrator.ts +648 -0
  271. package/src/plugin.ts +1130 -2311
  272. package/src/process-registry.ts +154 -0
  273. package/src/scripts/sync-api-contract.ts +24 -0
  274. package/src/sdk.ts +14 -0
  275. package/src/shared.ts +206 -0
  276. package/src/types.ts +152 -206
  277. package/src/ui/head.ts +34 -27
  278. package/src/ui/index.ts +3 -3
  279. package/src/ui/metadata.ts +95 -0
  280. package/src/ui/router.ts +22 -6
  281. package/src/ui/runtime.ts +55 -6
  282. package/src/ui/types.ts +24 -11
  283. package/src/utils/banner.ts +10 -6
  284. package/src/utils/run.ts +26 -27
  285. package/src/utils/theme.ts +3 -66
  286. package/src/components/monitor-view.tsx +0 -475
  287. package/src/components/status-view.tsx +0 -173
  288. package/src/lib/env.ts +0 -109
  289. package/src/lib/near-cli.ts +0 -289
  290. package/src/lib/nova.ts +0 -266
  291. package/src/lib/orchestrator.ts +0 -276
  292. package/src/lib/process-registry.ts +0 -166
  293. package/src/lib/process.ts +0 -550
  294. package/src/lib/resource-monitor/assertions.ts +0 -234
  295. package/src/lib/resource-monitor/command.ts +0 -283
  296. package/src/lib/resource-monitor/diff.ts +0 -157
  297. package/src/lib/resource-monitor/errors.ts +0 -127
  298. package/src/lib/resource-monitor/index.ts +0 -305
  299. package/src/lib/resource-monitor/platform/darwin.ts +0 -306
  300. package/src/lib/resource-monitor/platform/index.ts +0 -35
  301. package/src/lib/resource-monitor/platform/linux.ts +0 -332
  302. package/src/lib/resource-monitor/platform/windows.ts +0 -298
  303. package/src/lib/resource-monitor/snapshot.ts +0 -217
  304. package/src/lib/resource-monitor/types.ts +0 -74
  305. package/src/lib/session-recorder/errors.ts +0 -102
  306. package/src/lib/session-recorder/flows/login.ts +0 -210
  307. package/src/lib/session-recorder/index.ts +0 -361
  308. package/src/lib/session-recorder/playwright.ts +0 -257
  309. package/src/lib/session-recorder/report.ts +0 -353
  310. package/src/lib/session-recorder/server.ts +0 -268
  311. package/src/lib/session-recorder/types.ts +0 -115
  312. package/src/lib/sync.ts +0 -1
  313. package/src/ui/files.ts +0 -134
@@ -1,127 +0,0 @@
1
- import { Data } from "effect";
2
- import type { PortInfo, ProcessInfo } from "./types";
3
-
4
- export class CommandFailed extends Data.TaggedError("CommandFailed")<{
5
- readonly command: string;
6
- readonly args: string[];
7
- readonly exitCode: number;
8
- readonly stderr: string;
9
- }> {
10
- get message() {
11
- return `Command '${this.command} ${this.args.join(" ")}' failed with exit code ${this.exitCode}: ${this.stderr}`;
12
- }
13
- }
14
-
15
- export class CommandTimeout extends Data.TaggedError("CommandTimeout")<{
16
- readonly command: string;
17
- readonly timeoutMs: number;
18
- }> {
19
- get message() {
20
- return `Command '${this.command}' timed out after ${this.timeoutMs}ms`;
21
- }
22
- }
23
-
24
- export class ParseError extends Data.TaggedError("ParseError")<{
25
- readonly source: string;
26
- readonly raw: string;
27
- readonly reason: string;
28
- }> {
29
- get message() {
30
- return `Failed to parse ${this.source}: ${this.reason}`;
31
- }
32
- }
33
-
34
- export class PortStillBound extends Data.TaggedError("PortStillBound")<{
35
- readonly ports: Array<{ port: number; pid: number | null; command: string | null }>;
36
- }> {
37
- get message() {
38
- const portList = this.ports.map((p) => `:${p.port} (PID ${p.pid})`).join(", ");
39
- return `Expected ports to be free, but still bound: ${portList}`;
40
- }
41
- }
42
-
43
- export class OrphanedProcesses extends Data.TaggedError("OrphanedProcesses")<{
44
- readonly processes: Array<{ pid: number; command: string; rss: number }>;
45
- }> {
46
- get message() {
47
- return `Found ${this.processes.length} orphaned processes still running`;
48
- }
49
- }
50
-
51
- export class MemoryLimitExceeded extends Data.TaggedError("MemoryLimitExceeded")<{
52
- readonly deltaMB: number;
53
- readonly limitMB: number;
54
- readonly baselineRss: number;
55
- readonly afterRss: number;
56
- }> {
57
- get message() {
58
- return `Memory delta ${this.deltaMB.toFixed(1)} MB exceeds limit ${this.limitMB} MB`;
59
- }
60
- }
61
-
62
- export class MemoryPercentExceeded extends Data.TaggedError("MemoryPercentExceeded")<{
63
- readonly deltaPercent: number;
64
- readonly limitPercent: number;
65
- readonly baselineRss: number;
66
- readonly afterRss: number;
67
- }> {
68
- get message() {
69
- return `Memory delta ${this.deltaPercent.toFixed(1)}% exceeds limit ${this.limitPercent}%`;
70
- }
71
- }
72
-
73
- export class ProcessesStillAlive extends Data.TaggedError("ProcessesStillAlive")<{
74
- readonly pids: number[];
75
- }> {
76
- get message() {
77
- return `Expected processes to be dead, but ${this.pids.length} still alive: ${this.pids.join(", ")}`;
78
- }
79
- }
80
-
81
- export class ResourceLeaks extends Data.TaggedError("ResourceLeaks")<{
82
- readonly orphanedProcesses: ProcessInfo[];
83
- readonly stillBoundPorts: PortInfo[];
84
- }> {
85
- get message() {
86
- const parts: string[] = [];
87
- if (this.orphanedProcesses.length > 0) {
88
- parts.push(`${this.orphanedProcesses.length} orphaned processes`);
89
- }
90
- if (this.stillBoundPorts.length > 0) {
91
- parts.push(`${this.stillBoundPorts.length} ports still bound`);
92
- }
93
- return `Resource leaks detected: ${parts.join(", ")}`;
94
- }
95
- }
96
-
97
- export class ConfigNotFound extends Data.TaggedError("ConfigNotFound")<{
98
- readonly path: string | undefined;
99
- }> {
100
- get message() {
101
- return this.path
102
- ? `Config not found at ${this.path}`
103
- : `No bos.config.json found in project`;
104
- }
105
- }
106
-
107
- export class FileReadError extends Data.TaggedError("FileReadError")<{
108
- readonly path: string;
109
- readonly reason: string;
110
- }> {
111
- get message() {
112
- return `Failed to read ${this.path}: ${this.reason}`;
113
- }
114
- }
115
-
116
- export type MonitorError =
117
- | CommandFailed
118
- | CommandTimeout
119
- | ParseError
120
- | PortStillBound
121
- | OrphanedProcesses
122
- | MemoryLimitExceeded
123
- | MemoryPercentExceeded
124
- | ProcessesStillAlive
125
- | ResourceLeaks
126
- | ConfigNotFound
127
- | FileReadError;
@@ -1,305 +0,0 @@
1
- import { writeFile } from "node:fs/promises";
2
- import { Effect, Logger, LogLevel } from "effect";
3
- import {
4
- assertAllPortsFree,
5
- assertAllPortsFreeWithPlatform,
6
- assertCleanState,
7
- assertCleanStateWithPlatform,
8
- assertMemoryDelta,
9
- assertNoLeaks,
10
- assertNoOrphanProcesses,
11
- assertProcessesDead,
12
- } from "./assertions";
13
- import { diffSnapshots, formatDiff, formatSnapshotSummary, hasLeaks } from "./diff";
14
- import {
15
- MemoryLimitExceeded,
16
- MemoryPercentExceeded,
17
- OrphanedProcesses,
18
- PortStillBound,
19
- ProcessesStillAlive,
20
- ResourceLeaks,
21
- } from "./errors";
22
- import { PlatformLive, PlatformService, withPlatform } from "./platform";
23
- import {
24
- createSnapshot,
25
- createSnapshotWithPlatform,
26
- findBosProcesses,
27
- isProcessAlive,
28
- isProcessAliveSync,
29
- waitForPortFree,
30
- waitForPortFreeWithPlatform,
31
- waitForProcessDeath,
32
- } from "./snapshot";
33
- import type {
34
- MemoryInfo,
35
- MonitorConfig,
36
- PortInfo,
37
- ProcessInfo,
38
- Snapshot,
39
- SnapshotDiff,
40
- } from "./types";
41
-
42
- export class ResourceMonitor {
43
- private config: MonitorConfig;
44
- private baseline: Snapshot | null = null;
45
- private snapshots: Snapshot[] = [];
46
-
47
- private constructor(config: MonitorConfig) {
48
- this.config = config;
49
- }
50
-
51
- static create = (
52
- config?: MonitorConfig
53
- ): Effect.Effect<ResourceMonitor, never, PlatformService> =>
54
- Effect.gen(function* () {
55
- yield* Effect.logInfo("Creating ResourceMonitor instance");
56
- return new ResourceMonitor(config || {});
57
- });
58
-
59
- static createWithPlatform = (
60
- config?: MonitorConfig
61
- ): Effect.Effect<ResourceMonitor> =>
62
- withPlatform(ResourceMonitor.create(config));
63
-
64
- snapshot(): Effect.Effect<Snapshot, never, PlatformService> {
65
- const self = this;
66
- return Effect.gen(function* () {
67
- const snap = yield* createSnapshot(self.config);
68
- self.snapshots.push(snap);
69
- return snap;
70
- });
71
- }
72
-
73
- snapshotWithPlatform(): Effect.Effect<Snapshot> {
74
- return withPlatform(this.snapshot());
75
- }
76
-
77
- setBaseline(): Effect.Effect<Snapshot, never, PlatformService> {
78
- const self = this;
79
- return Effect.gen(function* () {
80
- yield* Effect.logInfo("Setting baseline snapshot");
81
- self.baseline = yield* self.snapshot();
82
- return self.baseline;
83
- });
84
- }
85
-
86
- setBaselineWithPlatform(): Effect.Effect<Snapshot> {
87
- return withPlatform(this.setBaseline());
88
- }
89
-
90
- getBaseline(): Effect.Effect<Snapshot | null> {
91
- return Effect.succeed(this.baseline);
92
- }
93
-
94
- clearBaseline(): Effect.Effect<void> {
95
- return Effect.sync(() => {
96
- this.baseline = null;
97
- });
98
- }
99
-
100
- getSnapshots(): Effect.Effect<Snapshot[]> {
101
- return Effect.succeed([...this.snapshots]);
102
- }
103
-
104
- clearSnapshots(): Effect.Effect<void> {
105
- return Effect.sync(() => {
106
- this.snapshots = [];
107
- });
108
- }
109
-
110
- diff(from: Snapshot, to: Snapshot): Effect.Effect<SnapshotDiff> {
111
- return Effect.sync(() => diffSnapshots(from, to));
112
- }
113
-
114
- diffFromBaseline(to: Snapshot): Effect.Effect<SnapshotDiff | null> {
115
- return Effect.sync(() => {
116
- if (!this.baseline) return null;
117
- return diffSnapshots(this.baseline, to);
118
- });
119
- }
120
-
121
- hasLeaks(diff: SnapshotDiff): Effect.Effect<boolean> {
122
- return Effect.sync(() => hasLeaks(diff));
123
- }
124
-
125
- assertAllPortsFree(
126
- ports?: number[]
127
- ): Effect.Effect<void, PortStillBound, PlatformService> {
128
- const portsToCheck =
129
- ports ||
130
- Object.keys(this.baseline?.ports || {}).map((p) => parseInt(p, 10));
131
- return assertAllPortsFree(portsToCheck);
132
- }
133
-
134
- assertAllPortsFreeWithPlatform(
135
- ports?: number[]
136
- ): Effect.Effect<void, PortStillBound> {
137
- const portsToCheck =
138
- ports ||
139
- Object.keys(this.baseline?.ports || {}).map((p) => parseInt(p, 10));
140
- return assertAllPortsFreeWithPlatform(portsToCheck);
141
- }
142
-
143
- assertNoOrphanProcesses(
144
- running: Snapshot,
145
- after: Snapshot
146
- ): Effect.Effect<void, OrphanedProcesses> {
147
- return assertNoOrphanProcesses(running, after);
148
- }
149
-
150
- assertMemoryDelta(
151
- baseline: Snapshot,
152
- after: Snapshot,
153
- options: { maxDeltaMB?: number; maxDeltaPercent?: number }
154
- ): Effect.Effect<void, MemoryLimitExceeded | MemoryPercentExceeded> {
155
- return assertMemoryDelta(baseline, after, options);
156
- }
157
-
158
- assertProcessesDead(pids: number[]): Effect.Effect<void, ProcessesStillAlive> {
159
- return assertProcessesDead(pids);
160
- }
161
-
162
- assertNoLeaks(diff: SnapshotDiff): Effect.Effect<void, ResourceLeaks> {
163
- return assertNoLeaks(diff);
164
- }
165
-
166
- assertCleanState(
167
- running: Snapshot
168
- ): Effect.Effect<void, PortStillBound | ProcessesStillAlive, PlatformService> {
169
- return assertCleanState(running);
170
- }
171
-
172
- assertCleanStateWithPlatform(
173
- running: Snapshot
174
- ): Effect.Effect<void, PortStillBound | ProcessesStillAlive> {
175
- return assertCleanStateWithPlatform(running);
176
- }
177
-
178
- waitForPortFree(
179
- port: number,
180
- timeoutMs?: number
181
- ): Effect.Effect<boolean, never, PlatformService> {
182
- return waitForPortFree(port, timeoutMs);
183
- }
184
-
185
- waitForPortFreeWithPlatform(
186
- port: number,
187
- timeoutMs?: number
188
- ): Effect.Effect<boolean> {
189
- return waitForPortFreeWithPlatform(port, timeoutMs);
190
- }
191
-
192
- waitForProcessDeath(pid: number, timeoutMs?: number): Effect.Effect<boolean> {
193
- return waitForProcessDeath(pid, timeoutMs);
194
- }
195
-
196
- formatSnapshot(snapshot: Snapshot): Effect.Effect<string> {
197
- return Effect.sync(() => formatSnapshotSummary(snapshot));
198
- }
199
-
200
- formatDiff(diff: SnapshotDiff): Effect.Effect<string> {
201
- return Effect.sync(() => formatDiff(diff));
202
- }
203
-
204
- export(filepath: string): Effect.Effect<void> {
205
- const self = this;
206
- return Effect.gen(function* () {
207
- yield* Effect.logInfo(`Exporting monitor data to ${filepath}`);
208
-
209
- const data = {
210
- config: self.config,
211
- baseline: self.baseline,
212
- snapshots: self.snapshots,
213
- exportedAt: new Date().toISOString(),
214
- platform: process.platform,
215
- };
216
-
217
- yield* Effect.tryPromise({
218
- try: () => writeFile(filepath, JSON.stringify(data, null, 2)),
219
- catch: (e) => new Error(`Failed to export: ${e}`),
220
- });
221
-
222
- yield* Effect.logInfo(`Exported ${self.snapshots.length} snapshots`);
223
- }).pipe(Effect.catchAll(() => Effect.void));
224
- }
225
-
226
- toJSON(): Effect.Effect<{
227
- config: MonitorConfig;
228
- baseline: Snapshot | null;
229
- snapshots: Snapshot[];
230
- }> {
231
- return Effect.succeed({
232
- config: this.config,
233
- baseline: this.baseline,
234
- snapshots: this.snapshots,
235
- });
236
- }
237
- }
238
-
239
- export const runWithLogging = <A, E>(
240
- effect: Effect.Effect<A, E, PlatformService>
241
- ): Promise<A> =>
242
- effect.pipe(
243
- Effect.provide(PlatformLive),
244
- Logger.withMinimumLogLevel(LogLevel.Debug),
245
- Effect.runPromise
246
- );
247
-
248
- export const runWithInfo = <A, E>(
249
- effect: Effect.Effect<A, E, PlatformService>
250
- ): Promise<A> =>
251
- effect.pipe(
252
- Effect.provide(PlatformLive),
253
- Logger.withMinimumLogLevel(LogLevel.Info),
254
- Effect.runPromise
255
- );
256
-
257
- export const runSilent = <A, E>(
258
- effect: Effect.Effect<A, E, PlatformService>
259
- ): Promise<A> =>
260
- effect.pipe(
261
- Effect.provide(PlatformLive),
262
- Logger.withMinimumLogLevel(LogLevel.Error),
263
- Effect.runPromise
264
- );
265
-
266
- export {
267
- assertAllPortsFree,
268
- assertAllPortsFreeWithPlatform,
269
- assertCleanState,
270
- assertCleanStateWithPlatform,
271
- assertMemoryDelta,
272
- assertNoLeaks,
273
- assertNoOrphanProcesses,
274
- assertProcessesDead,
275
- createSnapshot,
276
- createSnapshotWithPlatform,
277
- diffSnapshots,
278
- findBosProcesses,
279
- formatDiff,
280
- formatSnapshotSummary,
281
- hasLeaks,
282
- isProcessAlive,
283
- isProcessAliveSync,
284
- MemoryLimitExceeded,
285
- MemoryPercentExceeded,
286
- OrphanedProcesses,
287
- PlatformLive,
288
- PlatformService,
289
- PortStillBound,
290
- ProcessesStillAlive,
291
- ResourceLeaks,
292
- waitForPortFree,
293
- waitForPortFreeWithPlatform,
294
- waitForProcessDeath,
295
- withPlatform,
296
- };
297
-
298
- export type {
299
- MemoryInfo,
300
- MonitorConfig,
301
- PortInfo,
302
- ProcessInfo,
303
- Snapshot,
304
- SnapshotDiff,
305
- };