@nervekit/orchestrator 0.1.0 → 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 (546) hide show
  1. package/dist/{server.d.ts → app/orchestrator-state.d.ts} +11 -17
  2. package/dist/app/orchestrator-state.d.ts.map +1 -0
  3. package/dist/app/orchestrator-state.js +105 -0
  4. package/dist/app/orchestrator-state.js.map +1 -0
  5. package/dist/app/server.d.ts +5 -0
  6. package/dist/app/server.d.ts.map +1 -0
  7. package/dist/{server.js → app/server.js} +6 -112
  8. package/dist/app/server.js.map +1 -0
  9. package/dist/app/version.d.ts.map +1 -0
  10. package/dist/app/version.js.map +1 -0
  11. package/dist/domains/agents/agent-lifecycle.service.d.ts +1 -1
  12. package/dist/domains/agents/agent-lifecycle.service.d.ts.map +1 -1
  13. package/dist/domains/agents/prompting/index.d.ts +4 -0
  14. package/dist/domains/agents/prompting/index.d.ts.map +1 -0
  15. package/dist/domains/agents/prompting/index.js +4 -0
  16. package/dist/domains/agents/prompting/index.js.map +1 -0
  17. package/dist/domains/agents/prompting/nerve-system-prompt.d.ts.map +1 -0
  18. package/dist/{nerve-system-prompt.js → domains/agents/prompting/nerve-system-prompt.js} +4 -2
  19. package/dist/domains/agents/prompting/nerve-system-prompt.js.map +1 -0
  20. package/dist/domains/agents/prompting/prompt-text.d.ts.map +1 -0
  21. package/dist/domains/agents/prompting/prompt-text.js.map +1 -0
  22. package/dist/domains/agents/prompting/resource-loader.d.ts.map +1 -0
  23. package/dist/{resource-loader.js → domains/agents/prompting/resource-loader.js} +1 -1
  24. package/dist/domains/agents/prompting/resource-loader.js.map +1 -0
  25. package/dist/domains/agents/run/agent-run-session.d.ts.map +1 -1
  26. package/dist/domains/agents/run/agent-run-session.js +28 -3
  27. package/dist/domains/agents/run/agent-run-session.js.map +1 -1
  28. package/dist/domains/agents/run/agent-runner.d.ts +18 -7
  29. package/dist/domains/agents/run/agent-runner.d.ts.map +1 -1
  30. package/dist/domains/agents/run/agent-runner.js +30 -83
  31. package/dist/domains/agents/run/agent-runner.js.map +1 -1
  32. package/dist/domains/agents/run/auto-compaction-runner.d.ts +19 -0
  33. package/dist/domains/agents/run/auto-compaction-runner.d.ts.map +1 -0
  34. package/dist/domains/agents/run/auto-compaction-runner.js +105 -0
  35. package/dist/domains/agents/run/auto-compaction-runner.js.map +1 -0
  36. package/dist/domains/agents/run/explore-helpers.d.ts.map +1 -1
  37. package/dist/domains/agents/run/explore-helpers.js +73 -16
  38. package/dist/domains/agents/run/explore-helpers.js.map +1 -1
  39. package/dist/domains/agents/run/inline-command-results.d.ts +8 -0
  40. package/dist/domains/agents/run/inline-command-results.d.ts.map +1 -0
  41. package/dist/domains/agents/run/inline-command-results.js +108 -0
  42. package/dist/domains/agents/run/inline-command-results.js.map +1 -0
  43. package/dist/domains/agents/run/inline-command-runner.d.ts +19 -0
  44. package/dist/domains/agents/run/inline-command-runner.d.ts.map +1 -0
  45. package/dist/domains/agents/run/inline-command-runner.js +168 -0
  46. package/dist/domains/agents/run/inline-command-runner.js.map +1 -0
  47. package/dist/domains/agents/run/interrupted-run-recovery.d.ts +1 -1
  48. package/dist/domains/agents/run/interrupted-run-recovery.d.ts.map +1 -1
  49. package/dist/domains/agents/run/subagent-runner.d.ts +4 -2
  50. package/dist/domains/agents/run/subagent-runner.d.ts.map +1 -1
  51. package/dist/domains/agents/run/subagent-runner.js +13 -7
  52. package/dist/domains/agents/run/subagent-runner.js.map +1 -1
  53. package/dist/domains/agents/run/system-prompt-builder.d.ts +1 -1
  54. package/dist/domains/agents/run/system-prompt-builder.d.ts.map +1 -1
  55. package/dist/domains/agents/run/system-prompt-builder.js +2 -2
  56. package/dist/domains/agents/run/system-prompt-builder.js.map +1 -1
  57. package/dist/domains/agents/run/tool-draft-progress.d.ts +4 -0
  58. package/dist/domains/agents/run/tool-draft-progress.d.ts.map +1 -1
  59. package/dist/domains/agents/run/tool-draft-progress.js +114 -2
  60. package/dist/domains/agents/run/tool-draft-progress.js.map +1 -1
  61. package/dist/{auth.d.ts → domains/auth/auth-manager.d.ts} +2 -2
  62. package/dist/domains/auth/auth-manager.d.ts.map +1 -0
  63. package/dist/{auth.js → domains/auth/auth-manager.js} +1 -1
  64. package/dist/domains/auth/auth-manager.js.map +1 -0
  65. package/dist/{credential-crypto.d.ts → domains/auth/credential-key.service.d.ts} +1 -1
  66. package/dist/domains/auth/credential-key.service.d.ts.map +1 -0
  67. package/dist/{credential-crypto.js → domains/auth/credential-key.service.js} +2 -2
  68. package/dist/domains/auth/credential-key.service.js.map +1 -0
  69. package/dist/domains/auth/index.d.ts +4 -0
  70. package/dist/domains/auth/index.d.ts.map +1 -0
  71. package/dist/domains/auth/index.js +4 -0
  72. package/dist/domains/auth/index.js.map +1 -0
  73. package/dist/{oauth-flow.d.ts → domains/auth/oauth-flow-manager.d.ts} +3 -3
  74. package/dist/domains/auth/oauth-flow-manager.d.ts.map +1 -0
  75. package/dist/{oauth-flow.js → domains/auth/oauth-flow-manager.js} +2 -2
  76. package/dist/domains/auth/oauth-flow-manager.js.map +1 -0
  77. package/dist/domains/conversations/conversation-lifecycle.service.d.ts +1 -1
  78. package/dist/domains/conversations/conversation-lifecycle.service.d.ts.map +1 -1
  79. package/dist/domains/conversations/conversation-lifecycle.service.js +21 -4
  80. package/dist/domains/conversations/conversation-lifecycle.service.js.map +1 -1
  81. package/dist/domains/conversations/conversation-query.service.d.ts +2 -2
  82. package/dist/domains/conversations/conversation-query.service.d.ts.map +1 -1
  83. package/dist/domains/conversations/conversation-query.service.js +6 -2
  84. package/dist/domains/conversations/conversation-query.service.js.map +1 -1
  85. package/dist/domains/conversations/conversation-runtime.d.ts +2 -0
  86. package/dist/domains/conversations/conversation-runtime.d.ts.map +1 -1
  87. package/dist/domains/conversations/conversation-runtime.js +36 -2
  88. package/dist/domains/conversations/conversation-runtime.js.map +1 -1
  89. package/dist/domains/conversations/operations/import-service.d.ts.map +1 -1
  90. package/dist/domains/conversations/operations/import-service.js +1 -0
  91. package/dist/domains/conversations/operations/import-service.js.map +1 -1
  92. package/dist/domains/git/git-service.d.ts +1 -0
  93. package/dist/domains/git/git-service.d.ts.map +1 -1
  94. package/dist/domains/git/git-service.js +53 -0
  95. package/dist/domains/git/git-service.js.map +1 -1
  96. package/dist/domains/human-input/human-input-resolution.service.d.ts +1 -1
  97. package/dist/domains/human-input/human-input-resolution.service.d.ts.map +1 -1
  98. package/dist/domains/pinned-commands/pinned-command.service.d.ts +3 -1
  99. package/dist/domains/pinned-commands/pinned-command.service.d.ts.map +1 -1
  100. package/dist/domains/pinned-commands/pinned-command.service.js +26 -3
  101. package/dist/domains/pinned-commands/pinned-command.service.js.map +1 -1
  102. package/dist/domains/plans/plan-service.d.ts +2 -0
  103. package/dist/domains/plans/plan-service.d.ts.map +1 -1
  104. package/dist/domains/plans/plan-service.js +31 -6
  105. package/dist/domains/plans/plan-service.js.map +1 -1
  106. package/dist/domains/projects/prune-conversations.service.d.ts +1 -1
  107. package/dist/domains/projects/prune-conversations.service.d.ts.map +1 -1
  108. package/dist/domains/tasks/index.d.ts +1 -0
  109. package/dist/domains/tasks/index.d.ts.map +1 -1
  110. package/dist/domains/tasks/index.js +1 -0
  111. package/dist/domains/tasks/index.js.map +1 -1
  112. package/dist/domains/tasks/task-launch-config.store.d.ts +1 -1
  113. package/dist/domains/tasks/task-launch-config.store.d.ts.map +1 -1
  114. package/dist/domains/tasks/task-manager-foreground.d.ts.map +1 -1
  115. package/dist/domains/tasks/task-manager-foreground.js +4 -1
  116. package/dist/domains/tasks/task-manager-foreground.js.map +1 -1
  117. package/dist/domains/tasks/task-manager-orphan.d.ts +4 -1
  118. package/dist/domains/tasks/task-manager-orphan.d.ts.map +1 -1
  119. package/dist/domains/tasks/task-manager-orphan.js +100 -1
  120. package/dist/domains/tasks/task-manager-orphan.js.map +1 -1
  121. package/dist/domains/tasks/task-manager-start.d.ts.map +1 -1
  122. package/dist/domains/tasks/task-manager-start.js +46 -0
  123. package/dist/domains/tasks/task-manager-start.js.map +1 -1
  124. package/dist/domains/tasks/task-manager.d.ts +26 -4
  125. package/dist/domains/tasks/task-manager.d.ts.map +1 -1
  126. package/dist/domains/tasks/task-manager.js +10 -1
  127. package/dist/domains/tasks/task-manager.js.map +1 -1
  128. package/dist/domains/tasks/task-notification.service.d.ts +2 -2
  129. package/dist/domains/tasks/task-notification.service.d.ts.map +1 -1
  130. package/dist/domains/tasks/task-port-inspector.d.ts +7 -0
  131. package/dist/domains/tasks/task-port-inspector.d.ts.map +1 -0
  132. package/dist/domains/tasks/task-port-inspector.js +286 -0
  133. package/dist/domains/tasks/task-port-inspector.js.map +1 -0
  134. package/dist/domains/tasks/task-summary-format.d.ts +1 -0
  135. package/dist/domains/tasks/task-summary-format.d.ts.map +1 -1
  136. package/dist/domains/tasks/task-summary-format.js +14 -0
  137. package/dist/domains/tasks/task-summary-format.js.map +1 -1
  138. package/dist/domains/tasks/task-supervisor.d.ts +3 -1
  139. package/dist/domains/tasks/task-supervisor.d.ts.map +1 -1
  140. package/dist/domains/tasks/task-supervisor.js +15 -1
  141. package/dist/domains/tasks/task-supervisor.js.map +1 -1
  142. package/dist/domains/tools/agent-tool-adapter.d.ts.map +1 -1
  143. package/dist/domains/tools/agent-tool-adapter.js +1 -2
  144. package/dist/domains/tools/agent-tool-adapter.js.map +1 -1
  145. package/dist/domains/tools/orchestration-tool-dispatcher-handlers.d.ts.map +1 -1
  146. package/dist/domains/tools/orchestration-tool-dispatcher-handlers.js +24 -4
  147. package/dist/domains/tools/orchestration-tool-dispatcher-handlers.js.map +1 -1
  148. package/dist/domains/tools/orchestration-tool-dispatcher.d.ts.map +1 -1
  149. package/dist/domains/tools/orchestration-tool-dispatcher.js +3 -1
  150. package/dist/domains/tools/orchestration-tool-dispatcher.js.map +1 -1
  151. package/dist/domains/tools/tool-call-transcript-preview.d.ts +3 -0
  152. package/dist/domains/tools/tool-call-transcript-preview.d.ts.map +1 -0
  153. package/dist/domains/tools/tool-call-transcript-preview.js +442 -0
  154. package/dist/domains/tools/tool-call-transcript-preview.js.map +1 -0
  155. package/dist/domains/tools/tool-call.repository.d.ts.map +1 -1
  156. package/dist/domains/tools/tool-call.repository.js +6 -9
  157. package/dist/domains/tools/tool-call.repository.js.map +1 -1
  158. package/dist/domains/tools/tool-executor.service.d.ts +1 -1
  159. package/dist/domains/tools/tool-executor.service.d.ts.map +1 -1
  160. package/dist/domains/tools/tool-executor.service.js +3 -2
  161. package/dist/domains/tools/tool-executor.service.js.map +1 -1
  162. package/dist/domains/tools/tool-result-bounds.d.ts.map +1 -1
  163. package/dist/domains/tools/tool-result-bounds.js +23 -9
  164. package/dist/domains/tools/tool-result-bounds.js.map +1 -1
  165. package/dist/domains/tools/tool-result-model-limits.d.ts +2 -0
  166. package/dist/domains/tools/tool-result-model-limits.d.ts.map +1 -0
  167. package/dist/domains/tools/tool-result-model-limits.js +84 -0
  168. package/dist/domains/tools/tool-result-model-limits.js.map +1 -0
  169. package/dist/domains/tools/tool-service.d.ts +6 -2
  170. package/dist/domains/tools/tool-service.d.ts.map +1 -1
  171. package/dist/domains/tools/tool-service.js +2 -1
  172. package/dist/domains/tools/tool-service.js.map +1 -1
  173. package/dist/domains/transcription/transcription.service.d.ts +1 -1
  174. package/dist/domains/transcription/transcription.service.d.ts.map +1 -1
  175. package/dist/domains/transcription/transcription.service.js.map +1 -1
  176. package/dist/domains/usage/subscription-usage-service.d.ts +1 -1
  177. package/dist/domains/usage/subscription-usage-service.d.ts.map +1 -1
  178. package/dist/http/request-context.d.ts +1 -1
  179. package/dist/http/request-context.d.ts.map +1 -1
  180. package/dist/http/static-files.d.ts +1 -1
  181. package/dist/http/static-files.d.ts.map +1 -1
  182. package/dist/index.d.ts +3 -1
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +3 -1
  185. package/dist/index.js.map +1 -1
  186. package/dist/infrastructure/diagnostics/crash-reports.d.ts +14 -0
  187. package/dist/infrastructure/diagnostics/crash-reports.d.ts.map +1 -0
  188. package/dist/infrastructure/diagnostics/crash-reports.js +199 -0
  189. package/dist/infrastructure/diagnostics/crash-reports.js.map +1 -0
  190. package/dist/infrastructure/diagnostics/index.d.ts +3 -0
  191. package/dist/infrastructure/diagnostics/index.d.ts.map +1 -0
  192. package/dist/infrastructure/diagnostics/index.js +3 -0
  193. package/dist/infrastructure/diagnostics/index.js.map +1 -0
  194. package/dist/infrastructure/diagnostics/logging.d.ts.map +1 -0
  195. package/dist/{logging.js → infrastructure/diagnostics/logging.js} +1 -1
  196. package/dist/infrastructure/diagnostics/logging.js.map +1 -0
  197. package/dist/{secrets.d.ts → infrastructure/secrets/index.d.ts} +1 -1
  198. package/dist/infrastructure/secrets/index.d.ts.map +1 -0
  199. package/dist/{secrets.js → infrastructure/secrets/index.js} +2 -2
  200. package/dist/infrastructure/secrets/index.js.map +1 -0
  201. package/dist/main.js +43 -7
  202. package/dist/main.js.map +1 -1
  203. package/dist/routes/agent-routes.d.ts +1 -1
  204. package/dist/routes/agent-routes.d.ts.map +1 -1
  205. package/dist/routes/agent-routes.js.map +1 -1
  206. package/dist/routes/auth-routes.d.ts +1 -1
  207. package/dist/routes/auth-routes.d.ts.map +1 -1
  208. package/dist/routes/auth-routes.js.map +1 -1
  209. package/dist/routes/completion-routes.d.ts +1 -1
  210. package/dist/routes/completion-routes.d.ts.map +1 -1
  211. package/dist/routes/completion-routes.js.map +1 -1
  212. package/dist/routes/conversation-routes.d.ts +1 -1
  213. package/dist/routes/conversation-routes.d.ts.map +1 -1
  214. package/dist/routes/conversation-routes.js.map +1 -1
  215. package/dist/routes/filesystem-routes.d.ts +1 -1
  216. package/dist/routes/filesystem-routes.d.ts.map +1 -1
  217. package/dist/routes/filesystem-routes.js.map +1 -1
  218. package/dist/routes/git-routes.d.ts +1 -1
  219. package/dist/routes/git-routes.d.ts.map +1 -1
  220. package/dist/routes/git-routes.js +4 -0
  221. package/dist/routes/git-routes.js.map +1 -1
  222. package/dist/routes/index.d.ts +1 -1
  223. package/dist/routes/index.d.ts.map +1 -1
  224. package/dist/routes/log-routes.d.ts +1 -1
  225. package/dist/routes/log-routes.d.ts.map +1 -1
  226. package/dist/routes/log-routes.js.map +1 -1
  227. package/dist/routes/model-routes.d.ts +1 -1
  228. package/dist/routes/model-routes.d.ts.map +1 -1
  229. package/dist/routes/project-routes.d.ts +1 -1
  230. package/dist/routes/project-routes.d.ts.map +1 -1
  231. package/dist/routes/project-routes.js +7 -1
  232. package/dist/routes/project-routes.js.map +1 -1
  233. package/dist/routes/provider-catalog-routes.d.ts +1 -1
  234. package/dist/routes/provider-catalog-routes.d.ts.map +1 -1
  235. package/dist/routes/provider-catalog-routes.js +1 -1
  236. package/dist/routes/provider-catalog-routes.js.map +1 -1
  237. package/dist/routes/settings-routes.d.ts +1 -1
  238. package/dist/routes/settings-routes.d.ts.map +1 -1
  239. package/dist/routes/settings-routes.js.map +1 -1
  240. package/dist/routes/status-routes.d.ts +1 -1
  241. package/dist/routes/status-routes.d.ts.map +1 -1
  242. package/dist/routes/status-routes.js +1 -1
  243. package/dist/routes/status-routes.js.map +1 -1
  244. package/dist/routes/storage-routes.d.ts +1 -1
  245. package/dist/routes/storage-routes.d.ts.map +1 -1
  246. package/dist/routes/storage-routes.js.map +1 -1
  247. package/dist/routes/task-routes.d.ts +1 -1
  248. package/dist/routes/task-routes.d.ts.map +1 -1
  249. package/dist/routes/task-routes.js.map +1 -1
  250. package/dist/routes/tool-routes.d.ts +1 -1
  251. package/dist/routes/tool-routes.d.ts.map +1 -1
  252. package/dist/routes/tool-routes.js +47 -19
  253. package/dist/routes/tool-routes.js.map +1 -1
  254. package/dist/routes/transcription-routes.d.ts +1 -1
  255. package/dist/routes/transcription-routes.d.ts.map +1 -1
  256. package/dist/routes/transcription-routes.js.map +1 -1
  257. package/dist/routes/worker-routes.d.ts +1 -1
  258. package/dist/routes/worker-routes.d.ts.map +1 -1
  259. package/dist/routes/worker-routes.js.map +1 -1
  260. package/dist/runtime/runtime-composition.d.ts +3 -3
  261. package/dist/runtime/runtime-composition.d.ts.map +1 -1
  262. package/dist/runtime/runtime-composition.js.map +1 -1
  263. package/dist/{registry.d.ts → runtime/runtime-registry.d.ts} +159 -44
  264. package/dist/runtime/runtime-registry.d.ts.map +1 -0
  265. package/dist/{registry.js → runtime/runtime-registry.js} +7 -12
  266. package/dist/runtime/runtime-registry.js.map +1 -0
  267. package/dist/runtime/runtime-state.d.ts +3 -2
  268. package/dist/runtime/runtime-state.d.ts.map +1 -1
  269. package/dist/runtime/types.d.ts.map +1 -0
  270. package/dist/{registry → runtime}/types.js.map +1 -1
  271. package/dist/web/assets/{dist-DVpGQCt0.js → dist-DuVh-9Yy.js} +1 -1
  272. package/dist/web/assets/index-bmeeVJYV.css +2 -0
  273. package/dist/web/assets/index-hdM6dgBG.js +192 -0
  274. package/dist/web/index.html +2 -2
  275. package/dist/web/sw.js +1 -1
  276. package/package.json +4 -4
  277. package/dist/agent-process.d.ts +0 -32
  278. package/dist/agent-process.d.ts.map +0 -1
  279. package/dist/agent-process.js +0 -129
  280. package/dist/agent-process.js.map +0 -1
  281. package/dist/agent-runner/agent-runner.d.ts +0 -65
  282. package/dist/agent-runner/agent-runner.d.ts.map +0 -1
  283. package/dist/agent-runner/agent-runner.js +0 -802
  284. package/dist/agent-runner/agent-runner.js.map +0 -1
  285. package/dist/agent-runner/index.d.ts +0 -6
  286. package/dist/agent-runner/index.d.ts.map +0 -1
  287. package/dist/agent-runner/index.js +0 -4
  288. package/dist/agent-runner/index.js.map +0 -1
  289. package/dist/agent-runner/message-mirror.d.ts +0 -44
  290. package/dist/agent-runner/message-mirror.d.ts.map +0 -1
  291. package/dist/agent-runner/message-mirror.js +0 -154
  292. package/dist/agent-runner/message-mirror.js.map +0 -1
  293. package/dist/agent-runner/run-state.d.ts +0 -12
  294. package/dist/agent-runner/run-state.d.ts.map +0 -1
  295. package/dist/agent-runner/run-state.js +0 -2
  296. package/dist/agent-runner/run-state.js.map +0 -1
  297. package/dist/agent-runner/subagent-runner.d.ts +0 -29
  298. package/dist/agent-runner/subagent-runner.d.ts.map +0 -1
  299. package/dist/agent-runner/subagent-runner.js +0 -84
  300. package/dist/agent-runner/subagent-runner.js.map +0 -1
  301. package/dist/agent-runner/system-prompt-builder.d.ts +0 -19
  302. package/dist/agent-runner/system-prompt-builder.d.ts.map +0 -1
  303. package/dist/agent-runner/system-prompt-builder.js +0 -35
  304. package/dist/agent-runner/system-prompt-builder.js.map +0 -1
  305. package/dist/agent-runner/tool-draft-streaming.d.ts +0 -2
  306. package/dist/agent-runner/tool-draft-streaming.d.ts.map +0 -1
  307. package/dist/agent-runner/tool-draft-streaming.js +0 -5
  308. package/dist/agent-runner/tool-draft-streaming.js.map +0 -1
  309. package/dist/agent-suspension-service.d.ts +0 -44
  310. package/dist/agent-suspension-service.d.ts.map +0 -1
  311. package/dist/agent-suspension-service.js +0 -96
  312. package/dist/agent-suspension-service.js.map +0 -1
  313. package/dist/agent-tool-adapter.d.ts +0 -20
  314. package/dist/agent-tool-adapter.d.ts.map +0 -1
  315. package/dist/agent-tool-adapter.js +0 -215
  316. package/dist/agent-tool-adapter.js.map +0 -1
  317. package/dist/agents/agent-authority.d.ts +0 -5
  318. package/dist/agents/agent-authority.d.ts.map +0 -1
  319. package/dist/agents/agent-authority.js +0 -28
  320. package/dist/agents/agent-authority.js.map +0 -1
  321. package/dist/agents/agent-budget.d.ts +0 -3
  322. package/dist/agents/agent-budget.d.ts.map +0 -1
  323. package/dist/agents/agent-budget.js +0 -17
  324. package/dist/agents/agent-budget.js.map +0 -1
  325. package/dist/agents/agent-status.d.ts +0 -4
  326. package/dist/agents/agent-status.d.ts.map +0 -1
  327. package/dist/agents/agent-status.js +0 -10
  328. package/dist/agents/agent-status.js.map +0 -1
  329. package/dist/auth.d.ts.map +0 -1
  330. package/dist/auth.js.map +0 -1
  331. package/dist/conversation-operations/compaction-service.d.ts +0 -37
  332. package/dist/conversation-operations/compaction-service.d.ts.map +0 -1
  333. package/dist/conversation-operations/compaction-service.js +0 -102
  334. package/dist/conversation-operations/compaction-service.js.map +0 -1
  335. package/dist/conversation-operations/export-service.d.ts +0 -22
  336. package/dist/conversation-operations/export-service.d.ts.map +0 -1
  337. package/dist/conversation-operations/export-service.js +0 -79
  338. package/dist/conversation-operations/export-service.js.map +0 -1
  339. package/dist/conversation-operations/import-service.d.ts +0 -20
  340. package/dist/conversation-operations/import-service.d.ts.map +0 -1
  341. package/dist/conversation-operations/import-service.js +0 -97
  342. package/dist/conversation-operations/import-service.js.map +0 -1
  343. package/dist/conversation-operations/index.d.ts +0 -8
  344. package/dist/conversation-operations/index.d.ts.map +0 -1
  345. package/dist/conversation-operations/index.js +0 -6
  346. package/dist/conversation-operations/index.js.map +0 -1
  347. package/dist/conversation-operations/navigation-service.d.ts +0 -18
  348. package/dist/conversation-operations/navigation-service.d.ts.map +0 -1
  349. package/dist/conversation-operations/navigation-service.js +0 -102
  350. package/dist/conversation-operations/navigation-service.js.map +0 -1
  351. package/dist/conversation-operations/summary.d.ts +0 -11
  352. package/dist/conversation-operations/summary.d.ts.map +0 -1
  353. package/dist/conversation-operations/summary.js +0 -29
  354. package/dist/conversation-operations/summary.js.map +0 -1
  355. package/dist/conversation-runtime.d.ts +0 -96
  356. package/dist/conversation-runtime.d.ts.map +0 -1
  357. package/dist/conversation-runtime.js +0 -363
  358. package/dist/conversation-runtime.js.map +0 -1
  359. package/dist/conversation-service.d.ts +0 -17
  360. package/dist/conversation-service.d.ts.map +0 -1
  361. package/dist/conversation-service.js +0 -56
  362. package/dist/conversation-service.js.map +0 -1
  363. package/dist/credential-crypto.d.ts.map +0 -1
  364. package/dist/credential-crypto.js.map +0 -1
  365. package/dist/domains/processes/index.d.ts +0 -10
  366. package/dist/domains/processes/index.d.ts.map +0 -1
  367. package/dist/domains/processes/index.js +0 -7
  368. package/dist/domains/processes/index.js.map +0 -1
  369. package/dist/domains/processes/process-launch-config.store.d.ts +0 -21
  370. package/dist/domains/processes/process-launch-config.store.d.ts.map +0 -1
  371. package/dist/domains/processes/process-launch-config.store.js +0 -49
  372. package/dist/domains/processes/process-launch-config.store.js.map +0 -1
  373. package/dist/domains/processes/process-log.service.d.ts +0 -25
  374. package/dist/domains/processes/process-log.service.d.ts.map +0 -1
  375. package/dist/domains/processes/process-log.service.js +0 -155
  376. package/dist/domains/processes/process-log.service.js.map +0 -1
  377. package/dist/domains/processes/process-manager.d.ts +0 -107
  378. package/dist/domains/processes/process-manager.d.ts.map +0 -1
  379. package/dist/domains/processes/process-manager.js +0 -814
  380. package/dist/domains/processes/process-manager.js.map +0 -1
  381. package/dist/domains/processes/process-readiness.service.d.ts +0 -7
  382. package/dist/domains/processes/process-readiness.service.d.ts.map +0 -1
  383. package/dist/domains/processes/process-readiness.service.js +0 -26
  384. package/dist/domains/processes/process-readiness.service.js.map +0 -1
  385. package/dist/domains/processes/process-status.d.ts +0 -5
  386. package/dist/domains/processes/process-status.d.ts.map +0 -1
  387. package/dist/domains/processes/process-status.js +0 -13
  388. package/dist/domains/processes/process-status.js.map +0 -1
  389. package/dist/domains/processes/process-supervisor.d.ts +0 -34
  390. package/dist/domains/processes/process-supervisor.d.ts.map +0 -1
  391. package/dist/domains/processes/process-supervisor.js +0 -211
  392. package/dist/domains/processes/process-supervisor.js.map +0 -1
  393. package/dist/domains/processes/process.repository.d.ts +0 -11
  394. package/dist/domains/processes/process.repository.d.ts.map +0 -1
  395. package/dist/domains/processes/process.repository.js +0 -31
  396. package/dist/domains/processes/process.repository.js.map +0 -1
  397. package/dist/domains/tasks/task-completion.service.d.ts +0 -31
  398. package/dist/domains/tasks/task-completion.service.d.ts.map +0 -1
  399. package/dist/domains/tasks/task-completion.service.js +0 -147
  400. package/dist/domains/tasks/task-completion.service.js.map +0 -1
  401. package/dist/domains/tasks/task-legacy-migration.d.ts +0 -15
  402. package/dist/domains/tasks/task-legacy-migration.d.ts.map +0 -1
  403. package/dist/domains/tasks/task-legacy-migration.js +0 -191
  404. package/dist/domains/tasks/task-legacy-migration.js.map +0 -1
  405. package/dist/events.d.ts +0 -2
  406. package/dist/events.d.ts.map +0 -1
  407. package/dist/events.js +0 -2
  408. package/dist/events.js.map +0 -1
  409. package/dist/git/git-service.d.ts +0 -51
  410. package/dist/git/git-service.d.ts.map +0 -1
  411. package/dist/git/git-service.js +0 -716
  412. package/dist/git/git-service.js.map +0 -1
  413. package/dist/git/git-status.d.ts +0 -24
  414. package/dist/git/git-status.d.ts.map +0 -1
  415. package/dist/git/git-status.js +0 -133
  416. package/dist/git/git-status.js.map +0 -1
  417. package/dist/harness-manager.d.ts +0 -21
  418. package/dist/harness-manager.d.ts.map +0 -1
  419. package/dist/harness-manager.js +0 -105
  420. package/dist/harness-manager.js.map +0 -1
  421. package/dist/index-store.d.ts +0 -2
  422. package/dist/index-store.d.ts.map +0 -1
  423. package/dist/index-store.js +0 -2
  424. package/dist/index-store.js.map +0 -1
  425. package/dist/logging.d.ts.map +0 -1
  426. package/dist/logging.js.map +0 -1
  427. package/dist/nerve-system-prompt.d.ts.map +0 -1
  428. package/dist/nerve-system-prompt.js.map +0 -1
  429. package/dist/oauth-flow.d.ts.map +0 -1
  430. package/dist/oauth-flow.js.map +0 -1
  431. package/dist/plan-paths.d.ts +0 -6
  432. package/dist/plan-paths.d.ts.map +0 -1
  433. package/dist/plan-paths.js +0 -30
  434. package/dist/plan-paths.js.map +0 -1
  435. package/dist/plan-service.d.ts +0 -61
  436. package/dist/plan-service.d.ts.map +0 -1
  437. package/dist/plan-service.js +0 -255
  438. package/dist/plan-service.js.map +0 -1
  439. package/dist/policy.d.ts +0 -14
  440. package/dist/policy.d.ts.map +0 -1
  441. package/dist/policy.js +0 -247
  442. package/dist/policy.js.map +0 -1
  443. package/dist/process-manager.d.ts +0 -72
  444. package/dist/process-manager.d.ts.map +0 -1
  445. package/dist/process-manager.js +0 -376
  446. package/dist/process-manager.js.map +0 -1
  447. package/dist/prompt-text.d.ts.map +0 -1
  448. package/dist/prompt-text.js.map +0 -1
  449. package/dist/registry/agent-lifecycle-service.d.ts +0 -38
  450. package/dist/registry/agent-lifecycle-service.d.ts.map +0 -1
  451. package/dist/registry/agent-lifecycle-service.js +0 -199
  452. package/dist/registry/agent-lifecycle-service.js.map +0 -1
  453. package/dist/registry/conversation-lifecycle-service.d.ts +0 -35
  454. package/dist/registry/conversation-lifecycle-service.d.ts.map +0 -1
  455. package/dist/registry/conversation-lifecycle-service.js +0 -136
  456. package/dist/registry/conversation-lifecycle-service.js.map +0 -1
  457. package/dist/registry/pinned-command-service.d.ts +0 -11
  458. package/dist/registry/pinned-command-service.d.ts.map +0 -1
  459. package/dist/registry/pinned-command-service.js +0 -40
  460. package/dist/registry/pinned-command-service.js.map +0 -1
  461. package/dist/registry/project-lifecycle-service.d.ts +0 -22
  462. package/dist/registry/project-lifecycle-service.d.ts.map +0 -1
  463. package/dist/registry/project-lifecycle-service.js +0 -87
  464. package/dist/registry/project-lifecycle-service.js.map +0 -1
  465. package/dist/registry/types.d.ts.map +0 -1
  466. package/dist/registry.d.ts.map +0 -1
  467. package/dist/registry.js.map +0 -1
  468. package/dist/repositories/agent-repository.d.ts +0 -12
  469. package/dist/repositories/agent-repository.d.ts.map +0 -1
  470. package/dist/repositories/agent-repository.js +0 -33
  471. package/dist/repositories/agent-repository.js.map +0 -1
  472. package/dist/repositories/conversation-repository.d.ts +0 -13
  473. package/dist/repositories/conversation-repository.d.ts.map +0 -1
  474. package/dist/repositories/conversation-repository.js +0 -39
  475. package/dist/repositories/conversation-repository.js.map +0 -1
  476. package/dist/repositories/entry-repository.d.ts +0 -15
  477. package/dist/repositories/entry-repository.d.ts.map +0 -1
  478. package/dist/repositories/entry-repository.js +0 -81
  479. package/dist/repositories/entry-repository.js.map +0 -1
  480. package/dist/repositories/index.d.ts +0 -7
  481. package/dist/repositories/index.d.ts.map +0 -1
  482. package/dist/repositories/index.js +0 -7
  483. package/dist/repositories/index.js.map +0 -1
  484. package/dist/repositories/pinned-command-repository.d.ts +0 -10
  485. package/dist/repositories/pinned-command-repository.d.ts.map +0 -1
  486. package/dist/repositories/pinned-command-repository.js +0 -28
  487. package/dist/repositories/pinned-command-repository.js.map +0 -1
  488. package/dist/repositories/project-repository.d.ts +0 -12
  489. package/dist/repositories/project-repository.d.ts.map +0 -1
  490. package/dist/repositories/project-repository.js +0 -33
  491. package/dist/repositories/project-repository.js.map +0 -1
  492. package/dist/repositories/prompt-queue-repository.d.ts +0 -28
  493. package/dist/repositories/prompt-queue-repository.d.ts.map +0 -1
  494. package/dist/repositories/prompt-queue-repository.js +0 -88
  495. package/dist/repositories/prompt-queue-repository.js.map +0 -1
  496. package/dist/resource-loader.d.ts.map +0 -1
  497. package/dist/resource-loader.js.map +0 -1
  498. package/dist/routes/process-routes.d.ts +0 -4
  499. package/dist/routes/process-routes.d.ts.map +0 -1
  500. package/dist/routes/process-routes.js +0 -43
  501. package/dist/routes/process-routes.js.map +0 -1
  502. package/dist/secrets.d.ts.map +0 -1
  503. package/dist/secrets.js.map +0 -1
  504. package/dist/server.d.ts.map +0 -1
  505. package/dist/server.js.map +0 -1
  506. package/dist/storage.d.ts +0 -2
  507. package/dist/storage.d.ts.map +0 -1
  508. package/dist/storage.js +0 -2
  509. package/dist/storage.js.map +0 -1
  510. package/dist/tool-service.d.ts +0 -82
  511. package/dist/tool-service.d.ts.map +0 -1
  512. package/dist/tool-service.js +0 -409
  513. package/dist/tool-service.js.map +0 -1
  514. package/dist/transcription-service.d.ts +0 -15
  515. package/dist/transcription-service.d.ts.map +0 -1
  516. package/dist/transcription-service.js +0 -128
  517. package/dist/transcription-service.js.map +0 -1
  518. package/dist/usage/anthropic-client.d.ts +0 -9
  519. package/dist/usage/anthropic-client.d.ts.map +0 -1
  520. package/dist/usage/anthropic-client.js +0 -207
  521. package/dist/usage/anthropic-client.js.map +0 -1
  522. package/dist/usage/codex-client.d.ts +0 -18
  523. package/dist/usage/codex-client.d.ts.map +0 -1
  524. package/dist/usage/codex-client.js +0 -316
  525. package/dist/usage/codex-client.js.map +0 -1
  526. package/dist/usage/subscription-usage-service.d.ts +0 -42
  527. package/dist/usage/subscription-usage-service.d.ts.map +0 -1
  528. package/dist/usage/subscription-usage-service.js +0 -131
  529. package/dist/usage/subscription-usage-service.js.map +0 -1
  530. package/dist/version.d.ts.map +0 -1
  531. package/dist/version.js.map +0 -1
  532. package/dist/web/assets/index-DFKLdj_D.css +0 -2
  533. package/dist/web/assets/index-DP6SGqvJ.js +0 -165
  534. package/dist/worker-manager.d.ts +0 -51
  535. package/dist/worker-manager.d.ts.map +0 -1
  536. package/dist/worker-manager.js +0 -116
  537. package/dist/worker-manager.js.map +0 -1
  538. /package/dist/{version.d.ts → app/version.d.ts} +0 -0
  539. /package/dist/{version.js → app/version.js} +0 -0
  540. /package/dist/{nerve-system-prompt.d.ts → domains/agents/prompting/nerve-system-prompt.d.ts} +0 -0
  541. /package/dist/{prompt-text.d.ts → domains/agents/prompting/prompt-text.d.ts} +0 -0
  542. /package/dist/{prompt-text.js → domains/agents/prompting/prompt-text.js} +0 -0
  543. /package/dist/{resource-loader.d.ts → domains/agents/prompting/resource-loader.d.ts} +0 -0
  544. /package/dist/{logging.d.ts → infrastructure/diagnostics/logging.d.ts} +0 -0
  545. /package/dist/{registry → runtime}/types.d.ts +0 -0
  546. /package/dist/{registry → runtime}/types.js +0 -0
