nomoreide 0.1.103 → 0.3.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 (621) hide show
  1. package/README.md +72 -20
  2. package/bin/nomoreide.js +82 -0
  3. package/package.json +24 -90
  4. package/dist/cli/agents.d.ts +0 -2
  5. package/dist/cli/agents.js +0 -43
  6. package/dist/cli/agents.js.map +0 -1
  7. package/dist/cli/commands.d.ts +0 -11
  8. package/dist/cli/commands.js +0 -235
  9. package/dist/cli/commands.js.map +0 -1
  10. package/dist/cli/daemon.d.ts +0 -15
  11. package/dist/cli/daemon.js +0 -139
  12. package/dist/cli/daemon.js.map +0 -1
  13. package/dist/cli/database.d.ts +0 -2
  14. package/dist/cli/database.js +0 -145
  15. package/dist/cli/database.js.map +0 -1
  16. package/dist/cli/errors.d.ts +0 -2
  17. package/dist/cli/errors.js +0 -3
  18. package/dist/cli/errors.js.map +0 -1
  19. package/dist/cli/flags.d.ts +0 -1
  20. package/dist/cli/flags.js +0 -19
  21. package/dist/cli/flags.js.map +0 -1
  22. package/dist/cli/git.d.ts +0 -2
  23. package/dist/cli/git.js +0 -113
  24. package/dist/cli/git.js.map +0 -1
  25. package/dist/cli/profile.d.ts +0 -2
  26. package/dist/cli/profile.js +0 -171
  27. package/dist/cli/profile.js.map +0 -1
  28. package/dist/core/agent-context.d.ts +0 -9
  29. package/dist/core/agent-context.js +0 -43
  30. package/dist/core/agent-context.js.map +0 -1
  31. package/dist/core/agent-env/antigravity-reader.d.ts +0 -7
  32. package/dist/core/agent-env/antigravity-reader.js +0 -86
  33. package/dist/core/agent-env/antigravity-reader.js.map +0 -1
  34. package/dist/core/agent-env/availability.d.ts +0 -6
  35. package/dist/core/agent-env/availability.js +0 -79
  36. package/dist/core/agent-env/availability.js.map +0 -1
  37. package/dist/core/agent-env/claude-reader.d.ts +0 -7
  38. package/dist/core/agent-env/claude-reader.js +0 -101
  39. package/dist/core/agent-env/claude-reader.js.map +0 -1
  40. package/dist/core/agent-env/codex-reader.d.ts +0 -11
  41. package/dist/core/agent-env/codex-reader.js +0 -164
  42. package/dist/core/agent-env/codex-reader.js.map +0 -1
  43. package/dist/core/agent-env/index.d.ts +0 -9
  44. package/dist/core/agent-env/index.js +0 -29
  45. package/dist/core/agent-env/index.js.map +0 -1
  46. package/dist/core/agent-env/managed-plugins.d.ts +0 -18
  47. package/dist/core/agent-env/managed-plugins.js +0 -68
  48. package/dist/core/agent-env/managed-plugins.js.map +0 -1
  49. package/dist/core/agent-env/plugin-reader.d.ts +0 -9
  50. package/dist/core/agent-env/plugin-reader.js +0 -174
  51. package/dist/core/agent-env/plugin-reader.js.map +0 -1
  52. package/dist/core/agent-env/shared.d.ts +0 -26
  53. package/dist/core/agent-env/shared.js +0 -116
  54. package/dist/core/agent-env/shared.js.map +0 -1
  55. package/dist/core/agent-env/types.d.ts +0 -66
  56. package/dist/core/agent-env/types.js +0 -7
  57. package/dist/core/agent-env/types.js.map +0 -1
  58. package/dist/core/agent-env-actions.d.ts +0 -117
  59. package/dist/core/agent-env-actions.js +0 -273
  60. package/dist/core/agent-env-actions.js.map +0 -1
  61. package/dist/core/agent-env-plugin-uninstall.d.ts +0 -11
  62. package/dist/core/agent-env-plugin-uninstall.js +0 -189
  63. package/dist/core/agent-env-plugin-uninstall.js.map +0 -1
  64. package/dist/core/agent-env-writers.d.ts +0 -71
  65. package/dist/core/agent-env-writers.js +0 -632
  66. package/dist/core/agent-env-writers.js.map +0 -1
  67. package/dist/core/agent-profiles/apply.d.ts +0 -57
  68. package/dist/core/agent-profiles/apply.js +0 -209
  69. package/dist/core/agent-profiles/apply.js.map +0 -1
  70. package/dist/core/agent-profiles/builtin.d.ts +0 -8
  71. package/dist/core/agent-profiles/builtin.js +0 -33
  72. package/dist/core/agent-profiles/builtin.js.map +0 -1
  73. package/dist/core/agent-profiles/credentials.d.ts +0 -26
  74. package/dist/core/agent-profiles/credentials.js +0 -151
  75. package/dist/core/agent-profiles/credentials.js.map +0 -1
  76. package/dist/core/agent-profiles/debug-setup.d.ts +0 -18
  77. package/dist/core/agent-profiles/debug-setup.js +0 -237
  78. package/dist/core/agent-profiles/debug-setup.js.map +0 -1
  79. package/dist/core/agent-profiles/index.d.ts +0 -18
  80. package/dist/core/agent-profiles/index.js +0 -19
  81. package/dist/core/agent-profiles/index.js.map +0 -1
  82. package/dist/core/agent-profiles/plugin-apply.d.ts +0 -16
  83. package/dist/core/agent-profiles/plugin-apply.js +0 -383
  84. package/dist/core/agent-profiles/plugin-apply.js.map +0 -1
  85. package/dist/core/agent-profiles/plugin-bundle.d.ts +0 -6
  86. package/dist/core/agent-profiles/plugin-bundle.js +0 -32
  87. package/dist/core/agent-profiles/plugin-bundle.js.map +0 -1
  88. package/dist/core/agent-profiles/publication.d.ts +0 -105
  89. package/dist/core/agent-profiles/publication.js +0 -126
  90. package/dist/core/agent-profiles/publication.js.map +0 -1
  91. package/dist/core/agent-profiles/registry-auth.d.ts +0 -25
  92. package/dist/core/agent-profiles/registry-auth.js +0 -78
  93. package/dist/core/agent-profiles/registry-auth.js.map +0 -1
  94. package/dist/core/agent-profiles/registry-client.d.ts +0 -98
  95. package/dist/core/agent-profiles/registry-client.js +0 -109
  96. package/dist/core/agent-profiles/registry-client.js.map +0 -1
  97. package/dist/core/agent-profiles/registry-config.d.ts +0 -62
  98. package/dist/core/agent-profiles/registry-config.js +0 -221
  99. package/dist/core/agent-profiles/registry-config.js.map +0 -1
  100. package/dist/core/agent-profiles/registry-transfer.d.ts +0 -42
  101. package/dist/core/agent-profiles/registry-transfer.js +0 -133
  102. package/dist/core/agent-profiles/registry-transfer.js.map +0 -1
  103. package/dist/core/agent-profiles/store.d.ts +0 -62
  104. package/dist/core/agent-profiles/store.js +0 -479
  105. package/dist/core/agent-profiles/store.js.map +0 -1
  106. package/dist/core/agent-profiles/transfer.d.ts +0 -27
  107. package/dist/core/agent-profiles/transfer.js +0 -354
  108. package/dist/core/agent-profiles/transfer.js.map +0 -1
  109. package/dist/core/agent-profiles/types.d.ts +0 -364
  110. package/dist/core/agent-profiles/types.js +0 -79
  111. package/dist/core/agent-profiles/types.js.map +0 -1
  112. package/dist/core/agent-runtime.d.ts +0 -114
  113. package/dist/core/agent-runtime.js +0 -494
  114. package/dist/core/agent-runtime.js.map +0 -1
  115. package/dist/core/agent-sessions.d.ts +0 -46
  116. package/dist/core/agent-sessions.js +0 -109
  117. package/dist/core/agent-sessions.js.map +0 -1
  118. package/dist/core/agent-settings.d.ts +0 -31
  119. package/dist/core/agent-settings.js +0 -129
  120. package/dist/core/agent-settings.js.map +0 -1
  121. package/dist/core/agent-terminal.d.ts +0 -22
  122. package/dist/core/agent-terminal.js +0 -62
  123. package/dist/core/agent-terminal.js.map +0 -1
  124. package/dist/core/agent-transcripts.d.ts +0 -29
  125. package/dist/core/agent-transcripts.js +0 -281
  126. package/dist/core/agent-transcripts.js.map +0 -1
  127. package/dist/core/app-settings.d.ts +0 -74
  128. package/dist/core/app-settings.js +0 -118
  129. package/dist/core/app-settings.js.map +0 -1
  130. package/dist/core/app-version.d.ts +0 -2
  131. package/dist/core/app-version.js +0 -16
  132. package/dist/core/app-version.js.map +0 -1
  133. package/dist/core/approval-broker.d.ts +0 -29
  134. package/dist/core/approval-broker.js +0 -48
  135. package/dist/core/approval-broker.js.map +0 -1
  136. package/dist/core/claude-settings.d.ts +0 -18
  137. package/dist/core/claude-settings.js +0 -48
  138. package/dist/core/claude-settings.js.map +0 -1
  139. package/dist/core/cloudflare-actions.d.ts +0 -90
  140. package/dist/core/cloudflare-actions.js +0 -178
  141. package/dist/core/cloudflare-actions.js.map +0 -1
  142. package/dist/core/cloudflare-auth.d.ts +0 -61
  143. package/dist/core/cloudflare-auth.js +0 -149
  144. package/dist/core/cloudflare-auth.js.map +0 -1
  145. package/dist/core/cloudflare-context.d.ts +0 -2
  146. package/dist/core/cloudflare-context.js +0 -106
  147. package/dist/core/cloudflare-context.js.map +0 -1
  148. package/dist/core/cloudflare-manager.d.ts +0 -256
  149. package/dist/core/cloudflare-manager.js +0 -409
  150. package/dist/core/cloudflare-manager.js.map +0 -1
  151. package/dist/core/cloudflare-provider.d.ts +0 -64
  152. package/dist/core/cloudflare-provider.js +0 -343
  153. package/dist/core/cloudflare-provider.js.map +0 -1
  154. package/dist/core/config-files.d.ts +0 -27
  155. package/dist/core/config-files.js +0 -154
  156. package/dist/core/config-files.js.map +0 -1
  157. package/dist/core/config-store.d.ts +0 -181
  158. package/dist/core/config-store.js +0 -1026
  159. package/dist/core/config-store.js.map +0 -1
  160. package/dist/core/context-library.d.ts +0 -53
  161. package/dist/core/context-library.js +0 -605
  162. package/dist/core/context-library.js.map +0 -1
  163. package/dist/core/context-types.d.ts +0 -83
  164. package/dist/core/context-types.js +0 -9
  165. package/dist/core/context-types.js.map +0 -1
  166. package/dist/core/daemon-client.d.ts +0 -70
  167. package/dist/core/daemon-client.js +0 -136
  168. package/dist/core/daemon-client.js.map +0 -1
  169. package/dist/core/daemon-lifecycle.d.ts +0 -59
  170. package/dist/core/daemon-lifecycle.js +0 -147
  171. package/dist/core/daemon-lifecycle.js.map +0 -1
  172. package/dist/core/db/catalog.d.ts +0 -57
  173. package/dist/core/db/catalog.js +0 -38
  174. package/dist/core/db/catalog.js.map +0 -1
  175. package/dist/core/db/data-masking.d.ts +0 -3
  176. package/dist/core/db/data-masking.js +0 -14
  177. package/dist/core/db/data-masking.js.map +0 -1
  178. package/dist/core/db/driver.d.ts +0 -151
  179. package/dist/core/db/driver.js +0 -209
  180. package/dist/core/db/driver.js.map +0 -1
  181. package/dist/core/db/export.d.ts +0 -17
  182. package/dist/core/db/export.js +0 -67
  183. package/dist/core/db/export.js.map +0 -1
  184. package/dist/core/db/mysql-driver.d.ts +0 -33
  185. package/dist/core/db/mysql-driver.js +0 -364
  186. package/dist/core/db/mysql-driver.js.map +0 -1
  187. package/dist/core/db/postgres-driver.d.ts +0 -34
  188. package/dist/core/db/postgres-driver.js +0 -430
  189. package/dist/core/db/postgres-driver.js.map +0 -1
  190. package/dist/core/db/sqlite-driver.d.ts +0 -30
  191. package/dist/core/db/sqlite-driver.js +0 -301
  192. package/dist/core/db/sqlite-driver.js.map +0 -1
  193. package/dist/core/db-peek.d.ts +0 -99
  194. package/dist/core/db-peek.js +0 -322
  195. package/dist/core/db-peek.js.map +0 -1
  196. package/dist/core/db-write.d.ts +0 -45
  197. package/dist/core/db-write.js +0 -190
  198. package/dist/core/db-write.js.map +0 -1
  199. package/dist/core/docker-inspect.d.ts +0 -34
  200. package/dist/core/docker-inspect.js +0 -108
  201. package/dist/core/docker-inspect.js.map +0 -1
  202. package/dist/core/docker-resources.d.ts +0 -28
  203. package/dist/core/docker-resources.js +0 -59
  204. package/dist/core/docker-resources.js.map +0 -1
  205. package/dist/core/docker-service-runner.d.ts +0 -21
  206. package/dist/core/docker-service-runner.js +0 -80
  207. package/dist/core/docker-service-runner.js.map +0 -1
  208. package/dist/core/docker-stats.d.ts +0 -24
  209. package/dist/core/docker-stats.js +0 -76
  210. package/dist/core/docker-stats.js.map +0 -1
  211. package/dist/core/docker.d.ts +0 -75
  212. package/dist/core/docker.js +0 -219
  213. package/dist/core/docker.js.map +0 -1
  214. package/dist/core/env-file.d.ts +0 -24
  215. package/dist/core/env-file.js +0 -123
  216. package/dist/core/env-file.js.map +0 -1
  217. package/dist/core/env-runtime.d.ts +0 -32
  218. package/dist/core/env-runtime.js +0 -42
  219. package/dist/core/env-runtime.js.map +0 -1
  220. package/dist/core/error-inbox.d.ts +0 -91
  221. package/dist/core/error-inbox.js +0 -292
  222. package/dist/core/error-inbox.js.map +0 -1
  223. package/dist/core/extensions.d.ts +0 -78
  224. package/dist/core/extensions.js +0 -41
  225. package/dist/core/extensions.js.map +0 -1
  226. package/dist/core/external-terminal.d.ts +0 -60
  227. package/dist/core/external-terminal.js +0 -429
  228. package/dist/core/external-terminal.js.map +0 -1
  229. package/dist/core/fix-loop.d.ts +0 -55
  230. package/dist/core/fix-loop.js +0 -73
  231. package/dist/core/fix-loop.js.map +0 -1
  232. package/dist/core/git-actions.d.ts +0 -69
  233. package/dist/core/git-actions.js +0 -161
  234. package/dist/core/git-actions.js.map +0 -1
  235. package/dist/core/git-graph-layout.d.ts +0 -34
  236. package/dist/core/git-graph-layout.js +0 -94
  237. package/dist/core/git-graph-layout.js.map +0 -1
  238. package/dist/core/git-identity.d.ts +0 -78
  239. package/dist/core/git-identity.js +0 -178
  240. package/dist/core/git-identity.js.map +0 -1
  241. package/dist/core/git-manager.d.ts +0 -129
  242. package/dist/core/git-manager.js +0 -509
  243. package/dist/core/git-manager.js.map +0 -1
  244. package/dist/core/git-worktrees.d.ts +0 -35
  245. package/dist/core/git-worktrees.js +0 -142
  246. package/dist/core/git-worktrees.js.map +0 -1
  247. package/dist/core/github-auth.d.ts +0 -28
  248. package/dist/core/github-auth.js +0 -134
  249. package/dist/core/github-auth.js.map +0 -1
  250. package/dist/core/github-context.d.ts +0 -12
  251. package/dist/core/github-context.js +0 -36
  252. package/dist/core/github-context.js.map +0 -1
  253. package/dist/core/github-manager.d.ts +0 -223
  254. package/dist/core/github-manager.js +0 -285
  255. package/dist/core/github-manager.js.map +0 -1
  256. package/dist/core/host-metrics.d.ts +0 -41
  257. package/dist/core/host-metrics.js +0 -93
  258. package/dist/core/host-metrics.js.map +0 -1
  259. package/dist/core/http-inspector.d.ts +0 -20
  260. package/dist/core/http-inspector.js +0 -106
  261. package/dist/core/http-inspector.js.map +0 -1
  262. package/dist/core/jetbrains-import.d.ts +0 -85
  263. package/dist/core/jetbrains-import.js +0 -599
  264. package/dist/core/jetbrains-import.js.map +0 -1
  265. package/dist/core/log-sources.d.ts +0 -21
  266. package/dist/core/log-sources.js +0 -219
  267. package/dist/core/log-sources.js.map +0 -1
  268. package/dist/core/log-store.d.ts +0 -33
  269. package/dist/core/log-store.js +0 -94
  270. package/dist/core/log-store.js.map +0 -1
  271. package/dist/core/log-volume.d.ts +0 -41
  272. package/dist/core/log-volume.js +0 -81
  273. package/dist/core/log-volume.js.map +0 -1
  274. package/dist/core/mcp-auth.d.ts +0 -27
  275. package/dist/core/mcp-auth.js +0 -90
  276. package/dist/core/mcp-auth.js.map +0 -1
  277. package/dist/core/metrics-store.d.ts +0 -74
  278. package/dist/core/metrics-store.js +0 -187
  279. package/dist/core/metrics-store.js.map +0 -1
  280. package/dist/core/one-time-skills.d.ts +0 -27
  281. package/dist/core/one-time-skills.js +0 -185
  282. package/dist/core/one-time-skills.js.map +0 -1
  283. package/dist/core/port-utils.d.ts +0 -23
  284. package/dist/core/port-utils.js +0 -83
  285. package/dist/core/port-utils.js.map +0 -1
  286. package/dist/core/process-manager.d.ts +0 -99
  287. package/dist/core/process-manager.js +0 -738
  288. package/dist/core/process-manager.js.map +0 -1
  289. package/dist/core/process-tree.d.ts +0 -17
  290. package/dist/core/process-tree.js +0 -64
  291. package/dist/core/process-tree.js.map +0 -1
  292. package/dist/core/project-overview.d.ts +0 -52
  293. package/dist/core/project-overview.js +0 -122
  294. package/dist/core/project-overview.js.map +0 -1
  295. package/dist/core/providers/credentials.d.ts +0 -93
  296. package/dist/core/providers/credentials.js +0 -88
  297. package/dist/core/providers/credentials.js.map +0 -1
  298. package/dist/core/providers/deploy-provider.d.ts +0 -327
  299. package/dist/core/providers/deploy-provider.js +0 -25
  300. package/dist/core/providers/deploy-provider.js.map +0 -1
  301. package/dist/core/providers/egress.d.ts +0 -58
  302. package/dist/core/providers/egress.js +0 -115
  303. package/dist/core/providers/egress.js.map +0 -1
  304. package/dist/core/providers/host-bridge.d.ts +0 -20
  305. package/dist/core/providers/host-bridge.js +0 -57
  306. package/dist/core/providers/host-bridge.js.map +0 -1
  307. package/dist/core/providers/host-provider.d.ts +0 -160
  308. package/dist/core/providers/host-provider.js +0 -2
  309. package/dist/core/providers/host-provider.js.map +0 -1
  310. package/dist/core/providers/oauth.d.ts +0 -97
  311. package/dist/core/providers/oauth.js +0 -238
  312. package/dist/core/providers/oauth.js.map +0 -1
  313. package/dist/core/providers/project-resolution.d.ts +0 -81
  314. package/dist/core/providers/project-resolution.js +0 -101
  315. package/dist/core/providers/project-resolution.js.map +0 -1
  316. package/dist/core/providers/registry.d.ts +0 -73
  317. package/dist/core/providers/registry.js +0 -53
  318. package/dist/core/providers/registry.js.map +0 -1
  319. package/dist/core/providers/strings.d.ts +0 -95
  320. package/dist/core/providers/strings.js +0 -59
  321. package/dist/core/providers/strings.js.map +0 -1
  322. package/dist/core/public-config.d.ts +0 -18
  323. package/dist/core/public-config.js +0 -76
  324. package/dist/core/public-config.js.map +0 -1
  325. package/dist/core/read-only-files.d.ts +0 -28
  326. package/dist/core/read-only-files.js +0 -93
  327. package/dist/core/read-only-files.js.map +0 -1
  328. package/dist/core/repo-create.d.ts +0 -11
  329. package/dist/core/repo-create.js +0 -54
  330. package/dist/core/repo-create.js.map +0 -1
  331. package/dist/core/repo-match.d.ts +0 -12
  332. package/dist/core/repo-match.js +0 -40
  333. package/dist/core/repo-match.js.map +0 -1
  334. package/dist/core/repo-onboard.d.ts +0 -297
  335. package/dist/core/repo-onboard.js +0 -667
  336. package/dist/core/repo-onboard.js.map +0 -1
  337. package/dist/core/repro-bundle.d.ts +0 -30
  338. package/dist/core/repro-bundle.js +0 -116
  339. package/dist/core/repro-bundle.js.map +0 -1
  340. package/dist/core/service-graph.d.ts +0 -50
  341. package/dist/core/service-graph.js +0 -143
  342. package/dist/core/service-graph.js.map +0 -1
  343. package/dist/core/service-health.d.ts +0 -10
  344. package/dist/core/service-health.js +0 -46
  345. package/dist/core/service-health.js.map +0 -1
  346. package/dist/core/service-log-source.d.ts +0 -9
  347. package/dist/core/service-log-source.js +0 -49
  348. package/dist/core/service-log-source.js.map +0 -1
  349. package/dist/core/service-registry.d.ts +0 -52
  350. package/dist/core/service-registry.js +0 -101
  351. package/dist/core/service-registry.js.map +0 -1
  352. package/dist/core/snapshot-manager.d.ts +0 -62
  353. package/dist/core/snapshot-manager.js +0 -219
  354. package/dist/core/snapshot-manager.js.map +0 -1
  355. package/dist/core/ssh-servers.d.ts +0 -89
  356. package/dist/core/ssh-servers.js +0 -251
  357. package/dist/core/ssh-servers.js.map +0 -1
  358. package/dist/core/ssh-service-runner.d.ts +0 -7
  359. package/dist/core/ssh-service-runner.js +0 -36
  360. package/dist/core/ssh-service-runner.js.map +0 -1
  361. package/dist/core/ssh-setup.d.ts +0 -11
  362. package/dist/core/ssh-setup.js +0 -49
  363. package/dist/core/ssh-setup.js.map +0 -1
  364. package/dist/core/system-processes.d.ts +0 -29
  365. package/dist/core/system-processes.js +0 -119
  366. package/dist/core/system-processes.js.map +0 -1
  367. package/dist/core/terminal-manager.d.ts +0 -123
  368. package/dist/core/terminal-manager.js +0 -470
  369. package/dist/core/terminal-manager.js.map +0 -1
  370. package/dist/core/terminal-session.d.ts +0 -122
  371. package/dist/core/terminal-session.js +0 -242
  372. package/dist/core/terminal-session.js.map +0 -1
  373. package/dist/core/terminal-spawn.d.ts +0 -26
  374. package/dist/core/terminal-spawn.js +0 -63
  375. package/dist/core/terminal-spawn.js.map +0 -1
  376. package/dist/core/test-runner.d.ts +0 -69
  377. package/dist/core/test-runner.js +0 -199
  378. package/dist/core/test-runner.js.map +0 -1
  379. package/dist/core/timeline-store.d.ts +0 -20
  380. package/dist/core/timeline-store.js +0 -36
  381. package/dist/core/timeline-store.js.map +0 -1
  382. package/dist/core/tool-call-store.d.ts +0 -25
  383. package/dist/core/tool-call-store.js +0 -62
  384. package/dist/core/tool-call-store.js.map +0 -1
  385. package/dist/core/types.d.ts +0 -312
  386. package/dist/core/types.js +0 -2
  387. package/dist/core/types.js.map +0 -1
  388. package/dist/core/usage-history.d.ts +0 -81
  389. package/dist/core/usage-history.js +0 -149
  390. package/dist/core/usage-history.js.map +0 -1
  391. package/dist/core/vercel-actions.d.ts +0 -71
  392. package/dist/core/vercel-actions.js +0 -109
  393. package/dist/core/vercel-actions.js.map +0 -1
  394. package/dist/core/vercel-auth.d.ts +0 -40
  395. package/dist/core/vercel-auth.js +0 -88
  396. package/dist/core/vercel-auth.js.map +0 -1
  397. package/dist/core/vercel-context.d.ts +0 -2
  398. package/dist/core/vercel-context.js +0 -97
  399. package/dist/core/vercel-context.js.map +0 -1
  400. package/dist/core/vercel-manager.d.ts +0 -266
  401. package/dist/core/vercel-manager.js +0 -389
  402. package/dist/core/vercel-manager.js.map +0 -1
  403. package/dist/core/vercel-oauth.d.ts +0 -37
  404. package/dist/core/vercel-oauth.js +0 -51
  405. package/dist/core/vercel-oauth.js.map +0 -1
  406. package/dist/core/vercel-provider.d.ts +0 -23
  407. package/dist/core/vercel-provider.js +0 -271
  408. package/dist/core/vercel-provider.js.map +0 -1
  409. package/dist/core/vultr-actions.d.ts +0 -52
  410. package/dist/core/vultr-actions.js +0 -62
  411. package/dist/core/vultr-actions.js.map +0 -1
  412. package/dist/core/vultr-auth.d.ts +0 -32
  413. package/dist/core/vultr-auth.js +0 -54
  414. package/dist/core/vultr-auth.js.map +0 -1
  415. package/dist/core/vultr-context.d.ts +0 -2
  416. package/dist/core/vultr-context.js +0 -55
  417. package/dist/core/vultr-context.js.map +0 -1
  418. package/dist/core/vultr-manager.d.ts +0 -105
  419. package/dist/core/vultr-manager.js +0 -159
  420. package/dist/core/vultr-manager.js.map +0 -1
  421. package/dist/core/vultr-provider.d.ts +0 -69
  422. package/dist/core/vultr-provider.js +0 -224
  423. package/dist/core/vultr-provider.js.map +0 -1
  424. package/dist/core/workflow-triggers.d.ts +0 -139
  425. package/dist/core/workflow-triggers.js +0 -208
  426. package/dist/core/workflow-triggers.js.map +0 -1
  427. package/dist/core/workflows.d.ts +0 -290
  428. package/dist/core/workflows.js +0 -190
  429. package/dist/core/workflows.js.map +0 -1
  430. package/dist/index.d.ts +0 -2
  431. package/dist/index.js +0 -56
  432. package/dist/index.js.map +0 -1
  433. package/dist/mcp/server.d.ts +0 -37
  434. package/dist/mcp/server.js +0 -84
  435. package/dist/mcp/server.js.map +0 -1
  436. package/dist/mcp/tools/agent-env.d.ts +0 -9
  437. package/dist/mcp/tools/agent-env.js +0 -160
  438. package/dist/mcp/tools/agent-env.js.map +0 -1
  439. package/dist/mcp/tools/agent-profiles.d.ts +0 -9
  440. package/dist/mcp/tools/agent-profiles.js +0 -197
  441. package/dist/mcp/tools/agent-profiles.js.map +0 -1
  442. package/dist/mcp/tools/agent-registry.d.ts +0 -9
  443. package/dist/mcp/tools/agent-registry.js +0 -81
  444. package/dist/mcp/tools/agent-registry.js.map +0 -1
  445. package/dist/mcp/tools/agent.d.ts +0 -4
  446. package/dist/mcp/tools/agent.js +0 -29
  447. package/dist/mcp/tools/agent.js.map +0 -1
  448. package/dist/mcp/tools/context.d.ts +0 -36
  449. package/dist/mcp/tools/context.js +0 -69
  450. package/dist/mcp/tools/context.js.map +0 -1
  451. package/dist/mcp/tools/database.d.ts +0 -9
  452. package/dist/mcp/tools/database.js +0 -166
  453. package/dist/mcp/tools/database.js.map +0 -1
  454. package/dist/mcp/tools/docs.d.ts +0 -29
  455. package/dist/mcp/tools/docs.js +0 -125
  456. package/dist/mcp/tools/docs.js.map +0 -1
  457. package/dist/mcp/tools/errors.d.ts +0 -5
  458. package/dist/mcp/tools/errors.js +0 -40
  459. package/dist/mcp/tools/errors.js.map +0 -1
  460. package/dist/mcp/tools/git.d.ts +0 -4
  461. package/dist/mcp/tools/git.js +0 -208
  462. package/dist/mcp/tools/git.js.map +0 -1
  463. package/dist/mcp/tools/github.d.ts +0 -4
  464. package/dist/mcp/tools/github.js +0 -196
  465. package/dist/mcp/tools/github.js.map +0 -1
  466. package/dist/mcp/tools/index.d.ts +0 -20
  467. package/dist/mcp/tools/index.js +0 -60
  468. package/dist/mcp/tools/index.js.map +0 -1
  469. package/dist/mcp/tools/onboard.d.ts +0 -10
  470. package/dist/mcp/tools/onboard.js +0 -30
  471. package/dist/mcp/tools/onboard.js.map +0 -1
  472. package/dist/mcp/tools/provider.d.ts +0 -16
  473. package/dist/mcp/tools/provider.js +0 -110
  474. package/dist/mcp/tools/provider.js.map +0 -1
  475. package/dist/mcp/tools/services.d.ts +0 -11
  476. package/dist/mcp/tools/services.js +0 -200
  477. package/dist/mcp/tools/services.js.map +0 -1
  478. package/dist/mcp/tools/snapshots.d.ts +0 -8
  479. package/dist/mcp/tools/snapshots.js +0 -37
  480. package/dist/mcp/tools/snapshots.js.map +0 -1
  481. package/dist/mcp/tools/terminal.d.ts +0 -4
  482. package/dist/mcp/tools/terminal.js +0 -38
  483. package/dist/mcp/tools/terminal.js.map +0 -1
  484. package/dist/tui/app.d.ts +0 -22
  485. package/dist/tui/app.js +0 -138
  486. package/dist/tui/app.js.map +0 -1
  487. package/dist/web/agent-info.d.ts +0 -82
  488. package/dist/web/agent-info.js +0 -775
  489. package/dist/web/agent-info.js.map +0 -1
  490. package/dist/web/client/assets/SymbolsNerdFontMono-Regular-DDncdh2F.ttf +0 -0
  491. package/dist/web/client/assets/code-editor-B2_SPkzS.js +0 -30
  492. package/dist/web/client/assets/context-graph-DVrWyUaG.js +0 -7
  493. package/dist/web/client/assets/core-DhEqZVGG.js +0 -1
  494. package/dist/web/client/assets/event-BK_86lmQ.js +0 -1
  495. package/dist/web/client/assets/index-BhDAhmA1.js +0 -1
  496. package/dist/web/client/assets/index-DIspyq1R.js +0 -352
  497. package/dist/web/client/assets/index-DT9Uq0bE.css +0 -1
  498. package/dist/web/client/assets/nomoreide-favicon-Ds7Tgj9p.svg +0 -24
  499. package/dist/web/client/assets/system-process-table-CWZIisGo.js +0 -1
  500. package/dist/web/client/assets/window-DlR023_X.js +0 -1
  501. package/dist/web/client/index.html +0 -44
  502. package/dist/web/dashboard.d.ts +0 -61
  503. package/dist/web/dashboard.js +0 -221
  504. package/dist/web/dashboard.js.map +0 -1
  505. package/dist/web/directories.d.ts +0 -27
  506. package/dist/web/directories.js +0 -81
  507. package/dist/web/directories.js.map +0 -1
  508. package/dist/web/http-utils.d.ts +0 -13
  509. package/dist/web/http-utils.js +0 -72
  510. package/dist/web/http-utils.js.map +0 -1
  511. package/dist/web/routes/agent-chat-routes.d.ts +0 -3
  512. package/dist/web/routes/agent-chat-routes.js +0 -186
  513. package/dist/web/routes/agent-chat-routes.js.map +0 -1
  514. package/dist/web/routes/agent-env-routes.d.ts +0 -9
  515. package/dist/web/routes/agent-env-routes.js +0 -86
  516. package/dist/web/routes/agent-env-routes.js.map +0 -1
  517. package/dist/web/routes/agent-profile-routes.d.ts +0 -8
  518. package/dist/web/routes/agent-profile-routes.js +0 -211
  519. package/dist/web/routes/agent-profile-routes.js.map +0 -1
  520. package/dist/web/routes/agent-registry-routes.d.ts +0 -2
  521. package/dist/web/routes/agent-registry-routes.js +0 -361
  522. package/dist/web/routes/agent-registry-routes.js.map +0 -1
  523. package/dist/web/routes/agent-routes.d.ts +0 -3
  524. package/dist/web/routes/agent-routes.js +0 -73
  525. package/dist/web/routes/agent-routes.js.map +0 -1
  526. package/dist/web/routes/agent-settings-routes.d.ts +0 -8
  527. package/dist/web/routes/agent-settings-routes.js +0 -67
  528. package/dist/web/routes/agent-settings-routes.js.map +0 -1
  529. package/dist/web/routes/context-library-routes.d.ts +0 -2
  530. package/dist/web/routes/context-library-routes.js +0 -139
  531. package/dist/web/routes/context-library-routes.js.map +0 -1
  532. package/dist/web/routes/context.d.ts +0 -73
  533. package/dist/web/routes/context.js +0 -48
  534. package/dist/web/routes/context.js.map +0 -1
  535. package/dist/web/routes/dashboard-routes.d.ts +0 -3
  536. package/dist/web/routes/dashboard-routes.js +0 -47
  537. package/dist/web/routes/dashboard-routes.js.map +0 -1
  538. package/dist/web/routes/database-routes.d.ts +0 -3
  539. package/dist/web/routes/database-routes.js +0 -341
  540. package/dist/web/routes/database-routes.js.map +0 -1
  541. package/dist/web/routes/docker-routes.d.ts +0 -7
  542. package/dist/web/routes/docker-routes.js +0 -122
  543. package/dist/web/routes/docker-routes.js.map +0 -1
  544. package/dist/web/routes/errors-routes.d.ts +0 -3
  545. package/dist/web/routes/errors-routes.js +0 -77
  546. package/dist/web/routes/errors-routes.js.map +0 -1
  547. package/dist/web/routes/extensions-routes.d.ts +0 -14
  548. package/dist/web/routes/extensions-routes.js +0 -21
  549. package/dist/web/routes/extensions-routes.js.map +0 -1
  550. package/dist/web/routes/git-routes.d.ts +0 -3
  551. package/dist/web/routes/git-routes.js +0 -598
  552. package/dist/web/routes/git-routes.js.map +0 -1
  553. package/dist/web/routes/github-context.d.ts +0 -11
  554. package/dist/web/routes/github-context.js +0 -34
  555. package/dist/web/routes/github-context.js.map +0 -1
  556. package/dist/web/routes/github-routes.d.ts +0 -2
  557. package/dist/web/routes/github-routes.js +0 -699
  558. package/dist/web/routes/github-routes.js.map +0 -1
  559. package/dist/web/routes/host-routes.d.ts +0 -2
  560. package/dist/web/routes/host-routes.js +0 -188
  561. package/dist/web/routes/host-routes.js.map +0 -1
  562. package/dist/web/routes/index.d.ts +0 -10
  563. package/dist/web/routes/index.js +0 -72
  564. package/dist/web/routes/index.js.map +0 -1
  565. package/dist/web/routes/jetbrains-import-routes.d.ts +0 -2
  566. package/dist/web/routes/jetbrains-import-routes.js +0 -121
  567. package/dist/web/routes/jetbrains-import-routes.js.map +0 -1
  568. package/dist/web/routes/log-sources-routes.d.ts +0 -6
  569. package/dist/web/routes/log-sources-routes.js +0 -102
  570. package/dist/web/routes/log-sources-routes.js.map +0 -1
  571. package/dist/web/routes/metrics-routes.d.ts +0 -3
  572. package/dist/web/routes/metrics-routes.js +0 -60
  573. package/dist/web/routes/metrics-routes.js.map +0 -1
  574. package/dist/web/routes/onboard-routes.d.ts +0 -9
  575. package/dist/web/routes/onboard-routes.js +0 -146
  576. package/dist/web/routes/onboard-routes.js.map +0 -1
  577. package/dist/web/routes/overview-routes.d.ts +0 -2
  578. package/dist/web/routes/overview-routes.js +0 -36
  579. package/dist/web/routes/overview-routes.js.map +0 -1
  580. package/dist/web/routes/provider-routes.d.ts +0 -2
  581. package/dist/web/routes/provider-routes.js +0 -558
  582. package/dist/web/routes/provider-routes.js.map +0 -1
  583. package/dist/web/routes/service-routes.d.ts +0 -3
  584. package/dist/web/routes/service-routes.js +0 -511
  585. package/dist/web/routes/service-routes.js.map +0 -1
  586. package/dist/web/routes/settings-routes.d.ts +0 -2
  587. package/dist/web/routes/settings-routes.js +0 -151
  588. package/dist/web/routes/settings-routes.js.map +0 -1
  589. package/dist/web/routes/shell-routes.d.ts +0 -22
  590. package/dist/web/routes/shell-routes.js +0 -75
  591. package/dist/web/routes/shell-routes.js.map +0 -1
  592. package/dist/web/routes/skills-routes.d.ts +0 -2
  593. package/dist/web/routes/skills-routes.js +0 -49
  594. package/dist/web/routes/skills-routes.js.map +0 -1
  595. package/dist/web/routes/snapshot-routes.d.ts +0 -8
  596. package/dist/web/routes/snapshot-routes.js +0 -194
  597. package/dist/web/routes/snapshot-routes.js.map +0 -1
  598. package/dist/web/routes/ssh-server-routes.d.ts +0 -10
  599. package/dist/web/routes/ssh-server-routes.js +0 -163
  600. package/dist/web/routes/ssh-server-routes.js.map +0 -1
  601. package/dist/web/routes/terminal-routes.d.ts +0 -7
  602. package/dist/web/routes/terminal-routes.js +0 -313
  603. package/dist/web/routes/terminal-routes.js.map +0 -1
  604. package/dist/web/routes/workflow-routes.d.ts +0 -8
  605. package/dist/web/routes/workflow-routes.js +0 -45
  606. package/dist/web/routes/workflow-routes.js.map +0 -1
  607. package/dist/web/routes/workflow-trigger-routes.d.ts +0 -9
  608. package/dist/web/routes/workflow-trigger-routes.js +0 -78
  609. package/dist/web/routes/workflow-trigger-routes.js.map +0 -1
  610. package/dist/web/server.d.ts +0 -31
  611. package/dist/web/server.js +0 -325
  612. package/dist/web/server.js.map +0 -1
  613. package/dist/web/service-tester.d.ts +0 -16
  614. package/dist/web/service-tester.js +0 -107
  615. package/dist/web/service-tester.js.map +0 -1
  616. package/dist/web/static-assets.d.ts +0 -3
  617. package/dist/web/static-assets.js +0 -64
  618. package/dist/web/static-assets.js.map +0 -1
  619. package/dist/web/usage-info.d.ts +0 -56
  620. package/dist/web/usage-info.js +0 -265
  621. package/dist/web/usage-info.js.map +0 -1
