@aiden-ade/sandbox-agent 0.1.60 → 0.1.62

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 (342) hide show
  1. package/dist/index.cjs +465 -342
  2. package/package.json +1 -1
  3. package/dist/__tests__/binding-switch-git.test.d.ts +0 -2
  4. package/dist/__tests__/binding-switch-git.test.d.ts.map +0 -1
  5. package/dist/__tests__/binding-switch-git.test.js +0 -610
  6. package/dist/__tests__/binding-switch-git.test.js.map +0 -1
  7. package/dist/__tests__/cli-ensure-install.test.d.ts +0 -2
  8. package/dist/__tests__/cli-ensure-install.test.d.ts.map +0 -1
  9. package/dist/__tests__/cli-ensure-install.test.js +0 -109
  10. package/dist/__tests__/cli-ensure-install.test.js.map +0 -1
  11. package/dist/__tests__/cli-executable.test.d.ts +0 -2
  12. package/dist/__tests__/cli-executable.test.d.ts.map +0 -1
  13. package/dist/__tests__/cli-executable.test.js +0 -129
  14. package/dist/__tests__/cli-executable.test.js.map +0 -1
  15. package/dist/__tests__/cli-help.test.d.ts +0 -2
  16. package/dist/__tests__/cli-help.test.d.ts.map +0 -1
  17. package/dist/__tests__/cli-help.test.js +0 -34
  18. package/dist/__tests__/cli-help.test.js.map +0 -1
  19. package/dist/__tests__/computer-readiness.test.d.ts +0 -2
  20. package/dist/__tests__/computer-readiness.test.d.ts.map +0 -1
  21. package/dist/__tests__/computer-readiness.test.js +0 -63
  22. package/dist/__tests__/computer-readiness.test.js.map +0 -1
  23. package/dist/__tests__/core-agent-workflow-context.test.d.ts +0 -2
  24. package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +0 -1
  25. package/dist/__tests__/core-agent-workflow-context.test.js +0 -139
  26. package/dist/__tests__/core-agent-workflow-context.test.js.map +0 -1
  27. package/dist/__tests__/daemon-reconcile-ask.test.d.ts +0 -2
  28. package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +0 -1
  29. package/dist/__tests__/daemon-reconcile-ask.test.js +0 -86
  30. package/dist/__tests__/daemon-reconcile-ask.test.js.map +0 -1
  31. package/dist/__tests__/daemon-socket.integration.test.d.ts +0 -2
  32. package/dist/__tests__/daemon-socket.integration.test.d.ts.map +0 -1
  33. package/dist/__tests__/daemon-socket.integration.test.js +0 -450
  34. package/dist/__tests__/daemon-socket.integration.test.js.map +0 -1
  35. package/dist/__tests__/daemon.test.d.ts +0 -2
  36. package/dist/__tests__/daemon.test.d.ts.map +0 -1
  37. package/dist/__tests__/daemon.test.js +0 -3975
  38. package/dist/__tests__/daemon.test.js.map +0 -1
  39. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +0 -2
  40. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +0 -1
  41. package/dist/__tests__/ensure-shared-checkout-branch.test.js +0 -129
  42. package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +0 -1
  43. package/dist/__tests__/event-outbox-persist-failure.test.d.ts +0 -2
  44. package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +0 -1
  45. package/dist/__tests__/event-outbox-persist-failure.test.js +0 -84
  46. package/dist/__tests__/event-outbox-persist-failure.test.js.map +0 -1
  47. package/dist/__tests__/event-outbox.test.d.ts +0 -2
  48. package/dist/__tests__/event-outbox.test.d.ts.map +0 -1
  49. package/dist/__tests__/event-outbox.test.js +0 -256
  50. package/dist/__tests__/event-outbox.test.js.map +0 -1
  51. package/dist/__tests__/fake-provider-cli.test.d.ts +0 -2
  52. package/dist/__tests__/fake-provider-cli.test.d.ts.map +0 -1
  53. package/dist/__tests__/fake-provider-cli.test.js +0 -46
  54. package/dist/__tests__/fake-provider-cli.test.js.map +0 -1
  55. package/dist/__tests__/generated-images.test.d.ts +0 -2
  56. package/dist/__tests__/generated-images.test.d.ts.map +0 -1
  57. package/dist/__tests__/generated-images.test.js +0 -132
  58. package/dist/__tests__/generated-images.test.js.map +0 -1
  59. package/dist/__tests__/lifecycle-logger.test.d.ts +0 -2
  60. package/dist/__tests__/lifecycle-logger.test.d.ts.map +0 -1
  61. package/dist/__tests__/lifecycle-logger.test.js +0 -49
  62. package/dist/__tests__/lifecycle-logger.test.js.map +0 -1
  63. package/dist/__tests__/local-skill-scan.test.d.ts +0 -2
  64. package/dist/__tests__/local-skill-scan.test.d.ts.map +0 -1
  65. package/dist/__tests__/local-skill-scan.test.js +0 -91
  66. package/dist/__tests__/local-skill-scan.test.js.map +0 -1
  67. package/dist/__tests__/local-workspace-migration.test.d.ts +0 -2
  68. package/dist/__tests__/local-workspace-migration.test.d.ts.map +0 -1
  69. package/dist/__tests__/local-workspace-migration.test.js +0 -195
  70. package/dist/__tests__/local-workspace-migration.test.js.map +0 -1
  71. package/dist/__tests__/mcp-inspect-timeout.test.d.ts +0 -2
  72. package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +0 -1
  73. package/dist/__tests__/mcp-inspect-timeout.test.js +0 -97
  74. package/dist/__tests__/mcp-inspect-timeout.test.js.map +0 -1
  75. package/dist/__tests__/mcp-readiness.test.d.ts +0 -2
  76. package/dist/__tests__/mcp-readiness.test.d.ts.map +0 -1
  77. package/dist/__tests__/mcp-readiness.test.js +0 -267
  78. package/dist/__tests__/mcp-readiness.test.js.map +0 -1
  79. package/dist/__tests__/mcp-registration-cli.test.d.ts +0 -2
  80. package/dist/__tests__/mcp-registration-cli.test.d.ts.map +0 -1
  81. package/dist/__tests__/mcp-registration-cli.test.js +0 -71
  82. package/dist/__tests__/mcp-registration-cli.test.js.map +0 -1
  83. package/dist/__tests__/mcp-registration.test.d.ts +0 -2
  84. package/dist/__tests__/mcp-registration.test.d.ts.map +0 -1
  85. package/dist/__tests__/mcp-registration.test.js +0 -426
  86. package/dist/__tests__/mcp-registration.test.js.map +0 -1
  87. package/dist/__tests__/model-scan-runner.test.d.ts +0 -2
  88. package/dist/__tests__/model-scan-runner.test.d.ts.map +0 -1
  89. package/dist/__tests__/model-scan-runner.test.js +0 -67
  90. package/dist/__tests__/model-scan-runner.test.js.map +0 -1
  91. package/dist/__tests__/network-diagnostics.test.d.ts +0 -2
  92. package/dist/__tests__/network-diagnostics.test.d.ts.map +0 -1
  93. package/dist/__tests__/network-diagnostics.test.js +0 -26
  94. package/dist/__tests__/network-diagnostics.test.js.map +0 -1
  95. package/dist/__tests__/observable-map.test.d.ts +0 -2
  96. package/dist/__tests__/observable-map.test.d.ts.map +0 -1
  97. package/dist/__tests__/observable-map.test.js +0 -54
  98. package/dist/__tests__/observable-map.test.js.map +0 -1
  99. package/dist/__tests__/provider-auth-preflight.test.d.ts +0 -2
  100. package/dist/__tests__/provider-auth-preflight.test.d.ts.map +0 -1
  101. package/dist/__tests__/provider-auth-preflight.test.js +0 -123
  102. package/dist/__tests__/provider-auth-preflight.test.js.map +0 -1
  103. package/dist/__tests__/provider-model-discovery.test.d.ts +0 -2
  104. package/dist/__tests__/provider-model-discovery.test.d.ts.map +0 -1
  105. package/dist/__tests__/provider-model-discovery.test.js +0 -472
  106. package/dist/__tests__/provider-model-discovery.test.js.map +0 -1
  107. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +0 -2
  108. package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +0 -1
  109. package/dist/__tests__/remove-worktrees-if-clean.test.js +0 -221
  110. package/dist/__tests__/remove-worktrees-if-clean.test.js.map +0 -1
  111. package/dist/__tests__/resume-fallback-env.test.d.ts +0 -2
  112. package/dist/__tests__/resume-fallback-env.test.d.ts.map +0 -1
  113. package/dist/__tests__/resume-fallback-env.test.js +0 -28
  114. package/dist/__tests__/resume-fallback-env.test.js.map +0 -1
  115. package/dist/__tests__/run-journal.test.d.ts +0 -2
  116. package/dist/__tests__/run-journal.test.d.ts.map +0 -1
  117. package/dist/__tests__/run-journal.test.js +0 -121
  118. package/dist/__tests__/run-journal.test.js.map +0 -1
  119. package/dist/__tests__/run-start-gate.test.d.ts +0 -2
  120. package/dist/__tests__/run-start-gate.test.d.ts.map +0 -1
  121. package/dist/__tests__/run-start-gate.test.js +0 -29
  122. package/dist/__tests__/run-start-gate.test.js.map +0 -1
  123. package/dist/__tests__/runtime-capabilities-sync.test.d.ts +0 -2
  124. package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +0 -1
  125. package/dist/__tests__/runtime-capabilities-sync.test.js +0 -66
  126. package/dist/__tests__/runtime-capabilities-sync.test.js.map +0 -1
  127. package/dist/__tests__/runtime-config.test.d.ts +0 -2
  128. package/dist/__tests__/runtime-config.test.d.ts.map +0 -1
  129. package/dist/__tests__/runtime-config.test.js +0 -102
  130. package/dist/__tests__/runtime-config.test.js.map +0 -1
  131. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +0 -2
  132. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +0 -1
  133. package/dist/__tests__/runtime-presenter-heartbeat.test.js +0 -159
  134. package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +0 -1
  135. package/dist/__tests__/sandbox-outbox.test.d.ts +0 -2
  136. package/dist/__tests__/sandbox-outbox.test.d.ts.map +0 -1
  137. package/dist/__tests__/sandbox-outbox.test.js +0 -214
  138. package/dist/__tests__/sandbox-outbox.test.js.map +0 -1
  139. package/dist/__tests__/sandbox-workflow-context.test.d.ts +0 -2
  140. package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +0 -1
  141. package/dist/__tests__/sandbox-workflow-context.test.js +0 -396
  142. package/dist/__tests__/sandbox-workflow-context.test.js.map +0 -1
  143. package/dist/__tests__/service-manager.test.d.ts +0 -2
  144. package/dist/__tests__/service-manager.test.d.ts.map +0 -1
  145. package/dist/__tests__/service-manager.test.js +0 -50
  146. package/dist/__tests__/service-manager.test.js.map +0 -1
  147. package/dist/__tests__/sleep-inhibitor.test.d.ts +0 -2
  148. package/dist/__tests__/sleep-inhibitor.test.d.ts.map +0 -1
  149. package/dist/__tests__/sleep-inhibitor.test.js +0 -236
  150. package/dist/__tests__/sleep-inhibitor.test.js.map +0 -1
  151. package/dist/__tests__/status-local-workspace.test.d.ts +0 -2
  152. package/dist/__tests__/status-local-workspace.test.d.ts.map +0 -1
  153. package/dist/__tests__/status-local-workspace.test.js +0 -121
  154. package/dist/__tests__/status-local-workspace.test.js.map +0 -1
  155. package/dist/__tests__/suspension-detector.test.d.ts +0 -2
  156. package/dist/__tests__/suspension-detector.test.d.ts.map +0 -1
  157. package/dist/__tests__/suspension-detector.test.js +0 -112
  158. package/dist/__tests__/suspension-detector.test.js.map +0 -1
  159. package/dist/__tests__/web-presenter-parent-events.test.d.ts +0 -2
  160. package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +0 -1
  161. package/dist/__tests__/web-presenter-parent-events.test.js +0 -130
  162. package/dist/__tests__/web-presenter-parent-events.test.js.map +0 -1
  163. package/dist/__tests__/workspace-relocation.test.d.ts +0 -2
  164. package/dist/__tests__/workspace-relocation.test.d.ts.map +0 -1
  165. package/dist/__tests__/workspace-relocation.test.js +0 -66
  166. package/dist/__tests__/workspace-relocation.test.js.map +0 -1
  167. package/dist/__tests__/workspace-run-lease.test.d.ts +0 -2
  168. package/dist/__tests__/workspace-run-lease.test.d.ts.map +0 -1
  169. package/dist/__tests__/workspace-run-lease.test.js +0 -230
  170. package/dist/__tests__/workspace-run-lease.test.js.map +0 -1
  171. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +0 -2
  172. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +0 -1
  173. package/dist/__tests__/ws-client-heartbeat-volatile.test.js +0 -61
  174. package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +0 -1
  175. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +0 -2
  176. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +0 -1
  177. package/dist/__tests__/ws-client-heartbeat.integration.test.js +0 -109
  178. package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +0 -1
  179. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +0 -2
  180. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +0 -1
  181. package/dist/__tests__/ws-client-user-message-ack.integration.test.js +0 -167
  182. package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +0 -1
  183. package/dist/aiden-system-prompt.d.ts +0 -6
  184. package/dist/aiden-system-prompt.d.ts.map +0 -1
  185. package/dist/aiden-system-prompt.js +0 -6
  186. package/dist/aiden-system-prompt.js.map +0 -1
  187. package/dist/binding-switch-git.d.ts +0 -26
  188. package/dist/binding-switch-git.d.ts.map +0 -1
  189. package/dist/binding-switch-git.js +0 -973
  190. package/dist/binding-switch-git.js.map +0 -1
  191. package/dist/cli-ensure-install.d.ts +0 -39
  192. package/dist/cli-ensure-install.d.ts.map +0 -1
  193. package/dist/cli-ensure-install.js +0 -133
  194. package/dist/cli-ensure-install.js.map +0 -1
  195. package/dist/cli-executable.d.ts +0 -97
  196. package/dist/cli-executable.d.ts.map +0 -1
  197. package/dist/cli-executable.js +0 -432
  198. package/dist/cli-executable.js.map +0 -1
  199. package/dist/cli-help.d.ts +0 -7
  200. package/dist/cli-help.d.ts.map +0 -1
  201. package/dist/cli-help.js +0 -49
  202. package/dist/cli-help.js.map +0 -1
  203. package/dist/computer-readiness.d.ts +0 -42
  204. package/dist/computer-readiness.d.ts.map +0 -1
  205. package/dist/computer-readiness.js +0 -191
  206. package/dist/computer-readiness.js.map +0 -1
  207. package/dist/core-agent.d.ts +0 -47
  208. package/dist/core-agent.d.ts.map +0 -1
  209. package/dist/core-agent.js +0 -364
  210. package/dist/core-agent.js.map +0 -1
  211. package/dist/daemon.d.ts +0 -392
  212. package/dist/daemon.d.ts.map +0 -1
  213. package/dist/daemon.js +0 -4711
  214. package/dist/daemon.js.map +0 -1
  215. package/dist/event-outbox.d.ts +0 -83
  216. package/dist/event-outbox.d.ts.map +0 -1
  217. package/dist/event-outbox.js +0 -440
  218. package/dist/event-outbox.js.map +0 -1
  219. package/dist/fake-provider-cli.d.ts +0 -13
  220. package/dist/fake-provider-cli.d.ts.map +0 -1
  221. package/dist/fake-provider-cli.js +0 -53
  222. package/dist/fake-provider-cli.js.map +0 -1
  223. package/dist/generated-images.d.ts +0 -2
  224. package/dist/generated-images.d.ts.map +0 -1
  225. package/dist/generated-images.js +0 -2
  226. package/dist/generated-images.js.map +0 -1
  227. package/dist/index.d.ts +0 -6
  228. package/dist/index.d.ts.map +0 -1
  229. package/dist/index.js +0 -209
  230. package/dist/index.js.map +0 -1
  231. package/dist/lifecycle-logger.d.ts +0 -25
  232. package/dist/lifecycle-logger.d.ts.map +0 -1
  233. package/dist/lifecycle-logger.js +0 -73
  234. package/dist/lifecycle-logger.js.map +0 -1
  235. package/dist/local-skill-scan.d.ts +0 -21
  236. package/dist/local-skill-scan.d.ts.map +0 -1
  237. package/dist/local-skill-scan.js +0 -109
  238. package/dist/local-skill-scan.js.map +0 -1
  239. package/dist/local-workspace-migration.d.ts +0 -68
  240. package/dist/local-workspace-migration.d.ts.map +0 -1
  241. package/dist/local-workspace-migration.js +0 -157
  242. package/dist/local-workspace-migration.js.map +0 -1
  243. package/dist/mcp-readiness.d.ts +0 -59
  244. package/dist/mcp-readiness.d.ts.map +0 -1
  245. package/dist/mcp-readiness.js +0 -202
  246. package/dist/mcp-readiness.js.map +0 -1
  247. package/dist/mcp-registration.d.ts +0 -75
  248. package/dist/mcp-registration.d.ts.map +0 -1
  249. package/dist/mcp-registration.js +0 -563
  250. package/dist/mcp-registration.js.map +0 -1
  251. package/dist/model-scan-runner.d.ts +0 -15
  252. package/dist/model-scan-runner.d.ts.map +0 -1
  253. package/dist/model-scan-runner.js +0 -51
  254. package/dist/model-scan-runner.js.map +0 -1
  255. package/dist/network-diagnostics.d.ts +0 -8
  256. package/dist/network-diagnostics.d.ts.map +0 -1
  257. package/dist/network-diagnostics.js +0 -56
  258. package/dist/network-diagnostics.js.map +0 -1
  259. package/dist/observable-map.d.ts +0 -25
  260. package/dist/observable-map.d.ts.map +0 -1
  261. package/dist/observable-map.js +0 -42
  262. package/dist/observable-map.js.map +0 -1
  263. package/dist/provider-auth-preflight.d.ts +0 -22
  264. package/dist/provider-auth-preflight.d.ts.map +0 -1
  265. package/dist/provider-auth-preflight.js +0 -110
  266. package/dist/provider-auth-preflight.js.map +0 -1
  267. package/dist/provider-model-discovery.d.ts +0 -38
  268. package/dist/provider-model-discovery.d.ts.map +0 -1
  269. package/dist/provider-model-discovery.js +0 -519
  270. package/dist/provider-model-discovery.js.map +0 -1
  271. package/dist/resume-fallback-env.d.ts +0 -20
  272. package/dist/resume-fallback-env.d.ts.map +0 -1
  273. package/dist/resume-fallback-env.js +0 -30
  274. package/dist/resume-fallback-env.js.map +0 -1
  275. package/dist/run-journal.d.ts +0 -53
  276. package/dist/run-journal.d.ts.map +0 -1
  277. package/dist/run-journal.js +0 -193
  278. package/dist/run-journal.js.map +0 -1
  279. package/dist/run-start-gate.d.ts +0 -9
  280. package/dist/run-start-gate.d.ts.map +0 -1
  281. package/dist/run-start-gate.js +0 -24
  282. package/dist/run-start-gate.js.map +0 -1
  283. package/dist/runtime-backends.d.ts +0 -2
  284. package/dist/runtime-backends.d.ts.map +0 -1
  285. package/dist/runtime-backends.js +0 -2
  286. package/dist/runtime-backends.js.map +0 -1
  287. package/dist/runtime-capabilities-sync.d.ts +0 -33
  288. package/dist/runtime-capabilities-sync.d.ts.map +0 -1
  289. package/dist/runtime-capabilities-sync.js +0 -56
  290. package/dist/runtime-capabilities-sync.js.map +0 -1
  291. package/dist/runtime-config.d.ts +0 -24
  292. package/dist/runtime-config.d.ts.map +0 -1
  293. package/dist/runtime-config.js +0 -124
  294. package/dist/runtime-config.js.map +0 -1
  295. package/dist/sandbox-outbox.d.ts +0 -122
  296. package/dist/sandbox-outbox.d.ts.map +0 -1
  297. package/dist/sandbox-outbox.js +0 -180
  298. package/dist/sandbox-outbox.js.map +0 -1
  299. package/dist/sandbox.d.ts +0 -44
  300. package/dist/sandbox.d.ts.map +0 -1
  301. package/dist/sandbox.js +0 -438
  302. package/dist/sandbox.js.map +0 -1
  303. package/dist/service-manager.d.ts +0 -28
  304. package/dist/service-manager.d.ts.map +0 -1
  305. package/dist/service-manager.js +0 -259
  306. package/dist/service-manager.js.map +0 -1
  307. package/dist/sleep-inhibitor.d.ts +0 -111
  308. package/dist/sleep-inhibitor.d.ts.map +0 -1
  309. package/dist/sleep-inhibitor.js +0 -412
  310. package/dist/sleep-inhibitor.js.map +0 -1
  311. package/dist/suspension-detector.d.ts +0 -48
  312. package/dist/suspension-detector.d.ts.map +0 -1
  313. package/dist/suspension-detector.js +0 -89
  314. package/dist/suspension-detector.js.map +0 -1
  315. package/dist/types.d.ts +0 -6
  316. package/dist/types.d.ts.map +0 -1
  317. package/dist/types.js +0 -6
  318. package/dist/types.js.map +0 -1
  319. package/dist/updater.d.ts +0 -15
  320. package/dist/updater.d.ts.map +0 -1
  321. package/dist/updater.js +0 -50
  322. package/dist/updater.js.map +0 -1
  323. package/dist/version.d.ts +0 -2
  324. package/dist/version.d.ts.map +0 -1
  325. package/dist/version.js +0 -2
  326. package/dist/version.js.map +0 -1
  327. package/dist/web-presenter.d.ts +0 -55
  328. package/dist/web-presenter.d.ts.map +0 -1
  329. package/dist/web-presenter.js +0 -265
  330. package/dist/web-presenter.js.map +0 -1
  331. package/dist/workspace-relocation.d.ts +0 -22
  332. package/dist/workspace-relocation.d.ts.map +0 -1
  333. package/dist/workspace-relocation.js +0 -90
  334. package/dist/workspace-relocation.js.map +0 -1
  335. package/dist/workspace-run-lease.d.ts +0 -97
  336. package/dist/workspace-run-lease.d.ts.map +0 -1
  337. package/dist/workspace-run-lease.js +0 -241
  338. package/dist/workspace-run-lease.js.map +0 -1
  339. package/dist/ws-client.d.ts +0 -194
  340. package/dist/ws-client.d.ts.map +0 -1
  341. package/dist/ws-client.js +0 -282
  342. package/dist/ws-client.js.map +0 -1
