@fitlab-ai/agent-infra 0.12.0 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +0 -2
  2. package/README.zh-CN.md +0 -2
  3. package/dist/bin/internal-cli.js +2 -17
  4. package/dist/lib/agent-clients/adapter.js +0 -13
  5. package/dist/lib/agent-clients/adapters/antigravity-cli.js +0 -5
  6. package/dist/lib/agent-clients/adapters/claude-code-credentials.js +0 -17
  7. package/dist/lib/agent-clients/adapters/claude-code.js +0 -9
  8. package/dist/lib/agent-clients/adapters/codex.js +0 -52
  9. package/dist/lib/agent-clients/adapters/opencode.js +0 -5
  10. package/dist/lib/agent-clients/adapters/traecli.js +0 -5
  11. package/dist/lib/agent-clients/config.js +19 -54
  12. package/dist/lib/agent-clients/registry.js +1 -12
  13. package/dist/lib/agent-clients/schema.js +0 -18
  14. package/dist/lib/agent-clients/tokens.js +1 -2
  15. package/dist/lib/agent-clients/types.js +0 -1
  16. package/dist/lib/decide.js +2 -0
  17. package/dist/lib/git/worktree-identity.js +1 -9
  18. package/dist/lib/internal/agent-client.js +2 -62
  19. package/dist/lib/internal/cli-route-inventory.js +1 -5
  20. package/dist/lib/internal/manual-validation.js +29 -27
  21. package/dist/lib/internal/platform-comment.js +56 -7
  22. package/dist/lib/internal/task-create.js +1 -1
  23. package/dist/lib/internal/task-event.js +1 -8
  24. package/dist/lib/internal/task-finalization.js +0 -1
  25. package/dist/lib/internal/task-lifecycle.js +2 -2
  26. package/dist/lib/internal/task-operation-registry.js +4 -20
  27. package/dist/lib/internal/task-review.js +4 -4
  28. package/dist/lib/platform/comment-safety.js +1 -7
  29. package/dist/lib/platform/in-label-sync.js +1 -14
  30. package/dist/lib/platform/issue-comments.js +373 -282
  31. package/dist/lib/platform/issue-summary-content.js +112 -0
  32. package/dist/lib/platform/issues.js +1 -1
  33. package/dist/lib/platform/operation-coordinator.js +4 -2
  34. package/dist/lib/platform/pr-change-report.js +176 -30
  35. package/dist/lib/platform/pr-checks.js +2 -8
  36. package/dist/lib/platform/pr-summary-content.js +54 -0
  37. package/dist/lib/platform/pr-summary.js +318 -284
  38. package/dist/lib/platform/provider-validation.js +0 -20
  39. package/dist/lib/platform/pull-requests.js +73 -84
  40. package/dist/lib/platform/releases.js +1 -43
  41. package/dist/lib/platform/summary-content-pipeline.js +18 -0
  42. package/dist/lib/platform/verification-required.js +0 -2
  43. package/dist/lib/platform/verification-sync.js +1 -79
  44. package/dist/lib/process-data/normalize.js +1 -185
  45. package/dist/lib/process-data/privacy.js +1 -16
  46. package/dist/lib/process-data/sources.js +2 -279
  47. package/dist/lib/render.js +0 -12
  48. package/dist/lib/run/index.js +15 -10
  49. package/dist/lib/run/skills.js +0 -3
  50. package/dist/lib/sandbox/commands/create.js +40 -53
  51. package/dist/lib/sandbox/commands/list-running.js +0 -18
  52. package/dist/lib/sandbox/commands/start.js +7 -8
  53. package/dist/lib/sandbox/constants.js +0 -6
  54. package/dist/lib/sandbox/control/client.js +0 -1
  55. package/dist/lib/sandbox/control/container-identity.js +1 -16
  56. package/dist/lib/sandbox/control/executor.js +0 -4
  57. package/dist/lib/sandbox/control/identity-sentinel.js +0 -7
  58. package/dist/lib/sandbox/control/lifecycle.js +21 -37
  59. package/dist/lib/sandbox/control/native-file-lock.js +0 -3
  60. package/dist/lib/sandbox/control/server.js +18 -38
  61. package/dist/lib/sandbox/control/state.js +1 -9
  62. package/dist/lib/sandbox/dockerfile.js +0 -6
  63. package/dist/lib/sandbox/engine.js +0 -14
  64. package/dist/lib/sandbox/engines/docker-exact-discovery.js +1 -4
  65. package/dist/lib/sandbox/engines/wsl2-paths.js +0 -3
  66. package/dist/lib/sandbox/recovery.js +24 -26
  67. package/dist/lib/sandbox/removal.js +67 -518
  68. package/dist/lib/sandbox/task-resolver.js +0 -41
  69. package/dist/lib/sandbox/tools.js +1 -4
  70. package/dist/lib/sandbox/workspace-view.js +1 -2
  71. package/dist/lib/server/display.js +0 -6
  72. package/dist/lib/task/activity-intent.js +45 -40
  73. package/dist/lib/task/activity-log.js +9 -16
  74. package/dist/lib/task/artifact-command.js +1 -1
  75. package/dist/lib/task/artifact-lifecycle.js +61 -63
  76. package/dist/lib/task/artifact-name.js +0 -6
  77. package/dist/lib/task/artifact-operations.js +3 -3
  78. package/dist/lib/task/capabilities.js +4 -5
  79. package/dist/lib/task/commands/log.js +0 -6
  80. package/dist/lib/task/commands/status.js +17 -60
  81. package/dist/lib/task/commit-operation.js +28 -39
  82. package/dist/lib/task/completion-facts.js +56 -43
  83. package/dist/lib/task/control-authority.js +23 -256
  84. package/dist/lib/task/control-recovery.js +3 -5
  85. package/dist/lib/task/create.js +2 -4
  86. package/dist/lib/task/decision-intents.js +8 -9
  87. package/dist/lib/task/delivery-target.js +1 -40
  88. package/dist/lib/task/events.js +84 -107
  89. package/dist/lib/task/finalization.js +60 -15
  90. package/dist/lib/task/ledger-intents.js +1 -1
  91. package/dist/lib/task/lifecycle-execution.js +38 -33
  92. package/dist/lib/task/lifecycle.js +49 -41
  93. package/dist/lib/task/local-artifact-finalization.js +1 -4
  94. package/dist/lib/task/manual-validation-evidence.js +1 -37
  95. package/dist/lib/task/platform-operation-recovery.js +151 -108
  96. package/dist/lib/task/pr-delivery-fact.js +2 -5
  97. package/dist/lib/task/qualification-confirmation.js +5 -7
  98. package/dist/lib/task/resolve-ref.js +1 -25
  99. package/dist/lib/task/review-command.js +2 -2
  100. package/dist/lib/task/review-finalization.js +1 -21
  101. package/dist/lib/task/review-fingerprint.js +0 -4
  102. package/dist/lib/task/secure-fs.js +0 -56
  103. package/dist/lib/task/short-id.js +1 -39
  104. package/dist/lib/task/skill-scope.js +0 -1
  105. package/dist/lib/task/verification-engine.js +58 -282
  106. package/dist/lib/task/verification.js +6 -3
  107. package/dist/lib/task/write.js +11 -1
  108. package/lib/agent-clients/adapter.ts +0 -76
  109. package/lib/agent-clients/adapters/antigravity-cli.ts +0 -5
  110. package/lib/agent-clients/adapters/claude-code-credentials.ts +0 -19
  111. package/lib/agent-clients/adapters/claude-code.ts +0 -9
  112. package/lib/agent-clients/adapters/codex.ts +0 -56
  113. package/lib/agent-clients/adapters/opencode.ts +0 -5
  114. package/lib/agent-clients/adapters/traecli.ts +0 -5
  115. package/lib/agent-clients/config.ts +20 -61
  116. package/lib/agent-clients/registry.ts +1 -34
  117. package/lib/agent-clients/schema.ts +0 -18
  118. package/lib/agent-clients/tokens.ts +1 -2
  119. package/lib/agent-clients/types.ts +0 -15
  120. package/lib/decide.ts +1 -0
  121. package/lib/git/worktree-identity.ts +0 -10
  122. package/lib/internal/agent-client.ts +2 -70
  123. package/lib/internal/cli-route-inventory.ts +1 -4
  124. package/lib/internal/manual-validation.ts +28 -27
  125. package/lib/internal/platform-comment.ts +46 -4
  126. package/lib/internal/task-create.ts +0 -1
  127. package/lib/internal/task-event.ts +1 -5
  128. package/lib/internal/task-finalization.ts +0 -1
  129. package/lib/internal/task-lifecycle.ts +3 -5
  130. package/lib/internal/task-operation-registry.ts +3 -19
  131. package/lib/internal/task-review.ts +4 -4
  132. package/lib/platform/comment-safety.ts +0 -10
  133. package/lib/platform/github-provider.ts +0 -2
  134. package/lib/platform/in-label-sync.ts +0 -16
  135. package/lib/platform/issue-comments.ts +478 -301
  136. package/lib/platform/issue-summary-content.ts +132 -0
  137. package/lib/platform/issues.ts +0 -2
  138. package/lib/platform/operation-coordinator.ts +4 -2
  139. package/lib/platform/pr-change-report.ts +165 -25
  140. package/lib/platform/pr-checks.ts +1 -10
  141. package/lib/platform/pr-review.ts +1 -1
  142. package/lib/platform/pr-summary-content.ts +60 -0
  143. package/lib/platform/pr-summary.ts +364 -257
  144. package/lib/platform/provider-bridge.ts +0 -1
  145. package/lib/platform/provider-loader.ts +1 -5
  146. package/lib/platform/provider-validation.ts +1 -49
  147. package/lib/platform/pull-requests.ts +64 -99
  148. package/lib/platform/releases.ts +1 -40
  149. package/lib/platform/summary-content-pipeline.ts +23 -0
  150. package/lib/platform/verification-required.ts +0 -2
  151. package/lib/platform/verification-sync.ts +0 -94
  152. package/lib/process-data/normalize.ts +1 -186
  153. package/lib/process-data/privacy.ts +2 -19
  154. package/lib/process-data/sources.ts +3 -283
  155. package/lib/render.ts +0 -15
  156. package/lib/run/index.ts +13 -7
  157. package/lib/run/skills.ts +0 -4
  158. package/lib/sandbox/commands/create.ts +37 -74
  159. package/lib/sandbox/commands/list-running.ts +0 -19
  160. package/lib/sandbox/commands/start.ts +7 -10
  161. package/lib/sandbox/constants.ts +0 -8
  162. package/lib/sandbox/control/client.ts +0 -1
  163. package/lib/sandbox/control/container-identity.ts +1 -16
  164. package/lib/sandbox/control/executor.ts +1 -5
  165. package/lib/sandbox/control/identity-sentinel.ts +0 -8
  166. package/lib/sandbox/control/lifecycle.ts +18 -51
  167. package/lib/sandbox/control/native-file-lock.ts +0 -8
  168. package/lib/sandbox/control/protocol.ts +0 -2
  169. package/lib/sandbox/control/server.ts +13 -39
  170. package/lib/sandbox/control/state.ts +1 -10
  171. package/lib/sandbox/dockerfile.ts +0 -11
  172. package/lib/sandbox/engine.ts +0 -17
  173. package/lib/sandbox/engines/docker-exact-discovery.ts +1 -5
  174. package/lib/sandbox/engines/wsl2-paths.ts +0 -4
  175. package/lib/sandbox/recovery.ts +24 -26
  176. package/lib/sandbox/removal.ts +58 -687
  177. package/lib/sandbox/shell.ts +1 -1
  178. package/lib/sandbox/task-resolver.ts +0 -48
  179. package/lib/sandbox/tools.ts +1 -5
  180. package/lib/sandbox/workspace-view.ts +2 -4
  181. package/lib/server/display.ts +0 -14
  182. package/lib/server/process-control.ts +1 -1
  183. package/lib/task/activity-intent.ts +36 -44
  184. package/lib/task/activity-log.ts +9 -22
  185. package/lib/task/artifact-command.ts +1 -1
  186. package/lib/task/artifact-lifecycle.ts +58 -67
  187. package/lib/task/artifact-name.ts +0 -7
  188. package/lib/task/artifact-operations.ts +3 -3
  189. package/lib/task/capabilities.ts +5 -6
  190. package/lib/task/commands/log.ts +0 -7
  191. package/lib/task/commands/status.ts +14 -79
  192. package/lib/task/commit-operation.ts +29 -51
  193. package/lib/task/completion-facts.ts +45 -42
  194. package/lib/task/control-authority.ts +27 -317
  195. package/lib/task/control-recovery.ts +2 -5
  196. package/lib/task/create.ts +2 -5
  197. package/lib/task/decision-intents.ts +5 -5
  198. package/lib/task/delivery-target.ts +0 -40
  199. package/lib/task/events.ts +89 -123
  200. package/lib/task/finalization.ts +52 -15
  201. package/lib/task/ledger-intents.ts +1 -1
  202. package/lib/task/lifecycle-execution.ts +37 -89
  203. package/lib/task/lifecycle.ts +48 -44
  204. package/lib/task/local-artifact-finalization.ts +0 -7
  205. package/lib/task/manual-validation-evidence.ts +1 -47
  206. package/lib/task/platform-operation-recovery.ts +117 -104
  207. package/lib/task/pr-delivery-fact.ts +2 -11
  208. package/lib/task/qualification-confirmation.ts +6 -6
  209. package/lib/task/resolve-ref.ts +0 -23
  210. package/lib/task/review-command.ts +2 -2
  211. package/lib/task/review-finalization.ts +1 -27
  212. package/lib/task/review-fingerprint.ts +0 -8
  213. package/lib/task/secure-fs.ts +0 -42
  214. package/lib/task/short-id.ts +0 -43
  215. package/lib/task/skill-scope.ts +0 -1
  216. package/lib/task/verification-engine.ts +56 -287
  217. package/lib/task/verification.ts +5 -5
  218. package/lib/task/write.ts +12 -1
  219. package/package.json +2 -2
  220. package/templates/.agents/README.en.md +1 -3
  221. package/templates/.agents/README.zh-CN.md +0 -2
  222. package/templates/.agents/rules/README.en.md +0 -1
  223. package/templates/.agents/rules/README.zh-CN.md +0 -1
  224. package/templates/.agents/rules/commit-and-pr.en.md +1 -1
  225. package/templates/.agents/rules/commit-and-pr.zh-CN.md +1 -1
  226. package/templates/.agents/rules/no-mid-flow-questions.en.md +0 -10
  227. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +0 -10
  228. package/templates/.agents/rules/pr-sync.en.md +4 -2
  229. package/templates/.agents/rules/pr-sync.zh-CN.md +6 -9
  230. package/templates/.agents/rules/task-management.en.md +3 -3
  231. package/templates/.agents/rules/task-management.zh-CN.md +3 -3
  232. package/templates/.agents/skills/analyze-task/SKILL.en.md +3 -3
  233. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +3 -3
  234. package/templates/.agents/skills/cancel-task/SKILL.en.md +2 -2
  235. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +2 -2
  236. package/templates/.agents/skills/code-task/SKILL.en.md +2 -2
  237. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +4 -4
  238. package/templates/.agents/skills/commit/SKILL.en.md +2 -2
  239. package/templates/.agents/skills/commit/SKILL.zh-CN.md +2 -2
  240. package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +6 -6
  241. package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +6 -6
  242. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +1 -1
  243. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +1 -1
  244. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +2 -2
  245. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +2 -2
  246. package/templates/.agents/skills/complete-task/SKILL.en.md +10 -25
  247. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +11 -26
  248. package/templates/.agents/skills/create-pr/SKILL.en.md +1 -1
  249. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +1 -1
  250. package/templates/.agents/skills/create-pr/reference/change-report.en.md +9 -2
  251. package/templates/.agents/skills/create-pr/reference/change-report.zh-CN.md +9 -2
  252. package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +2 -2
  253. package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +2 -2
  254. package/templates/.agents/skills/create-task/SKILL.en.md +0 -18
  255. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +0 -18
  256. package/templates/.agents/skills/plan-task/SKILL.en.md +2 -2
  257. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +2 -2
  258. package/templates/.agents/skills/review-analysis/SKILL.en.md +3 -3
  259. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +3 -3
  260. package/templates/.agents/skills/review-code/SKILL.en.md +5 -5
  261. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -5
  262. package/templates/.agents/skills/review-plan/SKILL.en.md +3 -3
  263. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +3 -3
  264. package/templates/.agents/skills/review-pr/SKILL.en.md +4 -4
  265. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +4 -4
  266. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +1 -1
  267. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +1 -1
  268. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +3 -75
  269. package/templates/.agents/skills/watch-pr/SKILL.en.md +1 -1
  270. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +1 -1
  271. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +3 -3
  272. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +3 -3
  273. package/templates/.agents/templates/task.en.md +1 -0
  274. package/templates/.agents/templates/task.zh-CN.md +1 -0
  275. package/templates/.claude/settings.json +0 -24
  276. package/templates/.codex/hooks.json +0 -50
  277. package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +0 -582
  278. package/dist/lib/agent-clients/adapters/codex-lifecycle/binding.js +0 -114
  279. package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +0 -237
  280. package/dist/lib/agent-clients/adapters/codex-lifecycle/cli.js +0 -443
  281. package/dist/lib/agent-clients/adapters/codex-lifecycle/evidence.js +0 -236
  282. package/dist/lib/agent-clients/adapters/codex-lifecycle/recovery.js +0 -292
  283. package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +0 -267
  284. package/dist/lib/agent-clients/adapters/codex-orchestration.js +0 -466
  285. package/dist/lib/internal/task-orchestration.js +0 -71
  286. package/dist/lib/platform/verification.js +0 -6
  287. package/dist/lib/run/prompt.js +0 -2
  288. package/dist/lib/sandbox/engines/authority.js +0 -289
  289. package/dist/lib/task/delegation-receipts.js +0 -410
  290. package/dist/lib/task/orchestration.js +0 -1233
  291. package/dist/lib/task/verification-checks.js +0 -9
  292. package/dist/lib/task/workspace-snapshot.js +0 -121
  293. package/dist/lifecycle-build-manifest.json +0 -6
  294. package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +0 -688
  295. package/lib/agent-clients/adapters/codex-lifecycle/binding.ts +0 -147
  296. package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +0 -349
  297. package/lib/agent-clients/adapters/codex-lifecycle/cli.ts +0 -506
  298. package/lib/agent-clients/adapters/codex-lifecycle/evidence.ts +0 -385
  299. package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +0 -41
  300. package/lib/agent-clients/adapters/codex-lifecycle/recovery.ts +0 -418
  301. package/lib/agent-clients/adapters/codex-lifecycle/store.ts +0 -354
  302. package/lib/agent-clients/adapters/codex-orchestration.ts +0 -630
  303. package/lib/internal/task-orchestration.ts +0 -74
  304. package/lib/platform/verification.ts +0 -11
  305. package/lib/run/prompt.ts +0 -1
  306. package/lib/sandbox/engines/authority.ts +0 -365
  307. package/lib/task/delegation-receipts.ts +0 -547
  308. package/lib/task/orchestration.ts +0 -1651
  309. package/lib/task/verification-checks.ts +0 -10
  310. package/lib/task/workspace-snapshot.ts +0 -144
  311. package/templates/.agents/hooks/lifecycle-delegation.js +0 -140
  312. package/templates/.agents/rules/lifecycle-orchestration.en.md +0 -44
  313. package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +0 -44
  314. package/templates/.agents/skills/run-task/SKILL.en.md +0 -29
  315. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +0 -29
  316. package/templates/.agents/skills/run-task/config/verify.en.json +0 -10
  317. package/templates/.agents/skills/run-task/config/verify.zh-CN.json +0 -10
  318. package/templates/.agents/skills/run-task/reference/host-validation.en.md +0 -24
  319. package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +0 -24
  320. package/templates/.claude/agents/agent-infra-lifecycle-executor.en.md +0 -6
  321. package/templates/.claude/agents/agent-infra-lifecycle-executor.zh-CN.md +0 -6
  322. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.en.md +0 -6
  323. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.zh-CN.md +0 -6
  324. package/templates/.claude/commands/run-task.en.md +0 -8
  325. package/templates/.claude/commands/run-task.zh-CN.md +0 -8
  326. package/templates/.codex/agents/agent-infra-lifecycle-executor.en.toml +0 -3
  327. package/templates/.codex/agents/agent-infra-lifecycle-executor.zh-CN.toml +0 -3
  328. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.en.toml +0 -3
  329. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.zh-CN.toml +0 -3
  330. package/templates/.opencode/commands/run-task.en.md +0 -11
  331. package/templates/.opencode/commands/run-task.zh-CN.md +0 -11
