nomoreide 0.2.0 → 0.3.2

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 (624) hide show
  1. package/README.md +12 -9
  2. package/bin/nomoreide.js +82 -0
  3. package/package.json +24 -132
  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 -359
  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 -258
  149. package/dist/core/cloudflare-manager.js +0 -414
  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 -348
  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 -84
  167. package/dist/core/daemon-client.js +0 -156
  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 -230
  254. package/dist/core/github-manager.js +0 -324
  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/api-base.d.ts +0 -24
  296. package/dist/core/providers/api-base.js +0 -44
  297. package/dist/core/providers/api-base.js.map +0 -1
  298. package/dist/core/providers/credentials.d.ts +0 -93
  299. package/dist/core/providers/credentials.js +0 -88
  300. package/dist/core/providers/credentials.js.map +0 -1
  301. package/dist/core/providers/deploy-provider.d.ts +0 -327
  302. package/dist/core/providers/deploy-provider.js +0 -25
  303. package/dist/core/providers/deploy-provider.js.map +0 -1
  304. package/dist/core/providers/egress.d.ts +0 -58
  305. package/dist/core/providers/egress.js +0 -124
  306. package/dist/core/providers/egress.js.map +0 -1
  307. package/dist/core/providers/host-bridge.d.ts +0 -20
  308. package/dist/core/providers/host-bridge.js +0 -57
  309. package/dist/core/providers/host-bridge.js.map +0 -1
  310. package/dist/core/providers/host-provider.d.ts +0 -160
  311. package/dist/core/providers/host-provider.js +0 -2
  312. package/dist/core/providers/host-provider.js.map +0 -1
  313. package/dist/core/providers/oauth.d.ts +0 -97
  314. package/dist/core/providers/oauth.js +0 -238
  315. package/dist/core/providers/oauth.js.map +0 -1
  316. package/dist/core/providers/project-resolution.d.ts +0 -81
  317. package/dist/core/providers/project-resolution.js +0 -101
  318. package/dist/core/providers/project-resolution.js.map +0 -1
  319. package/dist/core/providers/registry.d.ts +0 -73
  320. package/dist/core/providers/registry.js +0 -53
  321. package/dist/core/providers/registry.js.map +0 -1
  322. package/dist/core/providers/strings.d.ts +0 -95
  323. package/dist/core/providers/strings.js +0 -59
  324. package/dist/core/providers/strings.js.map +0 -1
  325. package/dist/core/public-config.d.ts +0 -18
  326. package/dist/core/public-config.js +0 -76
  327. package/dist/core/public-config.js.map +0 -1
  328. package/dist/core/read-only-files.d.ts +0 -28
  329. package/dist/core/read-only-files.js +0 -93
  330. package/dist/core/read-only-files.js.map +0 -1
  331. package/dist/core/repo-create.d.ts +0 -11
  332. package/dist/core/repo-create.js +0 -54
  333. package/dist/core/repo-create.js.map +0 -1
  334. package/dist/core/repo-match.d.ts +0 -12
  335. package/dist/core/repo-match.js +0 -40
  336. package/dist/core/repo-match.js.map +0 -1
  337. package/dist/core/repo-onboard.d.ts +0 -297
  338. package/dist/core/repo-onboard.js +0 -667
  339. package/dist/core/repo-onboard.js.map +0 -1
  340. package/dist/core/repro-bundle.d.ts +0 -30
  341. package/dist/core/repro-bundle.js +0 -116
  342. package/dist/core/repro-bundle.js.map +0 -1
  343. package/dist/core/service-graph.d.ts +0 -50
  344. package/dist/core/service-graph.js +0 -143
  345. package/dist/core/service-graph.js.map +0 -1
  346. package/dist/core/service-health.d.ts +0 -10
  347. package/dist/core/service-health.js +0 -46
  348. package/dist/core/service-health.js.map +0 -1
  349. package/dist/core/service-log-source.d.ts +0 -9
  350. package/dist/core/service-log-source.js +0 -49
  351. package/dist/core/service-log-source.js.map +0 -1
  352. package/dist/core/service-registry.d.ts +0 -52
  353. package/dist/core/service-registry.js +0 -101
  354. package/dist/core/service-registry.js.map +0 -1
  355. package/dist/core/snapshot-manager.d.ts +0 -62
  356. package/dist/core/snapshot-manager.js +0 -219
  357. package/dist/core/snapshot-manager.js.map +0 -1
  358. package/dist/core/ssh-servers.d.ts +0 -89
  359. package/dist/core/ssh-servers.js +0 -251
  360. package/dist/core/ssh-servers.js.map +0 -1
  361. package/dist/core/ssh-service-runner.d.ts +0 -7
  362. package/dist/core/ssh-service-runner.js +0 -36
  363. package/dist/core/ssh-service-runner.js.map +0 -1
  364. package/dist/core/ssh-setup.d.ts +0 -11
  365. package/dist/core/ssh-setup.js +0 -49
  366. package/dist/core/ssh-setup.js.map +0 -1
  367. package/dist/core/system-processes.d.ts +0 -29
  368. package/dist/core/system-processes.js +0 -119
  369. package/dist/core/system-processes.js.map +0 -1
  370. package/dist/core/terminal-manager.d.ts +0 -123
  371. package/dist/core/terminal-manager.js +0 -470
  372. package/dist/core/terminal-manager.js.map +0 -1
  373. package/dist/core/terminal-session.d.ts +0 -122
  374. package/dist/core/terminal-session.js +0 -242
  375. package/dist/core/terminal-session.js.map +0 -1
  376. package/dist/core/terminal-spawn.d.ts +0 -26
  377. package/dist/core/terminal-spawn.js +0 -63
  378. package/dist/core/terminal-spawn.js.map +0 -1
  379. package/dist/core/test-runner.d.ts +0 -69
  380. package/dist/core/test-runner.js +0 -199
  381. package/dist/core/test-runner.js.map +0 -1
  382. package/dist/core/timeline-store.d.ts +0 -20
  383. package/dist/core/timeline-store.js +0 -36
  384. package/dist/core/timeline-store.js.map +0 -1
  385. package/dist/core/tool-call-store.d.ts +0 -25
  386. package/dist/core/tool-call-store.js +0 -62
  387. package/dist/core/tool-call-store.js.map +0 -1
  388. package/dist/core/types.d.ts +0 -312
  389. package/dist/core/types.js +0 -2
  390. package/dist/core/types.js.map +0 -1
  391. package/dist/core/usage-history.d.ts +0 -81
  392. package/dist/core/usage-history.js +0 -149
  393. package/dist/core/usage-history.js.map +0 -1
  394. package/dist/core/vercel-actions.d.ts +0 -71
  395. package/dist/core/vercel-actions.js +0 -109
  396. package/dist/core/vercel-actions.js.map +0 -1
  397. package/dist/core/vercel-auth.d.ts +0 -40
  398. package/dist/core/vercel-auth.js +0 -88
  399. package/dist/core/vercel-auth.js.map +0 -1
  400. package/dist/core/vercel-context.d.ts +0 -2
  401. package/dist/core/vercel-context.js +0 -97
  402. package/dist/core/vercel-context.js.map +0 -1
  403. package/dist/core/vercel-manager.d.ts +0 -268
  404. package/dist/core/vercel-manager.js +0 -401
  405. package/dist/core/vercel-manager.js.map +0 -1
  406. package/dist/core/vercel-oauth.d.ts +0 -37
  407. package/dist/core/vercel-oauth.js +0 -57
  408. package/dist/core/vercel-oauth.js.map +0 -1
  409. package/dist/core/vercel-provider.d.ts +0 -23
  410. package/dist/core/vercel-provider.js +0 -276
  411. package/dist/core/vercel-provider.js.map +0 -1
  412. package/dist/core/vultr-actions.d.ts +0 -52
  413. package/dist/core/vultr-actions.js +0 -62
  414. package/dist/core/vultr-actions.js.map +0 -1
  415. package/dist/core/vultr-auth.d.ts +0 -32
  416. package/dist/core/vultr-auth.js +0 -54
  417. package/dist/core/vultr-auth.js.map +0 -1
  418. package/dist/core/vultr-context.d.ts +0 -2
  419. package/dist/core/vultr-context.js +0 -55
  420. package/dist/core/vultr-context.js.map +0 -1
  421. package/dist/core/vultr-manager.d.ts +0 -113
  422. package/dist/core/vultr-manager.js +0 -170
  423. package/dist/core/vultr-manager.js.map +0 -1
  424. package/dist/core/vultr-provider.d.ts +0 -69
  425. package/dist/core/vultr-provider.js +0 -226
  426. package/dist/core/vultr-provider.js.map +0 -1
  427. package/dist/core/workflow-triggers.d.ts +0 -139
  428. package/dist/core/workflow-triggers.js +0 -208
  429. package/dist/core/workflow-triggers.js.map +0 -1
  430. package/dist/core/workflows.d.ts +0 -290
  431. package/dist/core/workflows.js +0 -190
  432. package/dist/core/workflows.js.map +0 -1
  433. package/dist/index.d.ts +0 -2
  434. package/dist/index.js +0 -66
  435. package/dist/index.js.map +0 -1
  436. package/dist/mcp/server.d.ts +0 -37
  437. package/dist/mcp/server.js +0 -84
  438. package/dist/mcp/server.js.map +0 -1
  439. package/dist/mcp/tools/agent-env.d.ts +0 -9
  440. package/dist/mcp/tools/agent-env.js +0 -160
  441. package/dist/mcp/tools/agent-env.js.map +0 -1
  442. package/dist/mcp/tools/agent-profiles.d.ts +0 -9
  443. package/dist/mcp/tools/agent-profiles.js +0 -197
  444. package/dist/mcp/tools/agent-profiles.js.map +0 -1
  445. package/dist/mcp/tools/agent-registry.d.ts +0 -9
  446. package/dist/mcp/tools/agent-registry.js +0 -81
  447. package/dist/mcp/tools/agent-registry.js.map +0 -1
  448. package/dist/mcp/tools/agent.d.ts +0 -4
  449. package/dist/mcp/tools/agent.js +0 -29
  450. package/dist/mcp/tools/agent.js.map +0 -1
  451. package/dist/mcp/tools/context.d.ts +0 -36
  452. package/dist/mcp/tools/context.js +0 -69
  453. package/dist/mcp/tools/context.js.map +0 -1
  454. package/dist/mcp/tools/database.d.ts +0 -9
  455. package/dist/mcp/tools/database.js +0 -166
  456. package/dist/mcp/tools/database.js.map +0 -1
  457. package/dist/mcp/tools/docs.d.ts +0 -29
  458. package/dist/mcp/tools/docs.js +0 -134
  459. package/dist/mcp/tools/docs.js.map +0 -1
  460. package/dist/mcp/tools/errors.d.ts +0 -12
  461. package/dist/mcp/tools/errors.js +0 -47
  462. package/dist/mcp/tools/errors.js.map +0 -1
  463. package/dist/mcp/tools/git.d.ts +0 -4
  464. package/dist/mcp/tools/git.js +0 -209
  465. package/dist/mcp/tools/git.js.map +0 -1
  466. package/dist/mcp/tools/github.d.ts +0 -4
  467. package/dist/mcp/tools/github.js +0 -196
  468. package/dist/mcp/tools/github.js.map +0 -1
  469. package/dist/mcp/tools/index.d.ts +0 -36
  470. package/dist/mcp/tools/index.js +0 -61
  471. package/dist/mcp/tools/index.js.map +0 -1
  472. package/dist/mcp/tools/onboard.d.ts +0 -10
  473. package/dist/mcp/tools/onboard.js +0 -30
  474. package/dist/mcp/tools/onboard.js.map +0 -1
  475. package/dist/mcp/tools/provider.d.ts +0 -16
  476. package/dist/mcp/tools/provider.js +0 -110
  477. package/dist/mcp/tools/provider.js.map +0 -1
  478. package/dist/mcp/tools/services.d.ts +0 -13
  479. package/dist/mcp/tools/services.js +0 -204
  480. package/dist/mcp/tools/services.js.map +0 -1
  481. package/dist/mcp/tools/snapshots.d.ts +0 -8
  482. package/dist/mcp/tools/snapshots.js +0 -37
  483. package/dist/mcp/tools/snapshots.js.map +0 -1
  484. package/dist/mcp/tools/terminal.d.ts +0 -4
  485. package/dist/mcp/tools/terminal.js +0 -38
  486. package/dist/mcp/tools/terminal.js.map +0 -1
  487. package/dist/tui/app.d.ts +0 -22
  488. package/dist/tui/app.js +0 -138
  489. package/dist/tui/app.js.map +0 -1
  490. package/dist/web/agent-info.d.ts +0 -82
  491. package/dist/web/agent-info.js +0 -775
  492. package/dist/web/agent-info.js.map +0 -1
  493. package/dist/web/client/assets/SymbolsNerdFontMono-Regular-DDncdh2F.ttf +0 -0
  494. package/dist/web/client/assets/code-editor-TE0sjFGO.js +0 -30
  495. package/dist/web/client/assets/context-graph-B9MnBpp6.js +0 -7
  496. package/dist/web/client/assets/core-DhEqZVGG.js +0 -1
  497. package/dist/web/client/assets/event-BK_86lmQ.js +0 -1
  498. package/dist/web/client/assets/index-BhDAhmA1.js +0 -1
  499. package/dist/web/client/assets/index-CSo__8A6.css +0 -1
  500. package/dist/web/client/assets/index-DAJvBqn9.js +0 -352
  501. package/dist/web/client/assets/nomoreide-favicon-Ds7Tgj9p.svg +0 -24
  502. package/dist/web/client/assets/system-process-table-DetWu0Gj.js +0 -1
  503. package/dist/web/client/assets/window-DlR023_X.js +0 -1
  504. package/dist/web/client/index.html +0 -44
  505. package/dist/web/dashboard.d.ts +0 -61
  506. package/dist/web/dashboard.js +0 -221
  507. package/dist/web/dashboard.js.map +0 -1
  508. package/dist/web/directories.d.ts +0 -27
  509. package/dist/web/directories.js +0 -81
  510. package/dist/web/directories.js.map +0 -1
  511. package/dist/web/http-utils.d.ts +0 -13
  512. package/dist/web/http-utils.js +0 -72
  513. package/dist/web/http-utils.js.map +0 -1
  514. package/dist/web/routes/agent-chat-routes.d.ts +0 -3
  515. package/dist/web/routes/agent-chat-routes.js +0 -186
  516. package/dist/web/routes/agent-chat-routes.js.map +0 -1
  517. package/dist/web/routes/agent-env-routes.d.ts +0 -9
  518. package/dist/web/routes/agent-env-routes.js +0 -86
  519. package/dist/web/routes/agent-env-routes.js.map +0 -1
  520. package/dist/web/routes/agent-profile-routes.d.ts +0 -8
  521. package/dist/web/routes/agent-profile-routes.js +0 -211
  522. package/dist/web/routes/agent-profile-routes.js.map +0 -1
  523. package/dist/web/routes/agent-registry-routes.d.ts +0 -2
  524. package/dist/web/routes/agent-registry-routes.js +0 -375
  525. package/dist/web/routes/agent-registry-routes.js.map +0 -1
  526. package/dist/web/routes/agent-routes.d.ts +0 -3
  527. package/dist/web/routes/agent-routes.js +0 -73
  528. package/dist/web/routes/agent-routes.js.map +0 -1
  529. package/dist/web/routes/agent-settings-routes.d.ts +0 -8
  530. package/dist/web/routes/agent-settings-routes.js +0 -67
  531. package/dist/web/routes/agent-settings-routes.js.map +0 -1
  532. package/dist/web/routes/context-library-routes.d.ts +0 -2
  533. package/dist/web/routes/context-library-routes.js +0 -139
  534. package/dist/web/routes/context-library-routes.js.map +0 -1
  535. package/dist/web/routes/context.d.ts +0 -73
  536. package/dist/web/routes/context.js +0 -48
  537. package/dist/web/routes/context.js.map +0 -1
  538. package/dist/web/routes/dashboard-routes.d.ts +0 -3
  539. package/dist/web/routes/dashboard-routes.js +0 -47
  540. package/dist/web/routes/dashboard-routes.js.map +0 -1
  541. package/dist/web/routes/database-routes.d.ts +0 -3
  542. package/dist/web/routes/database-routes.js +0 -341
  543. package/dist/web/routes/database-routes.js.map +0 -1
  544. package/dist/web/routes/docker-routes.d.ts +0 -7
  545. package/dist/web/routes/docker-routes.js +0 -122
  546. package/dist/web/routes/docker-routes.js.map +0 -1
  547. package/dist/web/routes/errors-routes.d.ts +0 -3
  548. package/dist/web/routes/errors-routes.js +0 -77
  549. package/dist/web/routes/errors-routes.js.map +0 -1
  550. package/dist/web/routes/extensions-routes.d.ts +0 -14
  551. package/dist/web/routes/extensions-routes.js +0 -21
  552. package/dist/web/routes/extensions-routes.js.map +0 -1
  553. package/dist/web/routes/git-routes.d.ts +0 -3
  554. package/dist/web/routes/git-routes.js +0 -598
  555. package/dist/web/routes/git-routes.js.map +0 -1
  556. package/dist/web/routes/github-context.d.ts +0 -11
  557. package/dist/web/routes/github-context.js +0 -34
  558. package/dist/web/routes/github-context.js.map +0 -1
  559. package/dist/web/routes/github-routes.d.ts +0 -2
  560. package/dist/web/routes/github-routes.js +0 -699
  561. package/dist/web/routes/github-routes.js.map +0 -1
  562. package/dist/web/routes/host-routes.d.ts +0 -2
  563. package/dist/web/routes/host-routes.js +0 -188
  564. package/dist/web/routes/host-routes.js.map +0 -1
  565. package/dist/web/routes/index.d.ts +0 -10
  566. package/dist/web/routes/index.js +0 -72
  567. package/dist/web/routes/index.js.map +0 -1
  568. package/dist/web/routes/jetbrains-import-routes.d.ts +0 -2
  569. package/dist/web/routes/jetbrains-import-routes.js +0 -121
  570. package/dist/web/routes/jetbrains-import-routes.js.map +0 -1
  571. package/dist/web/routes/log-sources-routes.d.ts +0 -6
  572. package/dist/web/routes/log-sources-routes.js +0 -102
  573. package/dist/web/routes/log-sources-routes.js.map +0 -1
  574. package/dist/web/routes/metrics-routes.d.ts +0 -3
  575. package/dist/web/routes/metrics-routes.js +0 -60
  576. package/dist/web/routes/metrics-routes.js.map +0 -1
  577. package/dist/web/routes/onboard-routes.d.ts +0 -9
  578. package/dist/web/routes/onboard-routes.js +0 -146
  579. package/dist/web/routes/onboard-routes.js.map +0 -1
  580. package/dist/web/routes/overview-routes.d.ts +0 -2
  581. package/dist/web/routes/overview-routes.js +0 -36
  582. package/dist/web/routes/overview-routes.js.map +0 -1
  583. package/dist/web/routes/provider-routes.d.ts +0 -2
  584. package/dist/web/routes/provider-routes.js +0 -558
  585. package/dist/web/routes/provider-routes.js.map +0 -1
  586. package/dist/web/routes/service-routes.d.ts +0 -3
  587. package/dist/web/routes/service-routes.js +0 -511
  588. package/dist/web/routes/service-routes.js.map +0 -1
  589. package/dist/web/routes/settings-routes.d.ts +0 -2
  590. package/dist/web/routes/settings-routes.js +0 -151
  591. package/dist/web/routes/settings-routes.js.map +0 -1
  592. package/dist/web/routes/shell-routes.d.ts +0 -22
  593. package/dist/web/routes/shell-routes.js +0 -75
  594. package/dist/web/routes/shell-routes.js.map +0 -1
  595. package/dist/web/routes/skills-routes.d.ts +0 -2
  596. package/dist/web/routes/skills-routes.js +0 -49
  597. package/dist/web/routes/skills-routes.js.map +0 -1
  598. package/dist/web/routes/snapshot-routes.d.ts +0 -8
  599. package/dist/web/routes/snapshot-routes.js +0 -194
  600. package/dist/web/routes/snapshot-routes.js.map +0 -1
  601. package/dist/web/routes/ssh-server-routes.d.ts +0 -10
  602. package/dist/web/routes/ssh-server-routes.js +0 -163
  603. package/dist/web/routes/ssh-server-routes.js.map +0 -1
  604. package/dist/web/routes/terminal-routes.d.ts +0 -7
  605. package/dist/web/routes/terminal-routes.js +0 -313
  606. package/dist/web/routes/terminal-routes.js.map +0 -1
  607. package/dist/web/routes/workflow-routes.d.ts +0 -8
  608. package/dist/web/routes/workflow-routes.js +0 -45
  609. package/dist/web/routes/workflow-routes.js.map +0 -1
  610. package/dist/web/routes/workflow-trigger-routes.d.ts +0 -9
  611. package/dist/web/routes/workflow-trigger-routes.js +0 -78
  612. package/dist/web/routes/workflow-trigger-routes.js.map +0 -1
  613. package/dist/web/server.d.ts +0 -31
  614. package/dist/web/server.js +0 -325
  615. package/dist/web/server.js.map +0 -1
  616. package/dist/web/service-tester.d.ts +0 -16
  617. package/dist/web/service-tester.js +0 -107
  618. package/dist/web/service-tester.js.map +0 -1
  619. package/dist/web/static-assets.d.ts +0 -9
  620. package/dist/web/static-assets.js +0 -77
  621. package/dist/web/static-assets.js.map +0 -1
  622. package/dist/web/usage-info.d.ts +0 -56
  623. package/dist/web/usage-info.js +0 -265
  624. package/dist/web/usage-info.js.map +0 -1