@@ -1,219 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { readFile } from "node:fs/promises";
3
- import { promisify } from "node:util";
4
- const execFileAsync = promisify(execFile);
5
- const DEFAULT_LINES = 500;
6
- const MAX_LINES = 5000;
7
- const MAX_BUFFER = 8 * 1024 * 1024; // 8 MB ceiling on a single read
8
- const READ_TIMEOUT_MS = 15_000;
9
- /** Heuristic: lines that look like errors render red and survive the "errors only" filter. */
10
- const ERROR_PATTERN = /\b(error|fatal|exception|panic|traceback|fail(?:ed|ure)?)\b/i;
11
- const WARN_PATTERN = /\b(warn|warning|deprecated)\b/i;
12
- export class LogSourceError extends Error {
13
- }
14
- /**
15
- * Reads a slice of a log source on demand. Never spawns a long-lived process —
16
- * each call is a one-shot read, so it works for files written out-of-band
17
- * (UAT/PROD) rather than streamed through a managed service.
18
- *
19
- * When the source has a `driver`, the query (time range, text, level) is pushed
20
- * down to the host; otherwise it tails and filters client-side.
21
- */
22
- export async function readLogSource(source, query = {}) {
23
- const count = clampLines(query.lines ?? DEFAULT_LINES);
24
- if (source.driver === "journald") {
25
- if (!source.unit)
26
- throw new LogSourceError("journald log source is missing a unit.");
27
- const argv = buildJournaldArgs(source.unit, query, count);
28
- const { stdout } = await runInvocation(argv, source.host);
29
- // journald filtered server-side already; just parse structured output.
30
- let entries = parseJournaldJson(source.name, stdout);
31
- if (query.before) {
32
- // `--reverse` returned newest-first and includes the boundary cursor;
33
- // restore chronological order and drop the (inclusive) boundary entry.
34
- entries = entries.reverse().filter((entry) => entry.cursor !== query.before);
35
- }
36
- return entries;
37
- }
38
- if (source.driver === "docker") {
39
- if (!source.container)
40
- throw new LogSourceError("docker log source is missing a container.");
41
- const argv = buildDockerArgs(source.container, query, count);
42
- const { stdout, stderr } = await runInvocation(argv, source.host);
43
- // docker logs has no native text/level filter, so apply those client-side.
44
- const entries = [
45
- ...toEntries(source.name, stdout, "stdout"),
46
- ...toEntries(source.name, stderr, "stderr"),
47
- ];
48
- return applyClientFilters(entries, query).slice(-count);
49
- }
50
- if (source.kind === "file") {
51
- if (!source.path)
52
- throw new LogSourceError("File log source is missing a path.");
53
- return applyClientFilters(await tailLocalFile(source.name, source.path, count), query);
54
- }
55
- if (source.kind === "ssh") {
56
- if (!source.host || !source.path) {
57
- throw new LogSourceError("SSH log source is missing host or path.");
58
- }
59
- const { stdout } = await execFileAsync("ssh", [source.host, "tail", "-n", String(count), source.path], { maxBuffer: MAX_BUFFER, timeout: READ_TIMEOUT_MS });
60
- return applyClientFilters(toEntries(source.name, stdout, "stdout"), query);
61
- }
62
- // command
63
- if (!source.command)
64
- throw new LogSourceError("Command log source is missing a command.");
65
- const { stdout, stderr } = await execFileAsync("sh", ["-c", source.command], {
66
- cwd: source.cwd,
67
- maxBuffer: MAX_BUFFER,
68
- timeout: READ_TIMEOUT_MS,
69
- });
70
- const entries = [
71
- ...toEntries(source.name, stdout, "stdout"),
72
- ...toEntries(source.name, stderr, "stderr"),
73
- ];
74
- return applyClientFilters(entries, query).slice(-count);
75
- }
76
- /**
77
- * Builds the journalctl argv for a unit + query. JSON output carries real
78
- * timestamps, priority, and cursors so we don't have to guess severity.
79
- */
80
- export function buildJournaldArgs(unit, query, count) {
81
- const args = ["journalctl", "-u", unit, "--no-pager", "-o", "json"];
82
- if (query.since)
83
- args.push("--since", query.since);
84
- if (query.until)
85
- args.push("--until", query.until);
86
- if (query.grep)
87
- args.push("--grep", query.grep);
88
- if (query.level === "error")
89
- args.push("-p", "err");
90
- else if (query.level === "warn")
91
- args.push("-p", "warning");
92
- if (query.before) {
93
- // Page older: start at the cursor and walk backwards `count` lines.
94
- args.push("--cursor", query.before, "--reverse", "-n", String(count));
95
- }
96
- else if (query.cursor) {
97
- // Page newer: everything after the cursor.
98
- args.push("--after-cursor", query.cursor, "-n", String(count));
99
- }
100
- else {
101
- args.push("-n", String(count));
102
- }
103
- return args;
104
- }
105
- /** Builds the `docker logs` argv for a container + query (time window only). */
106
- export function buildDockerArgs(container, query, count) {
107
- const args = ["docker", "logs", "--tail", String(count), "--timestamps"];
108
- if (query.since)
109
- args.push("--since", query.since);
110
- if (query.until)
111
- args.push("--until", query.until);
112
- args.push(container);
113
- return args;
114
- }
115
- /**
116
- * Runs an argv locally, or over ssh when `host` is set. For ssh the argv is
117
- * escaped and joined into a single remote command so values with spaces
118
- * (e.g. --since "1 hour ago") survive the remote shell.
119
- */
120
- function runInvocation(argv, host) {
121
- const [file, args] = host
122
- ? ["ssh", [host, argv.map(shellEscape).join(" ")]]
123
- : [argv[0], argv.slice(1)];
124
- return execFileAsync(file, args, { maxBuffer: MAX_BUFFER, timeout: READ_TIMEOUT_MS });
125
- }
126
- function shellEscape(value) {
127
- return `'${value.replace(/'/g, "'\\''")}'`;
128
- }
129
- /** Parses journalctl `-o json` lines into entries with real timestamps + levels. */
130
- function parseJournaldJson(service, stdout) {
131
- const entries = [];
132
- for (const line of stdout.split("\n")) {
133
- if (!line.trim())
134
- continue;
135
- let record;
136
- try {
137
- record = JSON.parse(line);
138
- }
139
- catch {
140
- continue; // tolerate the occasional non-JSON line
141
- }
142
- const text = decodeJournaldMessage(record.MESSAGE);
143
- const priority = Number(record.PRIORITY);
144
- // syslog priority: 0-3 = err/crit/alert/emerg → render as error (red).
145
- const stream = Number.isFinite(priority) && priority <= 3 ? "stderr" : "stdout";
146
- const micros = Number(record.__REALTIME_TIMESTAMP);
147
- const timestamp = Number.isFinite(micros) ? new Date(micros / 1000).toISOString() : "";
148
- const cursor = typeof record.__CURSOR === "string" ? record.__CURSOR : undefined;
149
- entries.push({ service, stream, text, timestamp, cursor });
150
- }
151
- return entries;
152
- }
153
- /** journald MESSAGE is usually a string, but a byte array for non-UTF8 payloads. */
154
- function decodeJournaldMessage(message) {
155
- if (typeof message === "string")
156
- return message;
157
- if (Array.isArray(message)) {
158
- return String.fromCharCode(...message.filter((b) => typeof b === "number"));
159
- }
160
- return message == null ? "" : String(message);
161
- }
162
- /** Applies `grep`/`level` to already-fetched entries (for non-journald sources). */
163
- export function applyClientFilters(entries, query) {
164
- let result = entries;
165
- if (query.grep) {
166
- const matcher = compileGrep(query.grep);
167
- result = result.filter((entry) => matcher.test(entry.text));
168
- }
169
- if (query.level === "error") {
170
- result = result.filter((entry) => entry.stream === "stderr" || ERROR_PATTERN.test(entry.text));
171
- }
172
- else if (query.level === "warn") {
173
- result = result.filter((entry) => entry.stream === "stderr" || ERROR_PATTERN.test(entry.text) || WARN_PATTERN.test(entry.text));
174
- }
175
- return result;
176
- }
177
- /** Treats the term as a regex, falling back to a literal match if it's invalid. */
178
- function compileGrep(term) {
179
- try {
180
- return new RegExp(term, "i");
181
- }
182
- catch {
183
- return new RegExp(term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "i");
184
- }
185
- }
186
- async function tailLocalFile(name, path, count) {
187
- let contents;
188
- try {
189
- contents = await readFile(path, "utf8");
190
- }
191
- catch (error) {
192
- const code = error.code;
193
- if (code === "ENOENT")
194
- throw new LogSourceError(`File not found: ${path}`);
195
- if (code === "EACCES")
196
- throw new LogSourceError(`Permission denied: ${path}`);
197
- throw error;
198
- }
199
- return toEntries(name, contents, "stdout").slice(-count);
200
- }
201
- function toEntries(service, output, defaultStream) {
202
- const text = output.replace(/\n$/, "");
203
- if (!text)
204
- return [];
205
- return text.split("\n").map((line) => ({
206
- service,
207
- // File/ssh tails arrive as one stream; flag error-looking lines so they
208
- // still render red and survive the "errors only" filter.
209
- stream: defaultStream === "stdout" && ERROR_PATTERN.test(line) ? "stderr" : defaultStream,
210
- text: line,
211
- timestamp: "",
212
- }));
213
- }
214
- function clampLines(lines) {
215
- if (!Number.isFinite(lines) || lines <= 0)
216
- return DEFAULT_LINES;
217
- return Math.min(Math.floor(lines), MAX_LINES);
218
- }
219
- //# sourceMappingURL=log-sources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-sources.js","sourceRoot":"","sources":["../../src/core/log-sources.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { TimelineStore } from "./timeline-store.js";
2
- import type { LogEntry, LogStream } from "./types.js";
3
- interface LogStoreOptions {
4
- baseDir?: string;
5
- maxLinesPerService?: number;
6
- timelineStore?: TimelineStore;
7
- }
8
- type LogListener = (entry: LogEntry) => void;
9
- export declare class LogStore {
10
- private readonly entriesByService;
11
- private readonly baseDir;
12
- private readonly maxLinesPerService;
13
- private readonly timelineStore?;
14
- private readonly listeners;
15
- constructor(options?: LogStoreOptions);
16
- /** Observe every appended line. Returns an unsubscribe fn. */
17
- subscribe(listener: LogListener): () => void;
18
- append(service: string, stream: LogStream, text: string): Promise<LogEntry>;
19
- private emit;
20
- read(service: string, limit?: number): LogEntry[];
21
- private appendTimelineEvent;
22
- }
23
- /**
24
- * What a line's *text* says about itself, or `null` for ordinary output.
25
- *
26
- * Exported because the timeline is no longer the only reader: `log-volume.ts`
27
- * buckets the same verdict over time so the Logs panel can colour a spike. Both
28
- * must agree — a line that raised a timeline event and a line that painted the
29
- * strip red should be the same line, which is only guaranteed while there is one
30
- * classifier rather than two that drifted.
31
- */
32
- export declare function classifyLogSeverity(text: string): "warning" | "error" | null;
33
- export {};
@@ -1,94 +0,0 @@
1
- import { appendFile, mkdir } from "node:fs/promises";
2
- import { join } from "node:path";
3
- export class LogStore {
4
- entriesByService = new Map();
5
- baseDir;
6
- maxLinesPerService;
7
- timelineStore;
8
- listeners = new Set();
9
- constructor(options = {}) {
10
- this.baseDir = options.baseDir ?? ".nomoreide/logs";
11
- this.maxLinesPerService = options.maxLinesPerService ?? 500;
12
- this.timelineStore = options.timelineStore;
13
- }
14
- /** Observe every appended line. Returns an unsubscribe fn. */
15
- subscribe(listener) {
16
- this.listeners.add(listener);
17
- return () => {
18
- this.listeners.delete(listener);
19
- };
20
- }
21
- async append(service, stream, text) {
22
- const entry = {
23
- service,
24
- stream,
25
- text,
26
- timestamp: new Date().toISOString(),
27
- };
28
- const entries = this.entriesByService.get(service) ?? [];
29
- entries.push(entry);
30
- this.entriesByService.set(service, entries.slice(-this.maxLinesPerService));
31
- await mkdir(this.baseDir, { recursive: true });
32
- await appendFile(join(this.baseDir, `${safeFileName(service)}.log`), `${JSON.stringify(entry)}\n`);
33
- await this.appendTimelineEvent(entry);
34
- this.emit(entry);
35
- return entry;
36
- }
37
- emit(entry) {
38
- for (const listener of this.listeners) {
39
- try {
40
- listener(entry);
41
- }
42
- catch {
43
- // ignore listener errors
44
- }
45
- }
46
- }
47
- read(service, limit = this.maxLinesPerService) {
48
- return (this.entriesByService.get(service) ?? []).slice(-limit);
49
- }
50
- async appendTimelineEvent(entry) {
51
- if (!this.timelineStore)
52
- return;
53
- const severity = classifyLogSeverity(entry.text);
54
- const isReadiness = isReadinessLine(entry.text);
55
- if (severity === null && !isReadiness)
56
- return;
57
- await this.timelineStore.append({
58
- kind: "service.log",
59
- service: entry.service,
60
- severity: severity ?? "info",
61
- title: `${entry.service} ${entry.stream}`,
62
- detail: entry.text,
63
- timestamp: entry.timestamp,
64
- });
65
- }
66
- }
67
- function safeFileName(input) {
68
- return input.replace(/[^a-zA-Z0-9._-]/g, "_");
69
- }
70
- function isReadinessLine(text) {
71
- return /\b(ready|listening|local:|server started)\b/i.test(text);
72
- }
73
- /**
74
- * What a line's *text* says about itself, or `null` for ordinary output.
75
- *
76
- * Exported because the timeline is no longer the only reader: `log-volume.ts`
77
- * buckets the same verdict over time so the Logs panel can colour a spike. Both
78
- * must agree — a line that raised a timeline event and a line that painted the
79
- * strip red should be the same line, which is only guaranteed while there is one
80
- * classifier rather than two that drifted.
81
- */
82
- export function classifyLogSeverity(text) {
83
- if (/\b(panic|fatal|traceback|uncaught|unhandled|EADDRINUSE|ECONNREFUSED|segmentation fault)\b/i.test(text)) {
84
- return "error";
85
- }
86
- if (/\berror\b/i.test(text) && !/0 errors?\b/i.test(text)) {
87
- return "error";
88
- }
89
- if (/\b(warn|warning|deprecated)\b/i.test(text)) {
90
- return "warning";
91
- }
92
- return null;
93
- }
94
- //# sourceMappingURL=log-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-store.js","sourceRoot":"","sources":["../../src/core/log-store.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import type { MetricSample } from "./metrics-store.js";
2
- import type { LogEntry } from "./types.js";
3
- /**
4
- * How much a service said, and how badly, over the range its graph already
5
- * covers.
6
- *
7
- * The CPU and memory panes gave the log tail an axis; this gives that axis the
8
- * one series it was still missing — the output itself. A CPU spike says *when*
9
- * something happened, but not whether the service noticed; a burst of stderr in
10
- * the same minute says it did, and points at the lines directly below.
11
- *
12
- * **Bucketed here rather than in the browser, because the browser cannot.** The
13
- * dashboard payload carries forty lines per service (`PAYLOAD_TAIL`), which is a
14
- * few seconds of a service mid-burst — far too short an axis to bucket. The ring
15
- * buffer this reads holds 500, and lives in the daemon. Sending 500 lines per
16
- * service per poll to let the client count them would be the same payload
17
- * mistake at ten times the size; sending sixty triples of small integers is not.
18
- */
19
- export interface LogVolumeBucket {
20
- /** Start of the bucket, ms epoch — the same clock `MetricSample.t` is on. */
21
- t: number;
22
- /** Lines with nothing to declare. Carries the *volume* half of the signal. */
23
- info: number;
24
- warning: number;
25
- error: number;
26
- }
27
- /**
28
- * Count each severity into evenly spaced buckets over the metric series' range.
29
- *
30
- * The range comes from `samples` rather than from the log lines themselves, and
31
- * that is the whole point: the strip is only honest if it is the *same* axis as
32
- * the panes above it. Deriving it from the lines would give the strip its own
33
- * ends, and two charts stacked with different x-ranges is a worse lie than no
34
- * chart at all — a spike would sit above a moment it did not happen at.
35
- *
36
- * Lines outside the range are dropped rather than clamped. A service that
37
- * emitted 400 lines at boot and has been quiet since is *quiet* in the window
38
- * being shown, and piling that history onto the first bucket would invent a
39
- * spike at a moment nothing happened.
40
- */
41
- export declare function bucketLogVolume(entries: LogEntry[], samples: MetricSample[], bucketCount?: number): LogVolumeBucket[];
@@ -1,81 +0,0 @@
1
- import { classifyLogSeverity } from "./log-store.js";
2
- /**
3
- * Sixty across the window, whatever the window is.
4
- *
5
- * A count, not a duration, because the range is whatever the metrics buffer
6
- * happens to hold: half an hour for a service that has been up all morning, two
7
- * minutes for one that just booted. Bucketing by a fixed *duration* would give
8
- * the young service four bars and the old one a thousand; bucketing by a fixed
9
- * count keeps the strip the same shape and lets the bar width mean "a sixtieth
10
- * of what you are looking at" in both.
11
- *
12
- * Sixty is also about the widest a panel can draw and still leave a bar with a
13
- * gap on each side of it at the narrow end of the layout.
14
- */
15
- const BUCKET_COUNT = 60;
16
- /**
17
- * Count each severity into evenly spaced buckets over the metric series' range.
18
- *
19
- * The range comes from `samples` rather than from the log lines themselves, and
20
- * that is the whole point: the strip is only honest if it is the *same* axis as
21
- * the panes above it. Deriving it from the lines would give the strip its own
22
- * ends, and two charts stacked with different x-ranges is a worse lie than no
23
- * chart at all — a spike would sit above a moment it did not happen at.
24
- *
25
- * Lines outside the range are dropped rather than clamped. A service that
26
- * emitted 400 lines at boot and has been quiet since is *quiet* in the window
27
- * being shown, and piling that history onto the first bucket would invent a
28
- * spike at a moment nothing happened.
29
- */
30
- export function bucketLogVolume(entries, samples, bucketCount = BUCKET_COUNT) {
31
- if (samples.length < 2)
32
- return [];
33
- const first = samples[0].t;
34
- const last = samples[samples.length - 1].t;
35
- const span = last - first;
36
- if (span <= 0)
37
- return [];
38
- const width = span / bucketCount;
39
- const buckets = Array.from({ length: bucketCount }, (_, index) => ({
40
- t: first + index * width,
41
- info: 0,
42
- warning: 0,
43
- error: 0,
44
- }));
45
- for (const entry of entries) {
46
- const at = Date.parse(entry.timestamp);
47
- if (Number.isNaN(at) || at < first || at > last)
48
- continue;
49
- /* The final bucket is closed at both ends so the newest line — which is
50
- exactly `last` whenever a sample and a line share a millisecond — lands in
51
- the strip rather than one index past it. */
52
- const index = Math.min(bucketCount - 1, Math.floor((at - first) / width));
53
- buckets[index][severityOf(entry)] += 1;
54
- }
55
- return buckets;
56
- }
57
- /**
58
- * Which band a line counts toward — decided by what it *says*, never by which
59
- * pipe it came down.
60
- *
61
- * The first version of this read `stream === "stderr"` first, on the reasoning
62
- * that the panel already counts a `STDERR` stat and paints those lines red in
63
- * the tail. Ten seconds of a real service settled it: of jobjourney-frontend's
64
- * ten stderr lines, **none** were errors. They were `[TypeScript] Found 0
65
- * errors.`, a Browserslist freshness notice, and six Tailwind lines beginning
66
- * with the literal word `warn`. A rule that paints "found 0 errors" red is not
67
- * strict, it is broken, and it costs the amber band the exact case amber is for.
68
- *
69
- * A red that fires on every dev server is a red nobody looks at, so the pipe is
70
- * not consulted at all. Nothing is lost: a service that dies on stderr dies
71
- * saying `panic`, `fatal`, `Traceback`, `uncaught`, `EADDRINUSE` or `error`, and
72
- * every one of those is what `classifyLogSeverity` is looking for.
73
- *
74
- * This does not contradict the `STDERR` counter beside it — that counter names
75
- * what it counts, and so do these bands. "10 stderr lines, 0 errors" is two true
76
- * statements about the same ten lines.
77
- */
78
- function severityOf(entry) {
79
- return classifyLogSeverity(entry.text) ?? "info";
80
- }
81
- //# sourceMappingURL=log-volume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-volume.js","sourceRoot":"","sources":["../../src/core/log-volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA8BrD;;;;;;;;;;;;GAYG;AACH,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAmB,EACnB,OAAuB,EACvB,WAAW,GAAG,YAAY;IAE1B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC1B,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzB,MAAM,KAAK,GAAG,IAAI,GAAG,WAAW,CAAC;IACjC,MAAM,OAAO,GAAsB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK;QACxB,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;KACT,CAAC,CAAC,CAAC;IAEJ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI;YAAE,SAAS;QAC1D;;sDAE8C;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,UAAU,CAAC,KAAe;IACjC,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;AACnD,CAAC"}
@@ -1,27 +0,0 @@
1
- export type AgentName = "claude-code" | "codex";
2
- /**
3
- * Auth/connection state for a single MCP server, normalized across agents:
4
- * - `connected` — reachable and authenticated (or no auth needed and healthy).
5
- * - `needs-auth` — an OAuth/login step is required before the server works.
6
- * - `no-auth` — a local (stdio) server that has no auth concept.
7
- * - `failed` — the server errored / wouldn't start on a fresh health check.
8
- * - `unknown` — pending approval or an unparseable status line.
9
- *
10
- * Note: this reflects a *fresh* `mcp list` health check (a cold re-spawn), which
11
- * can differ from a long-lived `claude` session's live `/mcp` view.
12
- */
13
- export type McpAuthState = "connected" | "needs-auth" | "no-auth" | "failed" | "unknown";
14
- export interface McpAuthStatus {
15
- name: string;
16
- state: McpAuthState;
17
- }
18
- /**
19
- * Ask the agent's own CLI for the live auth/connection state of every MCP
20
- * server. We shell out to `claude mcp list` / `codex mcp list --json` because
21
- * the CLI is the authoritative source — it health-checks each server, covers
22
- * stdio and remote transports uniformly, and stays correct as tokens expire.
23
- * Returns `[]` if the CLI is missing or errors, so the UI degrades gracefully.
24
- */
25
- export declare function getMcpAuthStatuses(agent: AgentName): Promise<McpAuthStatus[]>;
26
- /** Each server is one line: `<name>: <url-or-command> - <status>`. Exported for tests. */
27
- export declare function parseClaudeList(stdout: string): McpAuthStatus[];
@@ -1,90 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- const execFileAsync = promisify(execFile);
4
- /** Health checks are slow (a few seconds); cache briefly so repeated tab views are cheap. */
5
- const CACHE_TTL_MS = 15_000;
6
- const cache = new Map();
7
- /**
8
- * Ask the agent's own CLI for the live auth/connection state of every MCP
9
- * server. We shell out to `claude mcp list` / `codex mcp list --json` because
10
- * the CLI is the authoritative source — it health-checks each server, covers
11
- * stdio and remote transports uniformly, and stays correct as tokens expire.
12
- * Returns `[]` if the CLI is missing or errors, so the UI degrades gracefully.
13
- */
14
- export async function getMcpAuthStatuses(agent) {
15
- const cached = cache.get(agent);
16
- if (cached && Date.now() - cached.at < CACHE_TTL_MS)
17
- return cached.statuses;
18
- const statuses = agent === "codex" ? await codexStatuses() : await claudeStatuses();
19
- cache.set(agent, { at: Date.now(), statuses });
20
- return statuses;
21
- }
22
- async function claudeStatuses() {
23
- try {
24
- const { stdout } = await execFileAsync("claude", ["mcp", "list"], {
25
- timeout: 30_000,
26
- maxBuffer: 1 << 20,
27
- });
28
- return parseClaudeList(stdout);
29
- }
30
- catch (err) {
31
- // `claude mcp list` can exit non-zero while still printing a usable table.
32
- const stdout = err.stdout;
33
- return stdout ? parseClaudeList(stdout) : [];
34
- }
35
- }
36
- /** Each server is one line: `<name>: <url-or-command> - <status>`. Exported for tests. */
37
- export function parseClaudeList(stdout) {
38
- const out = [];
39
- for (const line of stdout.split(/\r?\n/)) {
40
- const trimmed = line.trim();
41
- const sep = trimmed.lastIndexOf(" - ");
42
- const colon = trimmed.indexOf(": ");
43
- if (sep < 0 || colon < 0 || colon > sep)
44
- continue;
45
- const name = trimmed.slice(0, colon).trim();
46
- const status = trimmed.slice(sep + 3).trim();
47
- if (name)
48
- out.push({ name, state: claudeState(status) });
49
- }
50
- return out;
51
- }
52
- function claudeState(status) {
53
- const s = status.toLowerCase();
54
- if (s.includes("needs authentication"))
55
- return "needs-auth";
56
- if (s.includes("connected"))
57
- return "connected";
58
- if (s.includes("failed") || s.includes("error"))
59
- return "failed";
60
- return "unknown";
61
- }
62
- async function codexStatuses() {
63
- try {
64
- const { stdout } = await execFileAsync("codex", ["mcp", "list", "--json"], {
65
- timeout: 30_000,
66
- maxBuffer: 1 << 20,
67
- });
68
- const parsed = JSON.parse(stdout);
69
- if (!Array.isArray(parsed))
70
- return [];
71
- return parsed
72
- .filter((entry) => typeof entry.name === "string")
73
- .map((entry) => ({ name: entry.name, state: codexState(entry.auth_status) }));
74
- }
75
- catch {
76
- return [];
77
- }
78
- }
79
- function codexState(auth) {
80
- const s = (auth ?? "").toLowerCase();
81
- if (!s || s === "unsupported" || s === "not_required" || s === "none")
82
- return "no-auth";
83
- // Order matters: "not_logged_in" contains "logged_in", so test the negatives first.
84
- if (/not_logged_in|logged_out|needs|unauth|expired|required/.test(s))
85
- return "needs-auth";
86
- if (/logged_in|authenticated|authorized|^ok$|connected/.test(s))
87
- return "connected";
88
- return "unknown";
89
- }
90
- //# sourceMappingURL=mcp-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-auth.js","sourceRoot":"","sources":["../../src/core/mcp-auth.ts"],"names":[],"mappings":"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"}