@@ -1,24 +1,12 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { normalizeAgentToken } from '../agent-clients/tokens.js';
4
- import { isAgentClientId } from '../agent-clients/types.js';
5
4
  import { sandboxControlPaths } from '../sandbox/workspace-view.js';
6
- import { getAgentClientAdapter } from '../agent-clients/registry.js';
7
- import { activateMatchingOrchestrationDelegation, activateOrchestrationDelegation, advanceOrchestration, awaitOrchestrationDelegationActivation, beginOrResumeOrchestration, dispatchOrchestrationDelegation, OrchestrationStateError, pauseOrchestration, prepareOrchestrationDelegation, recoverPreparedOrchestrationDelegation, routeOrchestration, sealMatchingOrchestrationDelegation, sealOrchestrationDelegation, statusOrchestration } from './orchestration.js';
8
5
  import { applyTaskFinalization } from './finalization.js';
9
6
  import { applyTaskLifecycle } from './lifecycle.js';
10
- import { resolveTaskContext, resolveTaskRef, TASK_ID_RE } from './resolve-ref.js';
7
+ import { resolveTaskRef, TASK_ID_RE } from './resolve-ref.js';
11
8
  import { verifyTaskEvent } from './verification.js';
12
9
  import { releaseStaleShortIdRegistry } from './short-id.js';