@@ -1,494 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { mkdtempSync, writeFileSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- /**
6
- * In-dashboard AI agent backed by the real local agent CLI. NoMoreIDE selects
7
- * Claude Code or Codex from the same startup-agent detection used by /agent,
8
- * then drives that CLI in a machine-readable headless mode rather than calling
9
- * a vendor API directly.
10
- *
11
- * Conversation continuity uses the selected CLI's own session store: the first
12
- * turn returns a session id, which the client sends back as `resumeSessionId` on
13
- * the next turn. The server holds no transcript state.
14
- *
15
- * Tool permissions: unless NOMOREIDE_AGENT_PERMISSION_MODE=bypassPermissions,
16
- * the agent runs in `default` mode with a PreToolUse hook on mutating tools.
17
- * The hook blocks and asks the dock (via ApprovalBroker) for an Allow/Deny.
18
- */
19
- const CLAUDE_BIN = process.env.NOMOREIDE_CLAUDE_BIN || "claude";
20
- const CODEX_BIN = process.env.NOMOREIDE_CODEX_BIN || "codex";
21
- /** "bypassPermissions" runs fully autonomous (no approval prompts). */
22
- const PERMISSION_MODE = process.env.NOMOREIDE_AGENT_PERMISSION_MODE || "default";
23
- const CODEX_APPROVAL_POLICY = process.env.NOMOREIDE_CODEX_APPROVAL_POLICY || "never";
24
- /** Tools that trigger an approval prompt (mutating / side-effecting ones). */
25
- const GATED_TOOLS = "Bash|Edit|Write|MultiEdit|NotebookEdit";
26
- /** Truncate tool-result previews shown in the dock. */
27
- const PREVIEW_LIMIT = 400;
28
- export const CLAUDE_PROVIDER = {
29
- id: "claude",
30
- label: "Claude Code",
31
- commandName: "claude",
32
- bin: CLAUDE_BIN,
33
- installHint: "Install Claude Code (and run `claude login`) so it is on NoMoreIDE's PATH, then reload.",
34
- intro: "This is real Claude Code, running in your workspace with full tools - e.g. \"restart the api and tail its logs\", \"what changed in git and why?\", \"fix the failing test\".",
35
- };
36
- export const CODEX_PROVIDER = {
37
- id: "codex",
38
- label: "Codex",
39
- commandName: "codex",
40
- bin: CODEX_BIN,
41
- installHint: "Install Codex CLI (and run `codex login`) so it is on NoMoreIDE's PATH, then reload.",
42
- intro: "This is real Codex CLI, running in your workspace with full tools - e.g. \"restart the api and tail its logs\", \"what changed in git and why?\", \"fix the failing test\".",
43
- };
44
- const availabilityProbes = new Map();
45
- /** Every selectable chat provider, in display order. */
46
- export const CHAT_PROVIDERS = [CLAUDE_PROVIDER, CODEX_PROVIDER];
47
- /** Look up a provider by its id; undefined for unknown ids. */
48
- export function providerById(id) {
49
- return CHAT_PROVIDERS.find((provider) => provider.id === id);
50
- }
51
- /**
52
- * Pick the in-dock chat provider. An explicit user choice (`preferredId`, saved
53
- * in config) wins; otherwise fall back to the startup-agent detection that the
54
- * MCP-launched flow relies on; otherwise Claude.
55
- */
56
- export function resolveChatProvider(detectedName, preferredId) {
57
- return (providerById(preferredId) ??
58
- (detectedName === "codex" ? CODEX_PROVIDER : CLAUDE_PROVIDER));
59
- }
60
- export function publicProviderInfo(provider) {
61
- return {
62
- id: provider.id,
63
- label: provider.label,
64
- commandName: provider.commandName,
65
- installHint: provider.installHint,
66
- intro: provider.intro,
67
- };
68
- }
69
- /** True when the selected agent CLI is installed and runnable. Memoized. */
70
- export function isAgentAvailable(provider = CLAUDE_PROVIDER) {
71
- const existing = availabilityProbes.get(provider.id);
72
- if (existing)
73
- return existing;
74
- const probe = new Promise((resolve) => {
75
- const child = spawn(provider.bin, ["--version"], { stdio: "ignore" });
76
- child.on("error", () => resolve(false));
77
- child.on("close", (code) => resolve(code === 0));
78
- }).catch(() => false);
79
- availabilityProbes.set(provider.id, probe);
80
- return probe;
81
- }
82
- /** Whether tool calls are gated behind dock approval (vs. fully autonomous). */
83
- export function approvalsEnabled(provider = CLAUDE_PROVIDER) {
84
- return provider.id === "claude" && PERMISSION_MODE !== "bypassPermissions";
85
- }
86
- export function buildAgentInvocation(provider, message, resumeSessionId, gating) {
87
- if (provider.id === "codex") {
88
- const args = ["-a", CODEX_APPROVAL_POLICY, "exec"];
89
- if (resumeSessionId) {
90
- args.push("resume", "--json", "--skip-git-repo-check", resumeSessionId, message);
91
- }
92
- else {
93
- args.push("--json", "--skip-git-repo-check", message);
94
- }
95
- return { bin: provider.bin, args };
96
- }
97
- const args = [
98
- "--print",
99
- "--output-format",
100
- "stream-json",
101
- "--verbose",
102
- "--include-partial-messages",
103
- "--permission-mode",
104
- gating ? "default" : PERMISSION_MODE,
105
- ];
106
- if (gating) {
107
- args.push("--settings", approvalSettings());
108
- }
109
- if (resumeSessionId)
110
- args.push("--resume", resumeSessionId);
111
- args.push(message);
112
- return { bin: provider.bin, args };
113
- }
114
- export class AgentRuntime {
115
- deps;
116
- constructor(deps) {
117
- this.deps = deps;
118
- }
119
- /**
120
- * Run one user turn. Streams events until the CLI exits. `resumeSessionId`
121
- * continues a prior Claude Code session; omit it to start a fresh one.
122
- */
123
- async run(message, resumeSessionId, onEvent, options = {}) {
124
- const { signal, approval, autoApprove } = options;
125
- const provider = this.deps.provider ?? CLAUDE_PROVIDER;
126
- const gating = Boolean(approval) && approvalsEnabled(provider);
127
- const invocation = buildAgentInvocation(provider, message, resumeSessionId, gating);
128
- const env = gating && approval
129
- ? {
130
- ...process.env,
131
- NOMOREIDE_APPROVAL_URL: approval.url,
132
- // Scoped auto-approve for a consented workflow step (footguns still prompt).
133
- ...(autoApprove ? { NOMOREIDE_AUTO_APPROVE: "1" } : {}),
134
- }
135
- : process.env;
136
- await new Promise((resolve) => {
137
- const child = spawn(invocation.bin, invocation.args, {
138
- cwd: this.deps.cwd,
139
- env,
140
- stdio: ["ignore", "pipe", "pipe"],
141
- });
142
- const toolNames = new Map();
143
- let stdout = "";
144
- let stderr = "";
145
- let finished = false;
146
- let openedSession;
147
- const finish = () => {
148
- if (finished)
149
- return;
150
- finished = true;
151
- if (openedSession)
152
- approval?.broker.closeRun(openedSession);
153
- resolve();
154
- };
155
- // Bridge the broker's approval requests onto the SSE stream the moment
156
- // we learn this run's session id.
157
- const onLine = (line) => {
158
- const sessionId = provider.id === "codex"
159
- ? handleCodexLine(line, toolNames, onEvent)
160
- : handleClaudeLine(line, toolNames, onEvent);
161
- if (sessionId && gating && approval && !openedSession) {
162
- openedSession = sessionId;
163
- approval.broker.openRun(sessionId, (request) => onEvent({
164
- type: "approval_request",
165
- requestId: request.requestId,
166
- name: request.name,
167
- input: request.input,
168
- }));
169
- }
170
- };
171
- if (signal) {
172
- if (signal.aborted)
173
- child.kill();
174
- else
175
- signal.addEventListener("abort", () => child.kill(), { once: true });
176
- }
177
- child.on("error", (error) => {
178
- onEvent({
179
- type: "error",
180
- message: error.code === "ENOENT"
181
- ? `Could not run "${provider.bin}". ${provider.installHint}`
182
- : error.message,
183
- });
184
- finish();
185
- });
186
- child.stdout.setEncoding("utf8");
187
- child.stdout.on("data", (chunk) => {
188
- stdout += chunk;
189
- let newline = stdout.indexOf("\n");
190
- while (newline !== -1) {
191
- const line = stdout.slice(0, newline).trim();
192
- stdout = stdout.slice(newline + 1);
193
- if (line)
194
- onLine(line);
195
- newline = stdout.indexOf("\n");
196
- }
197
- });
198
- child.stderr.setEncoding("utf8");
199
- child.stderr.on("data", (chunk) => {
200
- stderr += chunk;
201
- });
202
- child.on("close", (code) => {
203
- if (signal?.aborted)
204
- return finish();
205
- const leftover = stdout.trim();
206
- if (leftover)
207
- onLine(leftover);
208
- if (code !== 0) {
209
- onEvent({
210
- type: "error",
211
- message: stderr.trim() || `${provider.label} exited with code ${code}.`,
212
- });
213
- }
214
- finish();
215
- });
216
- });
217
- }
218
- }
219
- /**
220
- * Parse one NDJSON line from Claude Code's stream-json output, emitting the
221
- * relevant dock events. Returns the session id when this line is the init event.
222
- */
223
- export function handleClaudeLine(line, toolNames, onEvent) {
224
- let obj;
225
- try {
226
- obj = JSON.parse(line);
227
- }
228
- catch {
229
- return undefined;
230
- }
231
- switch (obj.type) {
232
- case "system": {
233
- if (obj.subtype === "init" && typeof obj.session_id === "string") {
234
- onEvent({ type: "session", sessionId: obj.session_id });
235
- return obj.session_id;
236
- }
237
- return undefined;
238
- }
239
- case "stream_event": {
240
- // Token-level text deltas (from --include-partial-messages).
241
- const event = obj.event;
242
- if (event?.type === "content_block_delta" && event.delta?.type === "text_delta") {
243
- onEvent({ type: "text", text: event.delta.text ?? "" });
244
- }
245
- return undefined;
246
- }
247
- case "assistant": {
248
- for (const block of messageContent(obj.message)) {
249
- if (block.type === "tool_use" && typeof block.id === "string") {
250
- toolNames.set(block.id, String(block.name));
251
- onEvent({ type: "tool_use", id: block.id, name: String(block.name), input: block.input });
252
- }
253
- }
254
- return undefined;
255
- }
256
- case "user": {
257
- for (const block of messageContent(obj.message)) {
258
- if (block.type === "tool_result" && typeof block.tool_use_id === "string") {
259
- onEvent({
260
- type: "tool_result",
261
- id: block.tool_use_id,
262
- name: toolNames.get(block.tool_use_id) ?? "tool",
263
- preview: previewOf(block.content),
264
- isError: Boolean(block.is_error),
265
- });
266
- }
267
- }
268
- return undefined;
269
- }
270
- case "result": {
271
- onEvent({ type: "done", stopReason: typeof obj.subtype === "string" ? obj.subtype : null });
272
- return undefined;
273
- }
274
- default:
275
- return undefined;
276
- }
277
- }
278
- /** Parse one JSONL event from `codex exec --json`. */
279
- export function handleCodexLine(line, toolNames, onEvent) {
280
- let obj;
281
- try {
282
- obj = JSON.parse(line);
283
- }
284
- catch {
285
- return undefined;
286
- }
287
- if (obj.type === "thread.started" && typeof obj.thread_id === "string") {
288
- onEvent({ type: "session", sessionId: obj.thread_id });
289
- return obj.thread_id;
290
- }
291
- if (obj.type === "item.started" || obj.type === "item.completed") {
292
- const item = obj.item;
293
- if (!item || typeof item.id !== "string" || typeof item.type !== "string") {
294
- return undefined;
295
- }
296
- if (item.type === "command_execution") {
297
- const name = "command";
298
- toolNames.set(item.id, name);
299
- const command = typeof item.command === "string" ? item.command : "";
300
- if (obj.type === "item.started") {
301
- onEvent({ type: "tool_use", id: item.id, name, input: { command } });
302
- return undefined;
303
- }
304
- onEvent({
305
- type: "tool_result",
306
- id: item.id,
307
- name,
308
- preview: previewOf(item.aggregated_output),
309
- isError: typeof item.exit_code === "number"
310
- ? item.exit_code !== 0
311
- : item.status === "failed",
312
- });
313
- return undefined;
314
- }
315
- if (item.type === "agent_message" && obj.type === "item.completed") {
316
- const text = typeof item.text === "string" ? item.text : "";
317
- if (text)
318
- onEvent({ type: "text", text });
319
- return undefined;
320
- }
321
- }
322
- if (obj.type === "turn.completed") {
323
- onEvent({ type: "done", stopReason: null });
324
- }
325
- return undefined;
326
- }
327
- function messageContent(message) {
328
- const content = message?.content;
329
- return Array.isArray(content) ? content : [];
330
- }
331
- function previewOf(content) {
332
- let text;
333
- if (typeof content === "string") {
334
- text = content;
335
- }
336
- else if (Array.isArray(content)) {
337
- text = content
338
- .map((block) => typeof block === "string"
339
- ? block
340
- : typeof block.text === "string"
341
- ? block.text
342
- : "")
343
- .join(" ");
344
- }
345
- else {
346
- text = "";
347
- }
348
- text = text.trim();
349
- return text.length > PREVIEW_LIMIT ? `${text.slice(0, PREVIEW_LIMIT)}…` : text;
350
- }
351
- /**
352
- * Irreversible / history-rewriting shell that must keep a human in the loop even
353
- * inside an auto-approved workflow step. Exported so it's unit-testable; the
354
- * approval hook runs this exact function (serialized via `toString()` into
355
- * {@link HOOK_SOURCE}). Unknown shapes are treated as risky.
356
- */
357
- export function isDangerousBashCommand(cmd) {
358
- if (typeof cmd !== "string")
359
- return true;
360
- const c = cmd.trim();
361
- return (/\brm\s+-[a-zA-Z]*f/.test(c) ||
362
- /\bgit\b.*\breset\b.*--hard/.test(c) ||
363
- /\bgit\b.*\bclean\b.*-[a-zA-Z]*f/.test(c) ||
364
- /\bgit\b.*\bpush\b.*(--force|-f(\s|$))/.test(c) ||
365
- /\bgit\b.*\bbranch\b.*\s-D\b/.test(c) ||
366
- />/.test(c));
367
- }
368
- let hookPath;
369
- let settingsJson;
370
- /** Inline `--settings` JSON installing the PreToolUse approval hook. Cached. */
371
- function approvalSettings() {
372
- if (!settingsJson) {
373
- const command = `node ${JSON.stringify(ensureHookScript())}`;
374
- settingsJson = JSON.stringify({
375
- // NoMoreIDE's own MCP tools are read-safe / scoped to registered services,
376
- // so auto-allow them. Claude Code has no wildcard for the tool portion of
377
- // an MCP rule; the bare server prefix `mcp__nomoreide` allows every tool
378
- // from that server. Everything else (Bash/Edit/Write/Read/...) is left to
379
- // the PreToolUse hook below — onboarding leans on the structured profile
380
- // from `nomoreide_onboard_repo` instead of crawling the repo, so the agent
381
- // shouldn't need Read/Glob/Grep at all.
382
- permissions: { allow: ["mcp__nomoreide"] },
383
- hooks: {
384
- PreToolUse: [{ matcher: GATED_TOOLS, hooks: [{ type: "command", command }] }],
385
- },
386
- });
387
- }
388
- return settingsJson;
389
- }
390
- /**
391
- * Write the approval-hook script to a temp file once, runnable by plain `node`
392
- * in both dev (tsx) and built modes. It POSTs the pending tool call to the web
393
- * server and blocks until the user's decision returns, then prints the
394
- * PreToolUse permission decision Claude Code expects.
395
- */
396
- function ensureHookScript() {
397
- if (hookPath)
398
- return hookPath;
399
- const dir = mkdtempSync(join(tmpdir(), "nomoreide-agent-"));
400
- hookPath = join(dir, "approval-hook.cjs");
401
- writeFileSync(hookPath, HOOK_SOURCE, "utf8");
402
- return hookPath;
403
- }
404
- const HOOK_SOURCE = `"use strict";
405
- const http = require("http");
406
- const { randomUUID } = require("crypto");
407
- let body = "";
408
- process.stdin.on("data", (d) => (body += d));
409
- process.stdin.on("end", () => {
410
- let input = {};
411
- try { input = JSON.parse(body); } catch {}
412
- const cmd = input.tool_input && input.tool_input.command;
413
- // Auto-allow routine, low-risk Bash (diagnostics + dependency installs) so
414
- // onboarding doesn't prompt for every step. Anything with shell chaining,
415
- // redirection, or command substitution — or outside the safe verb list —
416
- // still falls through to the dock for an explicit Allow/Deny.
417
- if (input.tool_name === "Bash" && isSafeBash(cmd)) {
418
- return decide("allow", "Auto-allowed routine command.");
419
- }
420
- // Scoped auto-approve for a consented workflow step: let the agent edit files
421
- // and run non-footgun shell without a prompt for each call. Irreversible
422
- // footguns (rm -rf, git reset --hard / clean -f / force-push / branch -D, and
423
- // output redirection) still fall through to the dock for an explicit Allow.
424
- if (process.env.NOMOREIDE_AUTO_APPROVE === "1") {
425
- if (input.tool_name !== "Bash") {
426
- return decide("allow", "Auto-approved within workflow.");
427
- }
428
- if (!isDangerousBashCommand(cmd)) {
429
- return decide("allow", "Auto-approved within workflow.");
430
- }
431
- }
432
- const url = process.env.NOMOREIDE_APPROVAL_URL;
433
- if (!url) return decide("deny", "Approval channel not configured.");
434
- let target;
435
- try { target = new URL(url); } catch { return decide("deny", "Bad approval URL."); }
436
- const payload = JSON.stringify({
437
- sessionId: input.session_id,
438
- requestId: randomUUID(),
439
- toolName: input.tool_name,
440
- toolInput: input.tool_input,
441
- });
442
- const req = http.request(
443
- {
444
- hostname: target.hostname,
445
- port: target.port,
446
- path: target.pathname,
447
- method: "POST",
448
- headers: { "content-type": "application/json", "content-length": Buffer.byteLength(payload) },
449
- },
450
- (res) => {
451
- let data = "";
452
- res.setEncoding("utf8");
453
- res.on("data", (c) => (data += c));
454
- res.on("end", () => {
455
- try {
456
- const r = JSON.parse(data);
457
- decide(r.decision === "allow" ? "allow" : "deny", r.reason);
458
- } catch {
459
- decide("deny", "No decision returned.");
460
- }
461
- });
462
- },
463
- );
464
- req.on("error", () => decide("deny", "Approval request failed to reach NoMoreIDE."));
465
- req.setTimeout(10 * 60 * 1000, () => {
466
- req.destroy();
467
- decide("deny", "Approval timed out.");
468
- });
469
- req.write(payload);
470
- req.end();
471
- });
472
- function isSafeBash(cmd) {
473
- if (typeof cmd !== "string") return false;
474
- const c = cmd.trim();
475
- // Reject anything that chains, redirects, or substitutes — keep it one simple
476
- // command so a safe prefix can't smuggle a dangerous tail (e.g. "echo x; rm -rf").
477
- if (/[;&|<>$()\\\`]/.test(c)) return false;
478
- return /^(echo|pwd|whoami|true|date|ls|node|npm (install|ci|--version|-v)|pnpm (install|--version|-v)|yarn( install| --version| -v)?|bun (install|--version|-v)|pip3? install)\\b/.test(c);
479
- }
480
- ${isDangerousBashCommand.toString()}
481
- function decide(permissionDecision, reason) {
482
- process.stdout.write(
483
- JSON.stringify({
484
- hookSpecificOutput: {
485
- hookEventName: "PreToolUse",
486
- permissionDecision,
487
- permissionDecisionReason: reason || "",
488
- },
489
- }),
490
- );
491
- process.exit(0);
492
- }
493
- `;
494
- //# sourceMappingURL=agent-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { type ConfigStore } from "./config-store.js";
2
- import { SnapshotManager } from "./snapshot-manager.js";
3
- export interface AgentSession {
4
- id: string;
5
- /** Repository the session snapshot was taken in. */
6
- repoPath: string;
7
- /** Snapshot of the working tree before the session's first tool call. */
8
- snapshotSha?: string;
9
- snapshotRef?: string;
10
- startedAt: string;
11
- lastToolAt: string;
12
- toolCount: number;
13
- }
14
- /**
15
- * By default, sessions are persisted to `~/.nomoreide/agent-sessions.json`
16
- * (not kept only in memory) because the MCP server and the web UI may run in
17
- * different processes — the UI must be able to list change-sets it didn't
18
- * record.
19
- */
20
- export declare class AgentSessionStore {
21
- private readonly filePath;
22
- constructor(filePath: string);
23
- list(): Promise<AgentSession[]>;
24
- get(id: string): Promise<AgentSession | undefined>;
25
- save(session: AgentSession): Promise<void>;
26
- }
27
- export interface AgentSessionTracker {
28
- /**
29
- * Called before every recorded tool call. Starts a session (taking a
30
- * working-tree snapshot) when none is active or the previous one went
31
- * idle; otherwise bumps the active session. Never throws — a failed
32
- * snapshot (e.g. not a git repo) must not block the tool call.
33
- */
34
- beforeToolCall(): Promise<string>;
35
- }
36
- export interface AgentSessionTrackerOptions {
37
- store: AgentSessionStore;
38
- configStore: ConfigStore;
39
- cwd?: string;
40
- /** Gap after which the next tool call starts a new session. */
41
- idleMs?: number;
42
- /** Injectable for tests. */
43
- snapshotManagerFor?: (repoPath: string) => Pick<SnapshotManager, "snapshot" | "prune">;
44
- now?: () => number;
45
- }
46
- export declare function createAgentSessionTracker(options: AgentSessionTrackerOptions): AgentSessionTracker;
@@ -1,109 +0,0 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import { dirname } from "node:path";
3
- import { isGitWorktree } from "./config-store.js";
4
- import { SnapshotManager } from "./snapshot-manager.js";
5
- const MAX_SESSIONS = 50;
6
- /**
7
- * By default, sessions are persisted to `~/.nomoreide/agent-sessions.json`
8
- * (not kept only in memory) because the MCP server and the web UI may run in
9
- * different processes — the UI must be able to list change-sets it didn't
10
- * record.
11
- */
12
- export class AgentSessionStore {
13
- filePath;
14
- constructor(filePath) {
15
- this.filePath = filePath;
16
- }
17
- async list() {
18
- try {
19
- const parsed = JSON.parse(await readFile(this.filePath, "utf8"));
20
- return Array.isArray(parsed) ? parsed : [];
21
- }
22
- catch {
23
- return [];
24
- }
25
- }
26
- async get(id) {
27
- return (await this.list()).find((session) => session.id === id);
28
- }
29
- async save(session) {
30
- const sessions = (await this.list()).filter((existing) => existing.id !== session.id);
31
- sessions.unshift(session);
32
- sessions.splice(MAX_SESSIONS);
33
- await mkdir(dirname(this.filePath), { recursive: true });
34
- await writeFile(this.filePath, `${JSON.stringify(sessions, null, 2)}\n`, "utf8");
35
- }
36
- }
37
- const DEFAULT_IDLE_MS = 30 * 60 * 1000;
38
- const SNAPSHOT_KEEP = 50;
39
- export function createAgentSessionTracker(options) {
40
- const cwd = options.cwd ?? process.cwd();
41
- const idleMs = options.idleMs ?? DEFAULT_IDLE_MS;
42
- const now = options.now ?? Date.now;
43
- const snapshotManagerFor = options.snapshotManagerFor ?? ((repoPath) => new SnapshotManager(repoPath));
44
- let active = null;
45
- let pending = null;
46
- async function beginSession() {
47
- const startedAt = new Date(now()).toISOString();
48
- const repoPath = await selectedRepoPath(options.configStore, cwd);
49
- const session = {
50
- id: `s-${now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
51
- repoPath,
52
- startedAt,
53
- lastToolAt: startedAt,
54
- toolCount: 0,
55
- };
56
- try {
57
- const manager = snapshotManagerFor(repoPath);
58
- const snapshot = await manager.snapshot(`agent session ${session.id}`);
59
- session.snapshotSha = snapshot.sha;
60
- session.snapshotRef = snapshot.ref;
61
- await manager.prune(SNAPSHOT_KEEP);
62
- }
63
- catch {
64
- // Not a git repo (or git unavailable) — track the session without a snapshot.
65
- }
66
- return session;
67
- }
68
- return {
69
- async beforeToolCall() {
70
- // Serialize: parallel tool calls at session start must share one snapshot.
71
- const previous = pending ?? Promise.resolve("");
72
- const next = previous
73
- .catch(() => "")
74
- .then(async () => {
75
- const timestamp = now();
76
- if (!active || timestamp - Date.parse(active.lastToolAt) > idleMs) {
77
- active = await beginSession();
78
- }
79
- active.lastToolAt = new Date(timestamp).toISOString();
80
- active.toolCount += 1;
81
- try {
82
- await options.store.save(active);
83
- }
84
- catch {
85
- // Persistence is best-effort; never block the tool call.
86
- }
87
- return active.id;
88
- });
89
- pending = next;
90
- return next;
91
- },
92
- };
93
- }
94
- async function selectedRepoPath(configStore, fallbackCwd) {
95
- try {
96
- const config = await configStore.load();
97
- const repos = config.gitRepositories ?? [];
98
- const selected = repos.find((repo) => repo.name === config.selectedGitRepository) ?? repos[0];
99
- if (selected?.activeWorktreePath &&
100
- await isGitWorktree(selected.activeWorktreePath)) {
101
- return selected.activeWorktreePath;
102
- }
103
- return selected?.path ?? fallbackCwd;
104
- }
105
- catch {
106
- return fallbackCwd;
107
- }
108
- }
109
- //# sourceMappingURL=agent-sessions.js.map