@@ -1,716 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { readdir } from "node:fs/promises";
4
- import { basename, join, resolve, sep } from "node:path";
5
- import { promisify } from "node:util";
6
- import { HttpError } from "../http/errors.js";
7
- import { parsePorcelainV2, parseShortstat } from "./git-status.js";
8
- const execFileAsync = promisify(execFile);
9
- const COMMAND_TIMEOUT_MS = 20_000;
10
- const MAX_BUFFER = 16 * 1024 * 1024;
11
- const MAX_DISCOVERY_DEPTH = 2;
12
- const SKIP_DIRS = new Set(["node_modules", ".git", "dist", "build", ".next"]);
13
- export class GitCommandError extends Error {
14
- command;
15
- code;
16
- stderr;
17
- constructor(command, code, stderr) {
18
- super(stderr.trim() || `${command} failed`);
19
- this.command = command;
20
- this.code = code;
21
- this.stderr = stderr;
22
- this.name = "GitCommandError";
23
- }
24
- }
25
- export class GitService {
26
- getProject;
27
- constructor(getProject) {
28
- this.getProject = getProject;
29
- }
30
- // --- low-level exec ---
31
- async run(bin, cwd, args) {
32
- try {
33
- const { stdout, stderr } = await execFileAsync(bin, args, {
34
- cwd,
35
- timeout: COMMAND_TIMEOUT_MS,
36
- maxBuffer: MAX_BUFFER,
37
- });
38
- return { stdout, stderr };
39
- }
40
- catch (error) {
41
- const err = error;
42
- if (err.code === "ENOENT") {
43
- throw new GitCommandError(bin, null, `${bin} executable not found`);
44
- }
45
- const code = typeof err.code === "number" ? err.code : null;
46
- throw new GitCommandError(`${bin} ${args[0] ?? ""}`, code, err.stderr ?? err.message);
47
- }
48
- }
49
- runGit(cwd, args) {
50
- return this.run("git", cwd, args);
51
- }
52
- runGh(cwd, args) {
53
- return this.run("gh", cwd, args);
54
- }
55
- /** Resolve and contain a repo dir relative to the project dir. */
56
- resolveRepoDir(projectId, relativePath) {
57
- const project = this.getProject(projectId);
58
- const root = resolve(project.dir);
59
- const target = resolve(root, relativePath === "." ? "" : relativePath);
60
- if (target !== root && !target.startsWith(`${root}${sep}`)) {
61
- throw new HttpError(400, "GIT_REPO_OUT_OF_SCOPE", "Repository path is outside the project directory.");
62
- }
63
- if (!existsSync(join(target, ".git"))) {
64
- // .git may be a file (worktrees/submodules) — fall back to git check.
65
- }
66
- return target;
67
- }
68
- async isRepo(dir) {
69
- try {
70
- const { stdout } = await this.runGit(dir, [
71
- "rev-parse",
72
- "--is-inside-work-tree",
73
- ]);
74
- return stdout.trim() === "true";
75
- }
76
- catch {
77
- return false;
78
- }
79
- }
80
- // --- discovery ---
81
- async discoverRepos(projectId) {
82
- const project = this.getProject(projectId);
83
- const root = resolve(project.dir);
84
- if (await this.isRepo(root)) {
85
- return {
86
- projectIsRepo: true,
87
- repos: [await this.summarizeRepo(root, ".", project.name)],
88
- };
89
- }
90
- const repoDirs = await this.walkForRepos(root, root, 0);
91
- const repos = [];
92
- for (const dir of repoDirs) {
93
- const relativePath = dir.slice(root.length + 1) || ".";
94
- try {
95
- repos.push(await this.summarizeRepo(dir, relativePath, basename(dir)));
96
- }
97
- catch {
98
- // Skip repos we cannot summarize (corrupt/unreadable).
99
- }
100
- }
101
- repos.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
102
- return { projectIsRepo: false, repos };
103
- }
104
- async walkForRepos(root, dir, depth) {
105
- if (depth > MAX_DISCOVERY_DEPTH)
106
- return [];
107
- let entries;
108
- try {
109
- entries = await readdir(dir, { withFileTypes: true });
110
- }
111
- catch {
112
- return [];
113
- }
114
- const found = [];
115
- for (const entry of entries) {
116
- if (!entry.isDirectory())
117
- continue;
118
- if (entry.name.startsWith(".") || SKIP_DIRS.has(entry.name))
119
- continue;
120
- const childDir = join(dir, entry.name);
121
- if (existsSync(join(childDir, ".git"))) {
122
- // Identified as a repo; do not descend further into it.
123
- found.push(childDir);
124
- continue;
125
- }
126
- found.push(...(await this.walkForRepos(root, childDir, depth + 1)));
127
- }
128
- return found;
129
- }
130
- async summarizeRepo(repoDir, relativePath, name) {
131
- const { stdout } = await this.runGit(repoDir, [
132
- "status",
133
- "--porcelain=v2",
134
- "--branch",
135
- ]);
136
- const { branch, files } = parsePorcelainV2(stdout);
137
- const baseBranch = await this.detectBaseBranch(repoDir);
138
- let hasRemote = false;
139
- try {
140
- hasRemote =
141
- (await this.runGit(repoDir, ["remote"])).stdout.trim().length > 0;
142
- }
143
- catch {
144
- hasRemote = false;
145
- }
146
- const onBaseBranch = branch.head === baseBranch;
147
- return {
148
- relativePath,
149
- absDir: repoDir,
150
- name,
151
- isRepo: true,
152
- currentBranch: branch.head,
153
- detached: branch.detached,
154
- ahead: branch.upstream ? (branch.ahead ?? 0) : null,
155
- behind: branch.upstream ? (branch.behind ?? 0) : null,
156
- hasUpstream: branch.upstream !== null,
157
- hasRemote,
158
- baseBranch,
159
- onBaseBranch,
160
- mergedToBase: await this.mergedToBase(repoDir, baseBranch, {
161
- currentBranch: branch.head,
162
- detached: branch.detached,
163
- onBaseBranch,
164
- }),
165
- dirty: files.length > 0,
166
- changeCount: files.length,
167
- };
168
- }
169
- repoName(projectId, relativePath) {
170
- if (relativePath === ".")
171
- return this.getProject(projectId).name;
172
- return basename(relativePath);
173
- }
174
- // --- overview ---
175
- async overview(projectId, relativePath) {
176
- const repoDir = this.resolveRepoDir(projectId, relativePath);
177
- const repo = await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath));
178
- const { stdout: statusOut } = await this.runGit(repoDir, [
179
- "status",
180
- "--porcelain=v2",
181
- ]);
182
- const { files } = parsePorcelainV2(statusOut);
183
- const stagedCount = files.filter((f) => f.staged).length;
184
- const untrackedCount = files.filter((f) => f.untracked).length;
185
- const unstagedCount = files.filter((f) => !f.untracked && f.worktree !== " ").length;
186
- const unstaged = parseShortstat((await this.runGit(repoDir, ["diff", "--shortstat"])).stdout);
187
- const staged = parseShortstat((await this.runGit(repoDir, ["diff", "--staged", "--shortstat"])).stdout);
188
- return {
189
- repo,
190
- baseBranch: repo.baseBranch,
191
- onBaseBranch: repo.onBaseBranch,
192
- files,
193
- stagedCount,
194
- unstagedCount,
195
- untrackedCount,
196
- insertions: unstaged.insertions + staged.insertions,
197
- deletions: unstaged.deletions + staged.deletions,
198
- recentCommits: await this.recentCommits(repoDir),
199
- };
200
- }
201
- async recentCommits(repoDir) {
202
- try {
203
- const { stdout } = await this.runGit(repoDir, [
204
- "log",
205
- "-n",
206
- "10",
207
- "--pretty=%h%x00%s%x00%cr",
208
- ]);
209
- return stdout
210
- .split("\n")
211
- .filter((line) => line.length > 0)
212
- .map((line) => {
213
- const [hash, subject, relativeDate] = line.split("\u0000");
214
- return {
215
- hash: hash ?? "",
216
- subject: subject ?? "",
217
- relativeDate: relativeDate ?? "",
218
- };
219
- });
220
- }
221
- catch {
222
- return [];
223
- }
224
- }
225
- async listBranches(projectId, relativePath) {
226
- const repoDir = this.resolveRepoDir(projectId, relativePath);
227
- const { stdout } = await this.runGit(repoDir, [
228
- "for-each-ref",
229
- "--format=%(refname)%00%(refname:short)%00%(upstream:short)%00%(HEAD)",
230
- "refs/heads",
231
- "refs/remotes",
232
- ]);
233
- const branches = stdout
234
- .split("\n")
235
- .filter((line) => line.length > 0)
236
- .map((line) => {
237
- const [refname, shortName, upstream, head] = line.split("\u0000");
238
- if (!refname || !shortName)
239
- return null;
240
- if (refname.startsWith("refs/remotes/") &&
241
- shortName.endsWith("/HEAD")) {
242
- return null;
243
- }
244
- return {
245
- name: shortName,
246
- current: head === "*",
247
- remote: refname.startsWith("refs/remotes/"),
248
- upstream: upstream && upstream.length > 0 ? upstream : null,
249
- };
250
- })
251
- .filter((branch) => branch !== null)
252
- .sort((a, b) => {
253
- if (a.current !== b.current)
254
- return a.current ? -1 : 1;
255
- if (a.remote !== b.remote)
256
- return a.remote ? 1 : -1;
257
- return a.name.localeCompare(b.name);
258
- });
259
- return { branches };
260
- }
261
- async detectBaseBranch(repoDir) {
262
- try {
263
- const { stdout } = await this.runGit(repoDir, [
264
- "symbolic-ref",
265
- "--quiet",
266
- "refs/remotes/origin/HEAD",
267
- ]);
268
- const ref = stdout.trim();
269
- if (ref.startsWith("refs/remotes/origin/")) {
270
- return ref.slice("refs/remotes/origin/".length);
271
- }
272
- }
273
- catch {
274
- // fall through to probing
275
- }
276
- for (const candidate of ["main", "master", "develop"]) {
277
- if (await this.branchExists(repoDir, candidate))
278
- return candidate;
279
- }
280
- try {
281
- const { stdout } = await this.runGit(repoDir, [
282
- "rev-parse",
283
- "--abbrev-ref",
284
- "HEAD",
285
- ]);
286
- return stdout.trim() || "main";
287
- }
288
- catch {
289
- return "main";
290
- }
291
- }
292
- async branchExists(repoDir, name) {
293
- try {
294
- await this.runGit(repoDir, [
295
- "rev-parse",
296
- "--verify",
297
- "--quiet",
298
- `refs/heads/${name}`,
299
- ]);
300
- return true;
301
- }
302
- catch {
303
- try {
304
- await this.runGit(repoDir, [
305
- "rev-parse",
306
- "--verify",
307
- "--quiet",
308
- `refs/remotes/origin/${name}`,
309
- ]);
310
- return true;
311
- }
312
- catch {
313
- return false;
314
- }
315
- }
316
- }
317
- async comparisonBaseRef(repoDir, baseBranch) {
318
- for (const candidate of [
319
- `refs/remotes/origin/${baseBranch}`,
320
- `refs/heads/${baseBranch}`,
321
- baseBranch,
322
- ]) {
323
- try {
324
- await this.runGit(repoDir, [
325
- "rev-parse",
326
- "--verify",
327
- "--quiet",
328
- `${candidate}^{commit}`,
329
- ]);
330
- return candidate;
331
- }
332
- catch {
333
- // Try the next possible ref.
334
- }
335
- }
336
- return baseBranch;
337
- }
338
- async mergedToBase(repoDir, baseBranch, state) {
339
- if (state.detached || state.onBaseBranch || !state.currentBranch) {
340
- return false;
341
- }
342
- const baseRef = await this.comparisonBaseRef(repoDir, baseBranch);
343
- try {
344
- await this.runGit(repoDir, [
345
- "merge-base",
346
- "--is-ancestor",
347
- "HEAD",
348
- baseRef,
349
- ]);
350
- return true;
351
- }
352
- catch {
353
- return false;
354
- }
355
- }
356
- // --- workflow mutations ---
357
- async createBranch(projectId, relativePath, name) {
358
- const repoDir = this.resolveRepoDir(projectId, relativePath);
359
- try {
360
- await this.runGit(repoDir, ["check-ref-format", "--branch", name]);
361
- }
362
- catch {
363
- throw new HttpError(400, "GIT_INVALID_BRANCH_NAME", `'${name}' is not a valid git branch name.`);
364
- }
365
- await this.mapGit(() => this.runGit(repoDir, ["switch", "-c", name]));
366
- return {
367
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
368
- };
369
- }
370
- async switchBranch(projectId, relativePath, name) {
371
- const repoDir = this.resolveRepoDir(projectId, relativePath);
372
- const branches = await this.listBranches(projectId, relativePath);
373
- const target = branches.branches.find((branch) => branch.name === name);
374
- if (!target) {
375
- throw new HttpError(404, "GIT_BRANCH_NOT_FOUND", `Branch '${name}' was not found.`);
376
- }
377
- const args = target.remote ? ["switch", "--track", name] : ["switch", name];
378
- await this.mapGit(() => this.runGit(repoDir, args));
379
- return {
380
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
381
- };
382
- }
383
- async stageFile(projectId, relativePath, path) {
384
- const repoDir = this.resolveRepoDir(projectId, relativePath);
385
- await this.mapGit(() => this.runGit(repoDir, ["add", "--", path]));
386
- return {
387
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
388
- };
389
- }
390
- async unstageFile(projectId, relativePath, path) {
391
- const repoDir = this.resolveRepoDir(projectId, relativePath);
392
- await this.mapGit(() => this.runGit(repoDir, ["restore", "--staged", "--", path]));
393
- return {
394
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
395
- };
396
- }
397
- async discardFile(projectId, relativePath, path) {
398
- const repoDir = this.resolveRepoDir(projectId, relativePath);
399
- const before = parsePorcelainV2((await this.runGit(repoDir, ["status", "--porcelain=v2"])).stdout).files.find((file) => file.path === path || file.renamedFrom === path);
400
- try {
401
- await this.runGit(repoDir, ["restore", "--staged", "--", path]);
402
- }
403
- catch {
404
- // The path may not be staged; continue with worktree cleanup.
405
- }
406
- if (!before?.untracked) {
407
- try {
408
- await this.runGit(repoDir, ["restore", "--worktree", "--", path]);
409
- }
410
- catch {
411
- // Newly-added or deleted paths may require git clean instead.
412
- }
413
- }
414
- await this.mapGit(() => this.runGit(repoDir, ["clean", "-f", "--", path]));
415
- return {
416
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
417
- };
418
- }
419
- async syncBranch(projectId, relativePath) {
420
- const repoDir = this.resolveRepoDir(projectId, relativePath);
421
- const repo = await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath));
422
- if (repo.detached || !repo.currentBranch) {
423
- throw new HttpError(409, "GIT_DETACHED_HEAD", "Cannot sync a detached HEAD. Check out a branch first.");
424
- }
425
- if (!repo.hasRemote) {
426
- throw new HttpError(409, "GIT_NO_REMOTE", "This repository does not have a remote configured.");
427
- }
428
- if (!repo.hasUpstream) {
429
- await this.mapGit(() => this.runGit(repoDir, [
430
- "push",
431
- "-u",
432
- "origin",
433
- repo.currentBranch ?? "",
434
- ]));
435
- }
436
- else {
437
- if ((repo.behind ?? 0) > 0) {
438
- const { files } = parsePorcelainV2((await this.runGit(repoDir, ["status", "--porcelain=v2"])).stdout);
439
- if (files.length > 0) {
440
- throw new HttpError(409, "GIT_DIRTY_WORKTREE", "Working tree has uncommitted changes. Commit or stash them before syncing.");
441
- }
442
- await this.mapGit(() => this.runGit(repoDir, ["pull", "--ff-only"]));
443
- }
444
- if ((repo.ahead ?? 0) > 0) {
445
- await this.mapGit(() => this.runGit(repoDir, ["push"]));
446
- }
447
- }
448
- return {
449
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
450
- };
451
- }
452
- async push(projectId, relativePath) {
453
- const repoDir = this.resolveRepoDir(projectId, relativePath);
454
- const { stdout: branchOut } = await this.runGit(repoDir, [
455
- "rev-parse",
456
- "--abbrev-ref",
457
- "HEAD",
458
- ]);
459
- const branch = branchOut.trim();
460
- if (!branch || branch === "HEAD") {
461
- throw new HttpError(409, "GIT_DETACHED_HEAD", "Cannot push from a detached HEAD. Check out a branch first.");
462
- }
463
- const args = (await this.hasUpstream(repoDir))
464
- ? ["push"]
465
- : ["push", "-u", "origin", branch];
466
- await this.mapGit(() => this.runGit(repoDir, args));
467
- return {
468
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
469
- };
470
- }
471
- async pull(projectId, relativePath) {
472
- const repoDir = this.resolveRepoDir(projectId, relativePath);
473
- if (!(await this.hasUpstream(repoDir))) {
474
- throw new HttpError(409, "GIT_NO_UPSTREAM", "Current branch has no upstream to pull from.");
475
- }
476
- const { files } = parsePorcelainV2((await this.runGit(repoDir, ["status", "--porcelain=v2"])).stdout);
477
- if (files.length > 0) {
478
- throw new HttpError(409, "GIT_DIRTY_WORKTREE", "Working tree has uncommitted changes. Commit or stash them before pulling.");
479
- }
480
- await this.mapGit(() => this.runGit(repoDir, ["pull", "--ff-only"]));
481
- return {
482
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
483
- };
484
- }
485
- async fetch(projectId, relativePath) {
486
- const repoDir = this.resolveRepoDir(projectId, relativePath);
487
- await this.mapGit(() => this.runGit(repoDir, ["fetch", "--prune"]));
488
- return {
489
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
490
- };
491
- }
492
- async hasUpstream(repoDir) {
493
- try {
494
- await this.runGit(repoDir, [
495
- "rev-parse",
496
- "--abbrev-ref",
497
- "--symbolic-full-name",
498
- "@{u}",
499
- ]);
500
- return true;
501
- }
502
- catch {
503
- return false;
504
- }
505
- }
506
- // --- GitHub via gh ---
507
- async githubStatus(projectId, relativePath) {
508
- const repoDir = this.resolveRepoDir(projectId, relativePath);
509
- try {
510
- await this.runGh(repoDir, ["--version"]);
511
- }
512
- catch {
513
- return {
514
- available: false,
515
- authenticated: false,
516
- login: null,
517
- reason: "GitHub CLI (gh) is not installed.",
518
- };
519
- }
520
- try {
521
- const { stdout } = await this.runGh(repoDir, [
522
- "api",
523
- "user",
524
- "--jq",
525
- ".login",
526
- ]);
527
- const login = stdout.trim();
528
- return {
529
- available: true,
530
- authenticated: login.length > 0,
531
- login: login.length > 0 ? login : null,
532
- };
533
- }
534
- catch (error) {
535
- return {
536
- available: true,
537
- authenticated: false,
538
- login: null,
539
- reason: error instanceof GitCommandError
540
- ? "Not authenticated. Run `gh auth login`."
541
- : "GitHub authentication check failed.",
542
- };
543
- }
544
- }
545
- async listOpenPrs(projectId, relativePath) {
546
- const repoDir = this.resolveRepoDir(projectId, relativePath);
547
- const { stdout } = await this.mapGh(() => this.runGh(repoDir, [
548
- "pr",
549
- "list",
550
- "--state",
551
- "open",
552
- "--limit",
553
- "50",
554
- "--json",
555
- "number,title,url,state,isDraft,headRefName,baseRefName,updatedAt",
556
- ]));
557
- const raw = JSON.parse(stdout || "[]");
558
- const prs = await Promise.all(raw.map(async (pr) => {
559
- const checks = await this.prChecks(repoDir, pr.number);
560
- return {
561
- number: pr.number,
562
- title: pr.title,
563
- url: pr.url,
564
- state: pr.state,
565
- isDraft: pr.isDraft,
566
- headRefName: pr.headRefName,
567
- baseRefName: pr.baseRefName,
568
- updatedAt: pr.updatedAt,
569
- checks,
570
- };
571
- }));
572
- return { prs };
573
- }
574
- async prChecks(repoDir, number) {
575
- try {
576
- const { stdout } = await this.runGh(repoDir, [
577
- "pr",
578
- "checks",
579
- String(number),
580
- "--json",
581
- "name,state,link",
582
- ]);
583
- const raw = JSON.parse(stdout || "[]");
584
- return summarizeChecks(raw);
585
- }
586
- catch {
587
- return {
588
- status: "none",
589
- total: 0,
590
- passed: 0,
591
- failed: 0,
592
- pending: 0,
593
- runs: [],
594
- };
595
- }
596
- }
597
- async prDetail(projectId, relativePath, number) {
598
- const repoDir = this.resolveRepoDir(projectId, relativePath);
599
- const { stdout } = await this.mapGh(() => this.runGh(repoDir, [
600
- "pr",
601
- "view",
602
- String(number),
603
- "--json",
604
- "number,title,url,state,isDraft,headRefName,baseRefName,updatedAt,createdAt,body,author,additions,deletions,changedFiles,files,commits,mergeable,reviewDecision",
605
- ]));
606
- const raw = JSON.parse(stdout || "{}");
607
- const checks = await this.prChecks(repoDir, number);
608
- const files = (raw.files ?? []).map((file) => ({
609
- path: file.path,
610
- additions: file.additions ?? 0,
611
- deletions: file.deletions ?? 0,
612
- }));
613
- const commits = (raw.commits ?? []).map((commit) => ({
614
- oid: commit.oid,
615
- abbrev: commit.oid.slice(0, 7),
616
- messageHeadline: commit.messageHeadline ?? "",
617
- authoredDate: commit.authoredDate,
618
- authorName: commit.authors?.[0]?.name,
619
- }));
620
- return {
621
- number: raw.number,
622
- title: raw.title,
623
- url: raw.url,
624
- state: raw.state,
625
- isDraft: raw.isDraft,
626
- headRefName: raw.headRefName,
627
- baseRefName: raw.baseRefName,
628
- updatedAt: raw.updatedAt,
629
- createdAt: raw.createdAt,
630
- body: raw.body ?? "",
631
- author: raw.author?.login ?? null,
632
- additions: raw.additions ?? 0,
633
- deletions: raw.deletions ?? 0,
634
- changedFiles: raw.changedFiles ?? files.length,
635
- mergeable: raw.mergeable ?? null,
636
- reviewDecision: raw.reviewDecision ?? null,
637
- files,
638
- commits,
639
- checks,
640
- };
641
- }
642
- async checkoutPr(projectId, relativePath, number) {
643
- const repoDir = this.resolveRepoDir(projectId, relativePath);
644
- const { files } = parsePorcelainV2((await this.runGit(repoDir, ["status", "--porcelain=v2"])).stdout);
645
- if (files.length > 0) {
646
- throw new HttpError(409, "GIT_DIRTY_WORKTREE", "Working tree has uncommitted changes. Commit or stash them before checking out a PR.");
647
- }
648
- await this.mapGh(() => this.runGh(repoDir, ["pr", "checkout", String(number)]));
649
- return {
650
- repo: await this.summarizeRepo(repoDir, relativePath, this.repoName(projectId, relativePath)),
651
- number,
652
- };
653
- }
654
- // --- error mapping ---
655
- async mapGit(fn) {
656
- try {
657
- return await fn();
658
- }
659
- catch (error) {
660
- if (error instanceof GitCommandError) {
661
- throw new HttpError(409, "GIT_COMMAND_FAILED", error.message);
662
- }
663
- throw error;
664
- }
665
- }
666
- async mapGh(fn) {
667
- try {
668
- return await fn();
669
- }
670
- catch (error) {
671
- if (error instanceof GitCommandError) {
672
- const status = error.code === null ? 503 : 409;
673
- throw new HttpError(status, "GH_COMMAND_FAILED", error.message);
674
- }
675
- throw error;
676
- }
677
- }
678
- }
679
- export function summarizeChecks(runs) {
680
- let passed = 0;
681
- let failed = 0;
682
- let pending = 0;
683
- const normalized = runs.map((run) => {
684
- const state = run.state.toUpperCase();
685
- if (["SUCCESS", "NEUTRAL", "SKIPPED"].includes(state))
686
- passed += 1;
687
- else if ([
688
- "FAILURE",
689
- "ERROR",
690
- "CANCELLED",
691
- "TIMED_OUT",
692
- "ACTION_REQUIRED",
693
- ].includes(state))
694
- failed += 1;
695
- else
696
- pending += 1;
697
- return {
698
- name: run.name,
699
- status: state.toLowerCase(),
700
- conclusion: state.toLowerCase(),
701
- url: run.link,
702
- };
703
- });
704
- const total = normalized.length;
705
- let status = "none";
706
- if (total > 0) {
707
- if (failed > 0)
708
- status = "failing";
709
- else if (pending > 0)
710
- status = "pending";
711
- else
712
- status = "passing";
713
- }
714
- return { status, total, passed, failed, pending, runs: normalized };
715
- }
716
- //# sourceMappingURL=git-service.js.map