@@ -1,191 +0,0 @@
1
- import { accessSync, constants, existsSync, statSync } from "node:fs";
2
- import { configExistsAtPath } from "./runtime-config.js";
3
- export class WorkspaceAccessTracker {
4
- inspect;
5
- issue = null;
6
- constructor(inspect = (path) => inspectWorkspaceReadiness(path)) {
7
- this.inspect = inspect;
8
- }
9
- track(path, readiness) {
10
- if (readiness.ready) {
11
- this.issue = null;
12
- return;
13
- }
14
- this.issue = { path, readiness };
15
- }
16
- recheck() {
17
- if (!this.issue)
18
- return null;
19
- const readiness = this.inspect(this.issue.path);
20
- if (readiness.ready) {
21
- this.issue = null;
22
- return readiness;
23
- }
24
- this.issue = { path: this.issue.path, readiness };
25
- return readiness;
26
- }
27
- recoveryPath() {
28
- return this.issue?.path ?? null;
29
- }
30
- currentReadiness() {
31
- return this.issue?.readiness ?? null;
32
- }
33
- }
34
- const DEFAULT_WORKSPACE_PROBE = {
35
- stat: (path) => statSync(path),
36
- access: (path, mode) => accessSync(path, mode),
37
- exists: (path) => existsSync(path),
38
- };
39
- function workspaceVolumeRoot(path) {
40
- const windowsDrive = path.match(/^([A-Za-z]):[\\/]/);
41
- if (windowsDrive)
42
- return `${windowsDrive[1]}:\\`;
43
- const parts = path.replace(/\\/g, "/").split("/").filter(Boolean);
44
- if (parts[0] === "Volumes" && parts[1])
45
- return `/Volumes/${parts[1]}`;
46
- if (parts[0] === "mnt" && parts[1])
47
- return `/mnt/${parts[1]}`;
48
- if (parts[0] === "media" && parts[1] && parts[2]) {
49
- return `/media/${parts[1]}/${parts[2]}`;
50
- }
51
- if (parts[0] === "run" && parts[1] === "media" && parts[2] && parts[3]) {
52
- return `/run/media/${parts[2]}/${parts[3]}`;
53
- }
54
- return null;
55
- }
56
- function workspaceFailure(path, error, probe) {
57
- const code = error?.code;
58
- if (code === "EACCES" || code === "EPERM") {
59
- return {
60
- ready: false,
61
- code: "workspace_permission_denied",
62
- message: "Alan needs permission to access this project folder.",
63
- action: { kind: "open_computers", label: "Allow access" },
64
- };
65
- }
66
- const volumeRoot = workspaceVolumeRoot(path);
67
- const volumeError = ["EIO", "ENODEV", "ENOTCONN", "ENXIO", "ESTALE"].includes(code ?? "");
68
- const missingVolume = code === "ENOENT" && volumeRoot !== null && !probe.exists(volumeRoot);
69
- if (volumeError || missingVolume) {
70
- return {
71
- ready: false,
72
- code: "workspace_volume_unavailable",
73
- message: "The drive containing this project is unavailable. Connect it and Alan will retry.",
74
- action: { kind: "open_computers", label: "View computer" },
75
- };
76
- }
77
- return {
78
- ready: false,
79
- code: "workspace_missing",
80
- message: "This project folder was moved or removed. Locate it before starting the run.",
81
- action: { kind: "open_computers", label: "Locate project" },
82
- };
83
- }
84
- export function inspectWorkspaceReadiness(workspacePath, probe = DEFAULT_WORKSPACE_PROBE) {
85
- if (workspacePath === undefined) {
86
- return {
87
- ready: true,
88
- message: "No explicit workspace path is required.",
89
- action: null,
90
- };
91
- }
92
- if (typeof workspacePath !== "string" || workspacePath.length === 0) {
93
- return workspaceFailure("", Object.assign(new Error("missing"), { code: "ENOENT" }), probe);
94
- }
95
- try {
96
- const stat = probe.stat(workspacePath);
97
- if (!stat.isDirectory()) {
98
- return workspaceFailure(workspacePath, Object.assign(new Error("not a directory"), { code: "ENOTDIR" }), probe);
99
- }
100
- probe.access(workspacePath, constants.R_OK | constants.W_OK | constants.X_OK);
101
- return {
102
- ready: true,
103
- message: "Workspace path is configured and accessible.",
104
- action: null,
105
- };
106
- }
107
- catch (error) {
108
- return workspaceFailure(workspacePath, error, probe);
109
- }
110
- }
111
- function check(key, status, message, options) {
112
- return {
113
- key,
114
- status,
115
- code: options?.code ?? null,
116
- message,
117
- action: options?.action ?? null,
118
- checkedAtMs: options?.nowMs ?? Date.now(),
119
- };
120
- }
121
- export function buildComputerReadiness(input) {
122
- const nowMs = input.nowMs ?? Date.now();
123
- const configPresent = configExistsAtPath(input.configPath);
124
- const configMatchesProfile = !configPresent ||
125
- !input.configEndpointProfile ||
126
- input.configEndpointProfile === input.endpointProfile ||
127
- (input.endpointProfile === "custom" && input.configEndpointProfile === "custom");
128
- const workspaceReadiness = inspectWorkspaceReadiness(input.workspacePath);
129
- return [
130
- check("machine_discovered", input.runtimeId ? "pass" : "fail", input.runtimeId ? "Runtime identity is configured." : "Runtime identity is missing.", { nowMs }),
131
- check("config_present", configPresent ? "pass" : "fail", configPresent
132
- ? "Selected profile config file exists."
133
- : "Selected profile config file is missing. Run setup or login.", {
134
- nowMs,
135
- code: configPresent ? undefined : "config_missing",
136
- action: configPresent ? null : { kind: "run_setup", label: "Run setup" },
137
- }),
138
- check("config_matches_profile", !configMatchesProfile ? "fail" : input.endpointMismatchDetail ? "warn" : "pass", !configMatchesProfile
139
- ? "Config profile does not match the selected environment."
140
- : input.endpointMismatchDetail
141
- ? `${input.endpointMismatchDetail} The daemon is using the profile endpoints instead — re-run setup to repair the stored config.`
142
- : "Config profile matches the selected environment.", {
143
- nowMs,
144
- code: !configMatchesProfile
145
- ? "config_profile_mismatch"
146
- : input.endpointMismatchDetail
147
- ? "config_endpoint_mismatch"
148
- : undefined,
149
- action: !configMatchesProfile || input.endpointMismatchDetail
150
- ? { kind: "run_setup", label: "Re-run setup" }
151
- : null,
152
- }),
153
- check("runtime_auth_valid", input.runtimeAuthValid ? "pass" : "fail", input.runtimeAuthValid ? "Runtime token is present." : "Runtime token is missing or invalid.", {
154
- nowMs,
155
- code: input.runtimeAuthValid ? undefined : "runtime_auth_invalid",
156
- action: input.runtimeAuthValid ? null : { kind: "run_setup", label: "Refresh setup" },
157
- }),
158
- check("local_api_healthy", input.localApiHealthy ? "pass" : "fail", input.localApiHealthy
159
- ? "Local daemon API is reachable."
160
- : "Local daemon API is unreachable or token mismatched.", {
161
- nowMs,
162
- code: input.localApiHealthy ? undefined : "local_api_unhealthy",
163
- action: input.localApiHealthy ? null : { kind: "reconnect", label: "Reconnect" },
164
- }),
165
- check("ws_connected", input.connected ? "pass" : "fail", input.connected
166
- ? "Daemon is connected to Alan backend."
167
- : "Daemon is disconnected from Alan backend.", {
168
- nowMs,
169
- code: input.connected ? undefined : "ws_disconnected",
170
- action: input.connected ? null : { kind: "reconnect", label: "Reconnect" },
171
- }),
172
- check("workspace_ready", workspaceReadiness.ready ? "pass" : "fail", workspaceReadiness.message, {
173
- nowMs,
174
- code: workspaceReadiness.code,
175
- action: workspaceReadiness.action,
176
- }),
177
- check("provider_available", input.providerAvailable === false ? "fail" : "pass", input.providerAvailable === false
178
- ? "Requested provider CLI is not available."
179
- : "Provider CLI availability looks good.", {
180
- nowMs,
181
- code: input.providerAvailable === false ? "provider_unavailable" : undefined,
182
- action: input.providerAvailable === false
183
- ? { kind: "install_provider", label: "Install provider" }
184
- : null,
185
- }),
186
- check("protocol_compatible", input.protocolCompatible === false ? "fail" : "pass", input.protocolCompatible === false
187
- ? "Daemon protocol is incompatible with backend."
188
- : "Daemon protocol is compatible.", { nowMs, code: input.protocolCompatible === false ? "protocol_mismatch" : undefined }),
189
- ];
190
- }
191
- //# sourceMappingURL=computer-readiness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"computer-readiness.js","sourceRoot":"","sources":["../src/computer-readiness.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Sandbox CoreAgent — E2B-specific subclass of BaseMachineAgent.
3
- *
4
- * Platform responsibilities:
5
- * - buildCliEnvironment: extend process.env + inject E2B node bin path
6
- * - buildExtraSystemPromptParts: inject artifact IDs from ALAN_* env vars
7
- * - submitAnswer / submitPlanApproval: resolve interactive-tool prompts relayed via WS
8
- *
9
- * Everything else (retry loop, system-prompt assembly, backend selection) lives
10
- * in BaseMachineAgent.
11
- */
12
- import type { ChildProcessWithoutNullStreams } from "node:child_process";
13
- import { type AgentRuntimeConfig, BaseMachineAgent } from "@alan-ai/agent-core";
14
- import type { AgentConfig } from "./types.js";
15
- export declare class CoreAgent extends BaseMachineAgent {
16
- private childProcess;
17
- private _aborted;
18
- private providerApiKey;
19
- private onProviderSpawned?;
20
- /** How long to wait after SIGTERM before escalating to SIGKILL. */
21
- private static readonly SIGKILL_DELAY_MS;
22
- constructor(presenter: ConstructorParameters<typeof BaseMachineAgent>[0], runtime: AgentRuntimeConfig & {
23
- providerApiKey?: string;
24
- onProviderSpawned?: (pid: number) => void;
25
- });
26
- abort(): void;
27
- kill(): boolean;
28
- private killChildProcess;
29
- /**
30
- * Re-resolve this agent's CLI executable from scratch when a spawn fails
31
- * ENOENT. The daemon caches resolved CLI paths, so a provider binary that was
32
- * moved or reinstalled mid-session would otherwise fail every turn with
33
- * "CLI command not found" until the daemon restarts. Invalidating the cache
34
- * and re-resolving once lets the current run recover against the new location.
35
- */
36
- protected revalidateRuntimeCommand(): string | null;
37
- /**
38
- * Send a tool_result to the CLI's stdin (stream-json format).
39
- * Used for interactive tools like AskUserQuestion and ExitPlanMode.
40
- */
41
- sendToolResponse(toolId: string, response: string): boolean;
42
- getProviderPid(): number | null;
43
- protected getOnProcessSpawned(): ((child: ChildProcessWithoutNullStreams) => void) | undefined;
44
- protected buildCliEnvironment(): Promise<Record<string, string>>;
45
- protected buildExtraSystemPromptParts(config: AgentConfig): string[];
46
- }
47
- //# sourceMappingURL=core-agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-agent.d.ts","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,KAAK,kBAAkB,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAGjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,SAAU,SAAQ,gBAAgB;IAC7C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAElD,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAG9C,SAAS,EAAE,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC5D,OAAO,EAAE,kBAAkB,GAAG;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C;IAOI,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,OAAO;IAStB,OAAO,CAAC,gBAAgB;IA2BxB;;;;;;OAMG;IACH,SAAS,CAAC,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAqBnD;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoE3D,cAAc,IAAI,MAAM,GAAG,IAAI;IAItC,SAAS,CAAC,mBAAmB,IAAI,CAAC,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC,GAAG,SAAS;cAgB9E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0BtE,SAAS,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE;CAwKrE"}
@@ -1,364 +0,0 @@
1
- /**
2
- * Sandbox CoreAgent — E2B-specific subclass of BaseMachineAgent.
3
- *
4
- * Platform responsibilities:
5
- * - buildCliEnvironment: extend process.env + inject E2B node bin path
6
- * - buildExtraSystemPromptParts: inject artifact IDs from ALAN_* env vars
7
- * - submitAnswer / submitPlanApproval: resolve interactive-tool prompts relayed via WS
8
- *
9
- * Everything else (retry loop, system-prompt assembly, backend selection) lives
10
- * in BaseMachineAgent.
11
- */
12
- import { platform } from "node:os";
13
- import { BaseMachineAgent, killProcessTree } from "@alan-ai/agent-core";
14
- import { ensureProviderCliInstalled } from "./cli-ensure-install.js";
15
- import { getDaemonCliEnvironment, revalidateBackendRuntimeCommand } from "./cli-executable.js";
16
- export class CoreAgent extends BaseMachineAgent {
17
- childProcess = null;
18
- _aborted = false;
19
- providerApiKey;
20
- onProviderSpawned;
21
- /** How long to wait after SIGTERM before escalating to SIGKILL. */
22
- static SIGKILL_DELAY_MS = 3000;
23
- constructor(presenter, runtime) {
24
- super(presenter, runtime);
25
- this.providerApiKey = runtime.providerApiKey;
26
- this.onProviderSpawned = runtime.onProviderSpawned;
27
- }
28
- abort() {
29
- this._aborted = true;
30
- super.abort();
31
- }
32
- kill() {
33
- this._aborted = true;
34
- super.abort();
35
- const child = this.childProcess;
36
- if (!child || child.killed || child.exitCode !== null)
37
- return false;
38
- return this.killChildProcess(child);
39
- }
40
- killChildProcess(child) {
41
- const pid = child.pid;
42
- if (!pid)
43
- return false;
44
- console.info("[CoreAgent] Killing agent process", { pid });
45
- killProcessTree(pid, {
46
- signal: "SIGTERM",
47
- child,
48
- onError: (stage, err) => console.warn(`[CoreAgent] SIGTERM failed (${stage})`, { pid, err }),
49
- });
50
- setTimeout(() => {
51
- if (child.killed || child.exitCode !== null)
52
- return;
53
- console.warn("[CoreAgent] Escalating to SIGKILL", { pid });
54
- killProcessTree(pid, {
55
- signal: "SIGKILL",
56
- child,
57
- onError: (stage, err) => console.warn(`[CoreAgent] SIGKILL failed (${stage})`, { pid, err }),
58
- });
59
- }, CoreAgent.SIGKILL_DELAY_MS);
60
- return true;
61
- }
62
- /**
63
- * Re-resolve this agent's CLI executable from scratch when a spawn fails
64
- * ENOENT. The daemon caches resolved CLI paths, so a provider binary that was
65
- * moved or reinstalled mid-session would otherwise fail every turn with
66
- * "CLI command not found" until the daemon restarts. Invalidating the cache
67
- * and re-resolving once lets the current run recover against the new location.
68
- */
69
- revalidateRuntimeCommand() {
70
- const resolved = revalidateBackendRuntimeCommand(this.runtime.backendKind) ?? null;
71
- if (!resolved && this.runtime.backendKind) {
72
- // This hook is synchronous (agent-core spawn-retry contract), so a binary
73
- // that is genuinely absent — not just relocated — cannot be installed
74
- // inline. Kick off the one-shot on-demand install in the background so
75
- // the next send resolves the CLI instead of dead-ending on ENOENT again.
76
- const backendKind = this.runtime.backendKind;
77
- void ensureProviderCliInstalled(backendKind).then((installed) => {
78
- if (installed) {
79
- console.info("[CoreAgent] Installed missing provider CLI after spawn ENOENT", {
80
- backendKind,
81
- });
82
- }
83
- });
84
- }
85
- return resolved;
86
- }
87
- // ── Interactive tool response (WS relay → stdin) ───────────────────────
88
- /**
89
- * Send a tool_result to the CLI's stdin (stream-json format).
90
- * Used for interactive tools like AskUserQuestion and ExitPlanMode.
91
- */
92
- sendToolResponse(toolId, response) {
93
- if (!this.childProcess)
94
- return false;
95
- const stdin = this.childProcess.stdin;
96
- if (!stdin || stdin.destroyed)
97
- return false;
98
- // Ownership guard: never write an answer for a tool this agent never emitted.
99
- // The daemon scopes delivery by run/conversation, but this is the structural
100
- // backstop — a stdin write "succeeds" regardless of whether the tool_use id is
101
- // this CLI's, so a mis-routed response must be rejected before it corrupts a
102
- // foreign turn. Skip only if the presenter cannot answer ownership.
103
- if (this.presenter.hasKnownToolUse && !this.presenter.hasKnownToolUse(toolId)) {
104
- console.warn(`[CoreAgent] Ignoring tool_response for unknown tool ${toolId}`);
105
- return false;
106
- }
107
- try {
108
- let message;
109
- if (this.presenter.pendingAskUserToolIds?.has(toolId)) {
110
- // AskUserQuestion: the Claude CLI auto-denies this tool in bypassPermissions mode,
111
- // producing a fallback assistant turn ("I asked a question but got no response…").
112
- // The claude parser suppresses that fallback turn and keeps stdin open.
113
- // The user's real answer must arrive as a NEW plain-text user turn — NOT a
114
- // tool_result — because the CLI has already closed the tool_use/tool_result pair.
115
- // Sending a tool_result for an auto-denied tool_use_id would be rejected or ignored.
116
- // The desktop CoreAgent uses the same approach; keep both paths in sync.
117
- this.presenter.pendingAskUserToolIds.delete(toolId);
118
- this.presenter.onAskUserAnswered?.(toolId);
119
- message = JSON.stringify({
120
- type: "user",
121
- message: {
122
- role: "user",
123
- content: [{ type: "text", text: response }],
124
- },
125
- session_id: "default",
126
- parent_tool_use_id: null,
127
- });
128
- console.info(`[CoreAgent] Sent AskUserQuestion answer for tool ${toolId} as new user turn`);
129
- }
130
- else {
131
- // Regular tool_result for ExitPlanMode and other interactive tools.
132
- message = JSON.stringify({
133
- type: "user",
134
- message: {
135
- role: "user",
136
- content: [
137
- {
138
- type: "tool_result",
139
- tool_use_id: toolId,
140
- content: response,
141
- },
142
- ],
143
- },
144
- session_id: "default",
145
- parent_tool_use_id: null,
146
- });
147
- console.info(`[CoreAgent] Sent tool_response for tool ${toolId}`);
148
- }
149
- stdin.write(`${message}\n`);
150
- return true;
151
- }
152
- catch (err) {
153
- console.error("[CoreAgent] Failed to write tool_response to stdin", err);
154
- return false;
155
- }
156
- }
157
- // ── BaseMachineAgent hooks ─────────────────────────────────────────────
158
- getProviderPid() {
159
- return this.childProcess?.pid ?? null;
160
- }
161
- getOnProcessSpawned() {
162
- return (child) => {
163
- this.childProcess = child;
164
- if (child.pid)
165
- this.onProviderSpawned?.(child.pid);
166
- child.on("exit", () => {
167
- this.childProcess = null;
168
- });
169
- child.on("error", () => {
170
- this.childProcess = null;
171
- });
172
- if (this._aborted) {
173
- this.killChildProcess(child);
174
- }
175
- };
176
- }
177
- async buildCliEnvironment() {
178
- const env = {};
179
- for (const [key, value] of Object.entries(process.env)) {
180
- if (value !== undefined)
181
- env[key] = value;
182
- }
183
- const augmented = getDaemonCliEnvironment();
184
- if (this.runtime.backendKind === "supatest_cli" && this.providerApiKey) {
185
- augmented.SUPATEST_API_KEY = this.providerApiKey;
186
- }
187
- if (this.runtime.backendKind === "grok_cli" && this.providerApiKey) {
188
- augmented.XAI_API_KEY = this.providerApiKey;
189
- }
190
- if (platform() !== "win32") {
191
- const home = augmented.HOME ?? "/home/user";
192
- const extraPaths = [`${home}/.local/node/bin`, `${home}/.local/bin`];
193
- const separator = ":";
194
- const basePath = augmented.PATH ?? "";
195
- const existingSegments = new Set(basePath.split(separator).filter(Boolean));
196
- const missing = extraPaths.filter((p) => !existingSegments.has(p));
197
- if (missing.length > 0) {
198
- augmented.PATH = `${missing.join(separator)}${separator}${basePath}`;
199
- }
200
- }
201
- return augmented;
202
- }
203
- buildExtraSystemPromptParts(config) {
204
- const parts = [];
205
- // Inject current user identity so the agent knows who initiated the session.
206
- if (config.currentUser) {
207
- const u = config.currentUser;
208
- const lines = ["# Current User"];
209
- if (u.name)
210
- lines.push(`- **Name**: ${u.name}`);
211
- lines.push(`- **Email**: ${u.email}`);
212
- lines.push(`- **User ID**: ${u.id}`);
213
- lines.push("");
214
- lines.push("This is the person who initiated this conversation. When creating tasks or assigning work, default to assigning to this user unless explicitly instructed otherwise.");
215
- parts.push(lines.join("\n"));
216
- }
217
- // Inject task metadata so the agent has full context about the task it's working on.
218
- // Prefer config.taskMeta (sent by the dispatch pipeline); fall back to env vars.
219
- if (config.taskMeta) {
220
- const meta = config.taskMeta;
221
- const lines = ["# Task Context"];
222
- lines.push(`- **Title**: ${meta.title}`);
223
- lines.push(`- **Status**: ${meta.status.replace(/_/g, " ")}`);
224
- if (meta.priority && meta.priority !== "none") {
225
- lines.push(`- **Priority**: ${meta.priority.toUpperCase()}`);
226
- }
227
- if (meta.labels && meta.labels.length > 0) {
228
- lines.push(`- **Labels**: ${meta.labels.join(", ")}`);
229
- }
230
- if (meta.assignees && meta.assignees.length > 0) {
231
- const assigneeStr = meta.assignees.map((a) => a.name ?? a.email).join(", ");
232
- lines.push(`- **Assignees**: ${assigneeStr}`);
233
- }
234
- if (meta.description) {
235
- lines.push(`- **Description**:\n${meta.description}`);
236
- }
237
- if (meta.descriptionAttachmentIds && meta.descriptionAttachmentIds.length > 0) {
238
- lines.push("");
239
- lines.push("## Task Description Images");
240
- lines.push('The task description contains images. Use the `attachment` MCP tool with op="get" to view them:');
241
- for (const att of meta.descriptionAttachmentIds) {
242
- lines.push(`- Attachment ID: \`${att.id}\` (${att.filename})`);
243
- }
244
- }
245
- if (meta.linkedResources && meta.linkedResources.length > 0) {
246
- lines.push("");
247
- lines.push("## Linked Task Resources");
248
- for (const resource of meta.linkedResources) {
249
- lines.push(`- ${resource.type}: "${resource.title}" (${resource.url ?? resource.id})`);
250
- }
251
- }
252
- parts.push(lines.join("\n"));
253
- }
254
- // Inject pull-request metadata for Review Agent sessions started from a PR.
255
- if (config.prMeta) {
256
- const pr = config.prMeta;
257
- const lines = ["# Pull Request Context"];
258
- lines.push(`- **Repo**: ${pr.owner}/${pr.repo}`);
259
- lines.push(`- **PR**: #${pr.prNumber} — ${pr.title}`);
260
- lines.push(`- **State**: ${pr.state}`);
261
- if (pr.author)
262
- lines.push(`- **Author**: ${pr.author}`);
263
- const baseHead = `${pr.baseBranch || "?"} ← ${pr.headBranch || "?"}`;
264
- lines.push(`- **Base ← Head**: ${baseHead}`);
265
- if (pr.mergeable === false) {
266
- lines.push(`- **Mergeable**: no`);
267
- }
268
- else if (pr.mergeable === true) {
269
- lines.push(`- **Mergeable**: yes`);
270
- }
271
- if (pr.labels && pr.labels.length > 0) {
272
- lines.push(`- **Labels**: ${pr.labels.join(", ")}`);
273
- }
274
- const sizeBits = [];
275
- if (typeof pr.changedFilesCount === "number")
276
- sizeBits.push(`${pr.changedFilesCount} files`);
277
- if (typeof pr.additions === "number")
278
- sizeBits.push(`+${pr.additions}`);
279
- if (typeof pr.deletions === "number")
280
- sizeBits.push(`-${pr.deletions}`);
281
- if (sizeBits.length > 0)
282
- lines.push(`- **Size**: ${sizeBits.join(" / ")}`);
283
- if (pr.linkedTaskReadableId) {
284
- lines.push(`- **Linked task**: ${pr.linkedTaskReadableId}`);
285
- }
286
- if (pr.linkedTaskId) {
287
- lines.push(`- **Linked task ID**: ${pr.linkedTaskId}`);
288
- }
289
- if (pr.htmlUrl)
290
- lines.push(`- **URL**: ${pr.htmlUrl}`);
291
- if (pr.body) {
292
- lines.push("");
293
- lines.push("## PR Description");
294
- lines.push(pr.body);
295
- }
296
- if (pr.changedFiles && pr.changedFiles.length > 0) {
297
- lines.push("");
298
- lines.push("## Changed Files (first 50)");
299
- for (const file of pr.changedFiles) {
300
- lines.push(`- ${file.status}: \`${file.path}\` (+${file.additions} / -${file.deletions})`);
301
- }
302
- }
303
- parts.push(lines.join("\n"));
304
- }
305
- // Inject artifact context so the agent associates MCP artifacts with the right owner.
306
- // Session context dictates ownership: task session → taskId; workflow session →
307
- // workflowId + workflowExecutionId. Never both. Prefer config fields (sent by
308
- // dispatch pipeline); fall back to ALAN_* env vars.
309
- const taskId = config.taskId ?? process.env.ALAN_TASK_ID;
310
- const workflowId = config.workflowId ?? process.env.ALAN_WORKFLOW_ID;
311
- const workflowExecutionId = config.workflowExecutionId ?? process.env.ALAN_WORKFLOW_EXECUTION_ID;
312
- const conversationId = config.conversationId ?? process.env.ALAN_SESSION_ID;
313
- const teamId = config.teamId ?? process.env.ALAN_TEAM_ID;
314
- const artifactIds = [];
315
- if (teamId)
316
- artifactIds.push(`- teamId: "${teamId}"`);
317
- // workflowId wins when present — workflow machine sessions always have ALAN_TASK_ID=machineId
318
- // (not a real task), so taskId must not shadow workflowId for artifact routing.
319
- // When workflowExecutionId is set but workflowId is missing, this is a workflow session
320
- // where ALAN_WORKFLOW_ID wasn't injected — skip taskId entirely so the backend can
321
- // auto-resolve workflow context from conversationId.
322
- const isWorkflowSession = !!(workflowId || workflowExecutionId);
323
- if (workflowId) {
324
- artifactIds.push(`- workflowId: "${workflowId}"`);
325
- if (workflowExecutionId)
326
- artifactIds.push(`- workflowExecutionId: "${workflowExecutionId}"`);
327
- }
328
- else if (taskId && !isWorkflowSession) {
329
- artifactIds.push(`- taskId: "${taskId}"`);
330
- }
331
- if (conversationId)
332
- artifactIds.push(`- conversationId: "${conversationId}"`);
333
- if (artifactIds.length > 0) {
334
- const artifactTools = ["create_plan", "create_document_artifact", "create_test_report"];
335
- if (taskId || isWorkflowSession)
336
- artifactTools.push("upsert_prototype_version");
337
- parts.push([
338
- `When creating artifacts using MCP tools (${artifactTools.join(", ")}), always pass these IDs:`,
339
- ...artifactIds,
340
- ].join("\n"));
341
- }
342
- if (teamId && conversationId && !taskId && !isWorkflowSession) {
343
- parts.push("This is a standalone chat. For create_plan, create_document_artifact, and create_test_report, omit taskId and workflowId; conversationId is the artifact owner. Do not use create_document unless the user explicitly asks for a standalone team Document.");
344
- }
345
- if (workflowId && conversationId && teamId) {
346
- parts.push([
347
- "## Prototype Artifacts",
348
- "When the user asks to create, build, modify, or iterate on a prototype, do not create local prototype files such as prototype/index.html.",
349
- "Instead, generate a Vite React TypeScript source snapshot and call the Alan MCP tool upsert_prototype_version with teamId, workflowId, workflowExecutionId, conversationId, title, sourceSnapshot, and packageJson.",
350
- "For follow-up changes to the same prototype, call list_prototypes (with workflowId) or get_prototype if needed, then call upsert_prototype_version again with the existing prototypeId and parentVersionId.",
351
- ].join("\n"));
352
- }
353
- else if (taskId && conversationId && teamId) {
354
- parts.push([
355
- "## Prototype Artifacts",
356
- "When the user asks to create, build, modify, or iterate on a prototype, do not create local prototype files such as prototype/index.html.",
357
- "Instead, generate a Vite React TypeScript source snapshot and call the Alan MCP tool upsert_prototype_version with teamId, taskId, conversationId, title, sourceSnapshot, and packageJson.",
358
- "For follow-up changes to the same prototype, call list_prototypes or get_prototype if needed, then call upsert_prototype_version again with the existing prototypeId and parentVersionId so the task Prototypes panel renders the new version.",
359
- ].join("\n"));
360
- }
361
- return parts;
362
- }
363
- }
364
- //# sourceMappingURL=core-agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-agent.js","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"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"}