13
- export function taskControlOperationKey(operation) {
14
- if (operation.family === 'task-finalization')
15
- return 'complete';
16
- if (operation.family === 'task-lifecycle')
17
- return operation.request.intent;
18
- return operation.intent === 'route'
19
- ? operation.input && operation.input.completed === true ? 'route.clean-completion' : 'route.read'
20
- : operation.intent;
21
- }
22
10
  function invalidContext(message) {
23
11
  throw new Error(`TASK_CONTROL_CONTEXT_INVALID: ${message}`);
24
12
  }
@@ -85,20 +73,6 @@ export function assertTaskControlExecutionContext(context) {
85
73
  function boundTaskRef(context, taskRef) {
86
74
  return context.source === 'sandbox-executor' ? context.taskId : taskRef;
87
75
  }
88
- function autoTaskOptions(context, options) {
89
- if (context.source === 'sandbox-executor')
90
- return { ...options, taskId: context.taskId };
91
- const resolved = resolveTaskContext(undefined, { repoRoot: context.repoRoot });
92
- if (!resolved.ok)
93
- throw new Error(`${resolved.code}: ${resolved.message}`);
94
- return { ...options, taskId: resolved.taskId };
95
- }
96
- function domainOptions(context, options) {
97
- return {
98
- ...options,
99
- repoRoot: context.repoRoot
100
- };
101
- }
102
76
  function lifecycleTaskId(request, repoRoot) {
103
77
  if (request.intent === 'restore')
104
78
  return TASK_ID_RE.test(request.taskRef) ? request.taskRef : null;
@@ -114,19 +88,6 @@ async function applyLifecycleWithAuthority(context, request) {
114
88
  const taskId = lifecycleTaskId(request, context.repoRoot);
115
89
  const controlRoot = taskId ? controlRootForTask(context, taskId) : undefined;
116
90
  const execute = async () => {
117
- if (request.intent === 'recover-started') {
118
- const adapter = isAgentClientId(request.agent)
119
- ? getAgentClientAdapter(request.agent).orchestrationAdapter
120
- : undefined;
121
- if (!adapter?.recoverStarted) {
122
- return {
123
- status: 'no-op', changed: false, targetState: 'active',
124
- requestRef: request.taskRef, intent: 'recover-started', taskId: null,
125
- receiptId: null, childId: null, error: null
126
- };
127
- }
128
- return adapter.recoverStarted(request, { repoRoot: context.repoRoot });
129
- }
130
91
  return applyTaskLifecycle(request, {
131
92
  repoRoot: context.repoRoot,
132
93
  ...(controlRoot ? { controlRoot } : {}),
@@ -147,62 +108,6 @@ function controlRootForTask(context, taskId) {
147
108
  identity: { mode: 'task-bound', taskId }
148
109
  }).root;
149
110
  }
150
- function orchestration(context, operation) {
151
- const taskRef = boundTaskRef(context, operation.taskRef);
152
- const input = operation.input;
153
- const options = domainOptions(context, operation.options);
154
- switch (operation.intent) {
155
- case 'begin-or-resume':
156
- return beginOrResumeOrchestration(taskRef, {
157
- ...options,
158
- client: input.client,
159
- maxSteps: input.maxSteps,
160
- modelPolicy: input.modelPolicy
161
- });
162
- case 'route': return routeOrchestration(taskRef, options);
163
- case 'status': return statusOrchestration(taskRef, options);
164
- case 'prepare': return prepareTaskOrchestration(context, { ...operation, taskRef }, options);
165
- case 'dispatch': return dispatchOrchestrationDelegation(taskRef, options);
166
- case 'await-activation':
167
- return awaitOrchestrationDelegationActivation(taskRef, input.event, options);
168
- case 'recover-prepared': return recoverPreparedOrchestrationDelegation(taskRef, options);
169
- case 'hook-start':
170
- return input.auto === true
171
- ? activateMatchingOrchestrationDelegation(input.client, input.event, autoTaskOptions(context, options))
172
- : activateOrchestrationDelegation(taskRef, input.event, options);
173
- case 'hook-stop':
174
- return input.auto === true
175
- ? sealMatchingOrchestrationDelegation(input.client, input.event, autoTaskOptions(context, options))
176
- : sealOrchestrationDelegation(taskRef, input.event, undefined, options);
177
- case 'advance': return advanceOrchestration(taskRef, options);
178
- case 'pause':
179
- return pauseOrchestration(taskRef, input.code, input.message, input.recoverable, options);
180
- }
181
- }
182
- function prepareTaskOrchestration(context, operation, options) {
183
- const input = operation.input;
184
- const prepareInput = {
185
- client: input.client,
186
- requestedModel: input.requestedModel,
187
- requestedReasoningEffort: input.requestedReasoningEffort,
188
- };
189
- const prepareDelegation = getAgentClientAdapter(prepareInput.client).orchestrationAdapter?.prepareDelegation;
190
- return prepareDelegation
191
- ? prepareDelegation(operation.taskRef, prepareInput, {
192
- repoRoot: context.repoRoot,
193
- orchestrationOptions: options,
194
- })
195
- : prepareOrchestrationDelegation(operation.taskRef, prepareInput, options);
196
- }
197
- function orchestrationFailure(error) {
198
- if (error instanceof OrchestrationStateError) {
199
- return {
200
- status: 'failed', changed: false, taskId: error.taskId, run: null, next: null,
201
- error: { code: error.code, message: error.message }
202
- };
203
- }
204
- throw error;
205
- }
206
111
  export function dispatchTaskControlOperation(context, operation) {
207
112
  assertTaskControlExecutionContext(context);
208
113
  assertTaskControlOperation(operation);
@@ -253,13 +158,7 @@ export function dispatchTaskControlOperation(context, operation) {
253
158
  }
254
159
  });
255
160
  }
256
- try {
257
- const result = orchestration(context, operation);
258
- return result instanceof Promise ? result.catch(orchestrationFailure) : result;
259
- }
260
- catch (error) {
261
- return orchestrationFailure(error);
262
- }
161
+ throw new Error('TASK_CONTROL_OPERATION_INVALID: unsupported operation family');
263
162
  }
264
163
  export function assertTaskControlOperation(operation) {
265
164
  if (operation.family === 'task-lifecycle') {
@@ -274,31 +173,20 @@ export function assertTaskControlOperation(operation) {
274
173
  }
275
174
  return;
276
175
  }
277
- if (!operation.taskRef || !operation.intent || !operation.input || typeof operation.input !== 'object' || Array.isArray(operation.input)) {
278
- throw new Error('TASK_CONTROL_OPERATION_INVALID: orchestration operation is invalid');
279
- }
280
176
  }
281
177
  function operationInvalid(message) {
282
178
  throw new Error(`TASK_CONTROL_OPERATION_INVALID: ${message}`);
283
179
  }
284
180
  const LIFECYCLE_FLAGS = new Set([
285
181
  '--agent', '--reason', '--unblock-condition', '--note', '--alert-number', '--staging-dir', '--issue-number',
286
- '--auto', '--dry-run'
182
+ '--dry-run'
287
183
  ]);
288
184
  const FINALIZATION_FLAGS = new Set(['--agent']);
289
- const ORCHESTRATION_FLAGS = new Set([
290
- '--agent', '--max-steps', '--executor-model', '--executor-reasoning-effort', '--reviewer-model',
291
- '--reviewer-reasoning-effort', '--client', '--requested-model', '--requested-reasoning-effort',
292
- '--parent-id', '--before-fingerprint', '--stage', '--round', '--artifact', '--role',
293
- '--native-agent', '--child-id', '--spawn-mode', '--actual-model', '--actual-reasoning-effort',
294
- '--model-fallback-reason', '--reasoning-effort-fallback-reason', '--exit-code', '--after-fingerprint',
295
- '--changed-paths', '--code', '--message', '--recoverable'
296
- ]);
297
185
  function parseValues(args, start, flags) {
298
186
  const values = {};
299
187
  for (let index = start; index < args.length; index += 1) {
300
188
  const flag = args[index];
301
- if (flag === '--dry-run' || flag === '--auto') {
189
+ if (flag === '--dry-run') {
302
190
  if (!flags.has(flag))
303
191
  operationInvalid(`unknown option '${flag}'`);
304
192
  if (values[flag] !== undefined)
@@ -321,11 +209,6 @@ function value(values, flag) {
321
209
  const current = values[flag];
322
210
  return typeof current === 'string' ? current : undefined;
323
211
  }
324
- function required(values, flags) {
325
- const missing = flags.find((flag) => value(values, flag) === undefined);
326
- if (missing)
327
- operationInvalid(`option '${missing}' is required`);
328
- }
329
212
  export function parseTaskControlOperation(family, args) {
330
213
  if (family === 'task-finalization') {
331
214
  if (args.length !== 4 || args[1] !== 'complete' || args[2] !== '--agent' || !args[0] || !args[3]) {
@@ -341,140 +224,24 @@ export function parseTaskControlOperation(family, args) {
341
224
  operationInvalid('task ref and intent are required');
342
225
  const taskRef = args[0];
343
226
  const intent = args[1];
344
- if (family === 'task-lifecycle') {
345
- if (intent === 'complete')
346
- operationInvalid('complete must use task-finalization');
347
- const values = parseValues(args, 2, LIFECYCLE_FLAGS);
348
- const agent = normalizeAgentToken(value(values, '--agent') ?? '');
349
- if (!agent)
350
- operationInvalid('lifecycle agent is invalid');
351
- const input = {
352
- taskRef,
353
- intent,
354
- agent,
355
- ...(value(values, '--reason') ? { reason: value(values, '--reason') } : {}),
356
- ...(value(values, '--unblock-condition') ? { unblockCondition: value(values, '--unblock-condition') } : {}),
357
- ...(value(values, '--note') ? { note: value(values, '--note') } : {}),
358
- ...(value(values, '--staging-dir') ? { stagingDir: value(values, '--staging-dir') } : {}),
359
- ...(value(values, '--alert-number') ? { alertNumber: Number(value(values, '--alert-number')) } : {}),
360
- ...(value(values, '--issue-number') ? { issueNumber: Number(value(values, '--issue-number')) } : {}),
361
- ...(values['--auto'] === true ? { auto: true } : {}),
362
- ...(values['--dry-run'] === true ? { dryRun: true } : {})
363
- };
364
- if (intent === 'recover-started') {
365
- const recoveryFlags = new Set(['--agent', '--auto']);
366
- for (const flag of Object.keys(values)) {
367
- if (!recoveryFlags.has(flag))
368
- operationInvalid(`option '${flag}' is not supported for recover-started`);
369
- }
370
- if (values['--auto'] !== true)
371
- operationInvalid('--auto is required for recover-started');
372
- return { family, request: input };
373
- }
374
- else if (values['--auto'] !== undefined) {
375
- operationInvalid('--auto is only supported for recover-started');
376
- }
377
- return { family, request: input };
378
- }
379
- const values = parseValues(args, 2, ORCHESTRATION_FLAGS);
380
- const orchestrationIntents = new Set([
381
- 'begin-or-resume', 'route', 'prepare', 'dispatch', 'await-activation', 'recover-prepared',
382
- 'hook-start', 'hook-stop', 'advance', 'pause', 'status'
383
- ]);
384
- if (!orchestrationIntents.has(intent)) {
385
- operationInvalid(`unknown orchestration intent '${intent}'`);
386
- }
387
- const client = value(values, '--client');
388
- if (client !== undefined && !isAgentClientId(client))
389
- operationInvalid(`unknown client '${client}'`);
390
- const parsedIntent = intent;
391
- const input = {};
392
- if (parsedIntent === 'begin-or-resume' || parsedIntent === 'prepare') {
393
- required(values, ['--client']);
394
- if (!client || !isAgentClientId(client))
395
- operationInvalid(`unknown client '${client ?? ''}'`);
396
- input.client = client;
397
- }
398
- if (parsedIntent === 'begin-or-resume') {
399
- const maxSteps = value(values, '--max-steps');
400
- if (maxSteps !== undefined) {
401
- const parsed = Number(maxSteps);
402
- if (!Number.isInteger(parsed) || parsed < 1)
403
- operationInvalid('--max-steps must be a positive integer');
404
- input.maxSteps = parsed;
405
- }
406
- const policyFlags = ['--executor-model', '--executor-reasoning-effort', '--reviewer-model', '--reviewer-reasoning-effort'];
407
- const hasPolicy = policyFlags.some((flag) => value(values, flag) !== undefined);
408
- if (hasPolicy && policyFlags.some((flag) => value(values, flag) === undefined)) {
409
- operationInvalid('explicit model policy requires executor/reviewer model and reasoning effort');
410
- }
411
- if (hasPolicy) {
412
- input.modelPolicy = {
413
- executor: { model: value(values, '--executor-model'), reasoningEffort: value(values, '--executor-reasoning-effort') },
414
- reviewer: { model: value(values, '--reviewer-model'), reasoningEffort: value(values, '--reviewer-reasoning-effort') }
415
- };
416
- }
417
- }
418
- if (parsedIntent === 'prepare') {
419
- input.requestedModel = value(values, '--requested-model');
420
- input.requestedReasoningEffort = value(values, '--requested-reasoning-effort');
421
- }
422
- if (parsedIntent === 'await-activation') {
423
- required(values, ['--stage', '--round', '--artifact', '--role']);
424
- const round = Number(value(values, '--round'));
425
- if (!Number.isSafeInteger(round) || round < 1)
426
- operationInvalid('--round must be a positive integer');
427
- const role = value(values, '--role');
428
- if (role !== 'executor' && role !== 'reviewer')
429
- operationInvalid('--role must be executor or reviewer');
430
- input.event = { stage: value(values, '--stage'), round, artifact: value(values, '--artifact'), role };
431
- }
432
- if (parsedIntent === 'hook-start') {
433
- required(values, ['--native-agent', '--child-id', '--parent-id']);
434
- if (taskRef === 'auto')
435
- required(values, ['--client']);
436
- input.auto = taskRef === 'auto';
437
- input.client = value(values, '--client');
438
- input.event = {
439
- nativeAgent: value(values, '--native-agent'), childId: value(values, '--child-id'), parentId: value(values, '--parent-id'),
440
- spawnMode: value(values, '--spawn-mode'), actualModel: value(values, '--actual-model'),
441
- actualReasoningEffort: value(values, '--actual-reasoning-effort'), modelFallbackReason: value(values, '--model-fallback-reason'),
442
- reasoningEffortFallbackReason: value(values, '--reasoning-effort-fallback-reason')
443
- };
444
- }
445
- if (parsedIntent === 'hook-stop') {
446
- input.auto = taskRef === 'auto';
447
- if (input.auto) {
448
- required(values, ['--client', '--native-agent', '--child-id']);
449
- input.client = value(values, '--client');
450
- input.event = {
451
- nativeAgent: value(values, '--native-agent'), childId: value(values, '--child-id'), actualModel: value(values, '--actual-model'),
452
- actualReasoningEffort: value(values, '--actual-reasoning-effort'), modelFallbackReason: value(values, '--model-fallback-reason'),
453
- reasoningEffortFallbackReason: value(values, '--reasoning-effort-fallback-reason')
454
- };
455
- }
456
- else {
457
- required(values, ['--child-id', '--exit-code', '--after-fingerprint']);
458
- const exitCode = Number(value(values, '--exit-code'));
459
- if (!Number.isInteger(exitCode))
460
- operationInvalid('--exit-code must be an integer');
461
- input.event = {
462
- childId: value(values, '--child-id'), exitCode, afterFingerprint: value(values, '--after-fingerprint'),
463
- changedPaths: value(values, '--changed-paths')?.split(',').filter(Boolean) ?? [], actualModel: value(values, '--actual-model'),
464
- actualReasoningEffort: value(values, '--actual-reasoning-effort'), modelFallbackReason: value(values, '--model-fallback-reason'),
465
- reasoningEffortFallbackReason: value(values, '--reasoning-effort-fallback-reason')
466
- };
467
- }
468
- }
469
- if (parsedIntent === 'pause') {
470
- required(values, ['--code', '--message', '--recoverable']);
471
- const recoverable = value(values, '--recoverable');
472
- if (recoverable !== 'true' && recoverable !== 'false')
473
- operationInvalid('--recoverable must be true or false');
474
- input.code = value(values, '--code');
475
- input.message = value(values, '--message');
476
- input.recoverable = recoverable === 'true';
477
- }
478
- return { family, taskRef, intent: parsedIntent, input };
227
+ if (intent === 'complete')
228
+ operationInvalid('complete must use task-finalization');
229
+ const values = parseValues(args, 2, LIFECYCLE_FLAGS);
230
+ const agent = normalizeAgentToken(value(values, '--agent') ?? '');
231
+ if (!agent)
232
+ operationInvalid('lifecycle agent is invalid');
233
+ const request = {
234
+ taskRef,
235
+ intent,
236
+ agent,
237
+ ...(value(values, '--reason') ? { reason: value(values, '--reason') } : {}),
238
+ ...(value(values, '--unblock-condition') ? { unblockCondition: value(values, '--unblock-condition') } : {}),
239
+ ...(value(values, '--note') ? { note: value(values, '--note') } : {}),
240
+ ...(value(values, '--staging-dir') ? { stagingDir: value(values, '--staging-dir') } : {}),
241
+ ...(value(values, '--alert-number') ? { alertNumber: Number(value(values, '--alert-number')) } : {}),
242
+ ...(value(values, '--issue-number') ? { issueNumber: Number(value(values, '--issue-number')) } : {}),
243
+ ...(values['--dry-run'] === true ? { dryRun: true } : {})
244
+ };
245
+ return { family, request: request };
479
246
  }
480
247
  //# sourceMappingURL=control-authority.js.map
@@ -16,7 +16,7 @@ export function parseControlOutput(output) {
16
16
  export const SANDBOX_CONTROL_REQUIRED_COMPLETION_PHASES = Object.freeze([
17
17
  'completed', 'evidence-written', 'publish-authorized'
18
18
  ]);
19
- const LIFECYCLE_INTENTS = ['block', 'activate', 'cancel', 'close-codescan', 'close-dependabot', 'restore', 'recover-started'];
19
+ const LIFECYCLE_INTENTS = ['block', 'activate', 'cancel', 'close-codescan', 'close-dependabot', 'restore'];
20
20
  export const SANDBOX_CONTROL_RECOVERY_OPERATIONS = Object.freeze([
21
21
  ...LIFECYCLE_INTENTS.map((intent) => ({ family: 'task-lifecycle', intent, class: 'lifecycle-mutation' })),
22
22
  { family: 'task-create', intent: 'create', class: 'task-create' }
@@ -33,13 +33,11 @@ function bindingMatchesResult(binding, result) {
33
33
  && (result.taskId === undefined || result.taskId === binding.taskId)
34
34
  && (result.intentDigest === undefined || result.intentDigest === binding.intentDigest);
35
35
  }
36
- function domainEvidenceMatches(operation, result, domain) {
36
+ function domainEvidenceMatches(domain) {
37
37
  if (!domain)
38
38
  return false;
39
39
  if (domain.consistent !== true)
40
40
  return false;
41
- if (operation.family === 'task-lifecycle' && operation.intent === 'recover-started')
42
- return false;
43
41
  return true;
44
42
  }
45
43
  export function classifySandboxControlRecovery(input) {
@@ -71,7 +69,7 @@ export function classifySandboxControlRecovery(input) {
71
69
  if (result.changed === null) {
72
70
  return { outcome: 'unknown', responseReconstructable: false, reasonCode: 'RECOVERY_RESULT_CHANGE_FLAG_MISSING' };
73
71
  }
74
- if (!domainEvidenceMatches(input.operation, result, input.domain)) {
72
+ if (!domainEvidenceMatches(input.domain)) {
75
73
  if (input.journal?.exists && (input.journal.completedSteps?.length ?? 0) > 0) {
76
74
  return { outcome: 'in-progress', responseReconstructable: false, reasonCode: 'RECOVERY_DOMAIN_EVIDENCE_INCOMPLETE' };
77
75
  }
@@ -8,6 +8,7 @@ import { readDeliveryDefaults, validateBaseRef, validateRemote } from './deliver
8
8
  import { buildUnboundFact, encodePrDeliveryFact } from './pr-delivery-fact.js';
9
9
  import { CANDIDATE_COLUMNS, CONSTRAINT_COLUMNS, parseTaskQualification } from './qualification-audit.js';
10
10
  import { enumerateAllTaskDirs } from './resolve-ref.js';
11
+ import { serializeLifecycleExecution } from './lifecycle-execution.js';
11
12
  import { parseTaskFrontmatter } from './frontmatter.js';
12
13
  import { AGENT_TOKEN_VALUES } from '../agent-clients/tokens.js';
13
14
  import { resolveProjectTaskWorkspaceRoot } from './workspace-root.js';
@@ -23,7 +24,6 @@ function payloadError(message) {
23
24
  }
24
25
  function exactKeys(value, expected, label, optional = []) {
25
26
  const actual = Object.keys(value).sort();
26
- const wanted = [...expected].sort();
27
27
  const allowed = new Set([...expected, ...optional]);
28
28
  if (actual.some((key) => !allowed.has(key))) {
29
29
  payloadError(`${label} has unknown or missing fields`);
@@ -134,9 +134,6 @@ function taskIdFor(date) {
134
134
  const pad = (value) => String(value).padStart(2, '0');
135
135
  return `TASK-${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}-${pad(date.getHours())}${pad(date.getMinutes())}${pad(date.getSeconds())}`;
136
136
  }
137
- function yamlString(value) {
138
- return JSON.stringify(value);
139
- }
140
137
  function markdownBlock(value) {
141
138
  return value.split(/\r?\n/).map((line) => /^(?:#{1,6}\s|```)/.test(line) ? `\\${line}` : line).join('\n');
142
139
  }
@@ -237,6 +234,7 @@ function renderTask(params) {
237
234
  'target_date:',
238
235
  'current_step: requirement-analysis',
239
236
  `assigned_to: ${candidate.agent}`,
237
+ `lifecycle_execution: ${JSON.stringify(serializeLifecycleExecution([]))}`,
240
238
  `pr_delivery_fact: ${JSON.stringify(encodePrDeliveryFact(buildUnboundFact()))}`,
241
239
  `delivery_remote: ${candidate.deliveryRemote ?? params.delivery.remote}`,
242
240
  `delivery_base_ref: ${candidate.deliveryBaseRef ?? params.delivery.baseRef}`,
@@ -1,5 +1,5 @@
1
1
  import fs from 'node:fs';
2
- import { appendActivityEntry, locateActivityLog } from './activity-log.js';
2
+ import { activityWarnings, appendActivityEntry, locateActivityLog } from './activity-log.js';
3
3
  import { isDecisionItem, listDecisionItems, selectDecisionItem } from './decision-items.js';
4
4
  import { createImplementationInput, finalizeImplementationInput, IMPLEMENTATION_INPUT_ALIASES, parseImplementationInputs, renderImplementationInputs, selectDeclaredImplementationInput } from './implementation-inputs.js';
5
5
  import { LEDGER_COLUMNS, LEDGER_HEADINGS, LEDGER_SECTION_MISSING_CODE, LEDGER_SECTION_MISSING_MESSAGE, parseLedgerDocument } from './ledger.js';
@@ -77,7 +77,7 @@ function applyHumanDecision(request, options = {}) {
77
77
  const replay = existingDecision(content, direct[0], request.decision.trim(), request.needsImplementation);
78
78
  if ('conflict' in replay)
79
79
  return failed('DECISION_CONFLICT', replay.conflict, resolved.taskId, direct[0].id);
80
- return { status: 'no-op', changed: false, taskId: resolved.taskId, ledgerId: direct[0].id, recordId: replay.recordId, implementationInputId: replay.implementationInputId, operations: [], error: null };
80
+ return { status: 'no-op', changed: false, taskId: resolved.taskId, ledgerId: direct[0].id, recordId: replay.recordId, implementationInputId: replay.implementationInputId, operations: [], error: null, warnings: activityWarnings(content) };
81
81
  }
82
82
  catch (error) {
83
83
  return failed('DECISION_DOCUMENT_INVALID', error instanceof Error ? error.message : String(error), resolved.taskId, direct[0].id);
@@ -126,8 +126,6 @@ function applyHumanDecision(request, options = {}) {
126
126
  const decision = request.decision.trim();
127
127
  const record = `### ${recordId}\n\n- **原账本 ID**:${row.id}\n- **裁决时间**:${metadata.timestamp}\n- **裁决结果**:${decision}`;
128
128
  const activity = locateActivityLog(content);
129
- if (!activity)
130
- return failed('DECISION_ACTIVITY_MISSING', 'activity log section is missing or ambiguous', resolved.taskId, row.id);
131
129
  const mutations = [
132
130
  {
133
131
  kind: 'table-row', action: 'upsert', sectionAliases: LEDGER_HEADINGS, columns: LEDGER_COLUMNS,
@@ -155,10 +153,11 @@ function applyHumanDecision(request, options = {}) {
155
153
  body: renderImplementationInputs(nextInputs)
156
154
  });
157
155
  }
158
- mutations.push({
159
- kind: 'section', aliases: ACTIVITY_ALIASES, heading: activity.heading,
160
- body: appendActivityEntry(activity, { time: metadata.timestamp, step: 'Human Decision', agent: 'human', note: `${row.id} decided → ${recordId}` })
161
- });
156
+ if (activity)
157
+ mutations.push({
158
+ kind: 'section', aliases: ACTIVITY_ALIASES, heading: activity.heading,
159
+ body: appendActivityEntry(activity, { time: metadata.timestamp, step: 'Human Decision', agent: 'human', note: `${row.id} decided → ${recordId}` })
160
+ });
162
161
  try {
163
162
  const parsedRework = parseReworkIntentDocument(content);
164
163
  if (!parsedRework.ok)
@@ -177,7 +176,7 @@ function applyHumanDecision(request, options = {}) {
177
176
  });
178
177
  if (writeResult.status === 'failed')
179
178
  return failed(writeResult.error.code, writeResult.error.message, writeResult.taskId, row.id);
180
- return { status: writeResult.status, changed: writeResult.changed, taskId: writeResult.taskId, ledgerId: row.id, recordId, implementationInputId, operations: writeResult.operations, error: null };
179
+ return { status: writeResult.status, changed: writeResult.changed, taskId: writeResult.taskId, ledgerId: row.id, recordId, implementationInputId, operations: writeResult.operations, error: null, warnings: activityWarnings(content) };
181
180
  }
182
181
  export { applyHumanDecision };
183
182
  //# sourceMappingURL=decision-intents.js.map
@@ -1,6 +1,5 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { execFileSync } from 'node:child_process';
4
3
  const REMOTE_RE = /^(?!-)(?!.*\.\.)(?!.*[~^:?*\\\s])[A-Za-z0-9._/-]+$/;
5
4
  const REF_RE = /^(?!-)(?!.*\.\.)(?!.*(?:^|\/)\.)(?!.*[~^:?*\\\s])[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/;
6
5
  function validateRemote(value) {
@@ -55,43 +54,5 @@ function resolveDeliveryTarget(repoRoot, existing = {}, explicit = {}) {
55
54
  return defaults;
56
55
  return bindDeliveryTarget({ defaults: defaults.value, existing, explicit });
57
56
  }
58
- function gitText(repoRoot, args) {
59
- return execFileSync('git', [...args], {
60
- cwd: repoRoot,
61
- encoding: 'utf8',
62
- stdio: ['ignore', 'pipe', 'pipe']
63
- }).trim();
64
- }
65
- function resolveTargetHead(repoRoot, target) {
66
- try {
67
- const output = gitText(repoRoot, ['ls-remote', '--refs', target.remote, `refs/heads/${target.baseRef}`]);
68
- const head = output.split(/\s+/)[0] ?? '';
69
- if (!/^[a-f0-9]{40}$/i.test(head)) {
70
- return { ok: false, code: 'DELIVERY_TARGET_UNAVAILABLE', message: `Delivery target ${target.remote}/${target.baseRef} is unavailable` };
71
- }
72
- try {
73
- gitText(repoRoot, ['cat-file', '-e', `${head}^{commit}`]);
74
- }
75
- catch {
76
- return { ok: false, code: 'DELIVERY_TARGET_OBJECT_MISSING', message: `Delivery target commit ${head} is not available locally` };
77
- }
78
- return { ok: true, value: target, head };
79
- }
80
- catch (error) {
81
- return { ok: false, code: 'DELIVERY_TARGET_UNAVAILABLE', message: error instanceof Error ? error.message : String(error) };
82
- }
83
- }
84
- function resolveDiffBase(repoRoot, reviewedHead, targetHead) {
85
- try {
86
- const diffBase = gitText(repoRoot, ['merge-base', reviewedHead, targetHead]);
87
- if (!/^[a-f0-9]{40}$/i.test(diffBase)) {
88
- return { ok: false, code: 'DELIVERY_DIFF_BASE_UNAVAILABLE', message: 'Git returned an invalid diff base' };
89
- }
90
- return { ok: true, diffBase };
91
- }
92
- catch (error) {
93
- return { ok: false, code: 'DELIVERY_DIFF_BASE_UNAVAILABLE', message: error instanceof Error ? error.message : String(error) };
94
- }
95
- }
96
- export { bindDeliveryTarget, readDeliveryDefaults, resolveDeliveryTarget, resolveTargetHead, resolveDiffBase, validateBaseRef, validateRemote };
57
+ export { bindDeliveryTarget, readDeliveryDefaults, resolveDeliveryTarget, validateBaseRef, validateRemote };
97
58
  //# sourceMappingURL=delivery-target.js.map