@fitlab-ai/agent-infra 0.9.9 → 0.9.11

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 (309) hide show
  1. package/README.md +13 -3
  2. package/README.zh-CN.md +13 -3
  3. package/bin/cli.ts +17 -4
  4. package/dist/bin/cli.js +19 -4
  5. package/dist/bin/internal-cli.js +55 -4
  6. package/dist/lib/agent-client.js +0 -1
  7. package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +17 -10
  8. package/dist/lib/agent-clients/adapters/codex-lifecycle/controller-context.js +11 -31
  9. package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +15 -33
  10. package/dist/lib/agent-clients/adapters/codex-sandbox.js +72 -11
  11. package/dist/lib/agent-clients/adapters/index.js +3 -1
  12. package/dist/lib/agent-clients/adapters/opencode-sandbox.js +0 -4
  13. package/dist/lib/agent-clients/adapters/traecli.js +65 -0
  14. package/dist/lib/agent-clients/config.js +14 -99
  15. package/dist/lib/agent-clients/reconcile.js +1 -11
  16. package/dist/lib/agent-clients/schema.js +5 -4
  17. package/dist/lib/agent-clients/tokens.js +7 -17
  18. package/dist/lib/agent-clients/types.js +2 -1
  19. package/dist/lib/decide.js +14 -30
  20. package/dist/lib/defaults.json +9 -0
  21. package/dist/lib/init.js +2 -2
  22. package/dist/lib/internal/codex-lifecycle.js +2 -2
  23. package/dist/lib/internal/codex-sandbox-controller.js +4 -3
  24. package/dist/lib/internal/release-workflow.js +0 -1
  25. package/dist/lib/internal/sandbox-control.js +2 -2
  26. package/dist/lib/internal/task-finalization.js +19 -9
  27. package/dist/lib/internal/task-ledger.js +8 -2
  28. package/dist/lib/internal/task-lifecycle.js +17 -93
  29. package/dist/lib/internal/task-orchestration.js +30 -216
  30. package/dist/lib/{task/commands/validate.js → internal/task-validate.js} +77 -43
  31. package/dist/lib/merge.js +205 -103
  32. package/dist/lib/process-data/normalize.js +2 -9
  33. package/dist/lib/run/host.js +46 -16
  34. package/dist/lib/run/tui.js +5 -2
  35. package/dist/lib/sandbox/agent-client-reconciler.js +4 -12
  36. package/dist/lib/sandbox/commands/create.js +3 -3
  37. package/dist/lib/sandbox/commands/enter.js +18 -4
  38. package/dist/lib/sandbox/config.js +3 -12
  39. package/dist/lib/sandbox/control/controller-registration.js +4 -2
  40. package/dist/lib/sandbox/control/executor.js +135 -40
  41. package/dist/lib/sandbox/control/lifecycle.js +29 -20
  42. package/dist/lib/sandbox/control/server.js +18 -16
  43. package/dist/lib/sandbox/mounts.js +3 -2
  44. package/dist/lib/sandbox/recovery.js +123 -22
  45. package/dist/lib/sandbox/workspace-identity.js +14 -0
  46. package/dist/lib/sandbox/workspace-view.js +8 -9
  47. package/dist/lib/self-update.js +278 -0
  48. package/dist/lib/server/protocol.js +5 -5
  49. package/dist/lib/task/activity-log.js +4 -1
  50. package/dist/lib/task/artifact-lifecycle.js +4 -2
  51. package/dist/lib/task/codex-orchestration.js +32 -35
  52. package/dist/lib/task/command-options.js +1 -3
  53. package/dist/lib/task/commands/cat.js +0 -5
  54. package/dist/lib/task/commands/decisions.js +76 -92
  55. package/dist/lib/task/commands/files.js +6 -6
  56. package/dist/lib/task/commands/grep.js +25 -61
  57. package/dist/lib/task/commands/issue-body.js +6 -6
  58. package/dist/lib/task/commands/log.js +25 -10
  59. package/dist/lib/task/commands/show.js +5 -6
  60. package/dist/lib/task/commands/status.js +8 -8
  61. package/dist/lib/task/commit-operation.js +21 -25
  62. package/dist/lib/task/commit-policy.js +1 -1
  63. package/dist/lib/task/control-authority.js +431 -0
  64. package/dist/lib/task/create.js +6 -1
  65. package/dist/lib/task/current-contract.js +35 -0
  66. package/dist/lib/task/decision-details.js +263 -0
  67. package/dist/lib/task/decision-intents.js +5 -2
  68. package/dist/lib/task/delegation-receipts.js +8 -7
  69. package/dist/lib/task/events.js +11 -5
  70. package/dist/lib/task/finalization.js +72 -46
  71. package/dist/lib/task/index.js +19 -29
  72. package/dist/lib/task/ledger-intents.js +8 -9
  73. package/dist/lib/task/ledger.js +13 -6
  74. package/dist/lib/task/lifecycle.js +16 -0
  75. package/dist/lib/task/orchestration.js +51 -14
  76. package/dist/lib/task/review-artifacts.js +31 -12
  77. package/dist/lib/task/review-finalization.js +19 -6
  78. package/dist/lib/task/verification-engine.js +38 -18
  79. package/dist/lib/task/verification-review.js +1 -1
  80. package/dist/lib/task/workspace-snapshot.js +5 -11
  81. package/dist/lib/task/write.js +11 -1
  82. package/dist/lib/update.js +6 -37
  83. package/dist/lib/version.js +5 -1
  84. package/dist/lifecycle-build-manifest.json +3 -3
  85. package/lib/agent-client.ts +0 -1
  86. package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +25 -10
  87. package/lib/agent-clients/adapters/codex-lifecycle/controller-context.ts +16 -33
  88. package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +16 -35
  89. package/lib/agent-clients/adapters/codex-sandbox.ts +89 -14
  90. package/lib/agent-clients/adapters/index.ts +3 -1
  91. package/lib/agent-clients/adapters/opencode-sandbox.ts +0 -5
  92. package/lib/agent-clients/adapters/traecli.ts +66 -0
  93. package/lib/agent-clients/config.ts +14 -144
  94. package/lib/agent-clients/reconcile.ts +1 -12
  95. package/lib/agent-clients/schema.ts +5 -4
  96. package/lib/agent-clients/tokens.ts +7 -20
  97. package/lib/agent-clients/types.ts +2 -1
  98. package/lib/decide.ts +12 -22
  99. package/lib/defaults.json +9 -0
  100. package/lib/init.ts +2 -2
  101. package/lib/internal/codex-lifecycle.ts +2 -2
  102. package/lib/internal/codex-sandbox-controller.ts +4 -3
  103. package/lib/internal/release-workflow.ts +0 -1
  104. package/lib/internal/sandbox-control.ts +2 -2
  105. package/lib/internal/task-finalization.ts +27 -13
  106. package/lib/internal/task-ledger.ts +8 -2
  107. package/lib/internal/task-lifecycle.ts +33 -76
  108. package/lib/internal/task-orchestration.ts +33 -190
  109. package/lib/{task/commands/validate.ts → internal/task-validate.ts} +77 -41
  110. package/lib/merge.ts +236 -120
  111. package/lib/process-data/normalize.ts +2 -8
  112. package/lib/run/host.ts +63 -14
  113. package/lib/run/tui.ts +5 -3
  114. package/lib/sandbox/agent-client-reconciler.ts +5 -15
  115. package/lib/sandbox/commands/create.ts +4 -4
  116. package/lib/sandbox/commands/enter.ts +24 -4
  117. package/lib/sandbox/config.ts +2 -14
  118. package/lib/sandbox/control/container-identity.ts +2 -2
  119. package/lib/sandbox/control/controller-registration.ts +8 -3
  120. package/lib/sandbox/control/executor.ts +156 -53
  121. package/lib/sandbox/control/lifecycle.ts +34 -28
  122. package/lib/sandbox/control/protocol.ts +1 -3
  123. package/lib/sandbox/control/server.ts +15 -12
  124. package/lib/sandbox/control/state.ts +7 -7
  125. package/lib/sandbox/mounts.ts +4 -3
  126. package/lib/sandbox/recovery.ts +162 -34
  127. package/lib/sandbox/tools.ts +1 -1
  128. package/lib/sandbox/workspace-identity.ts +28 -0
  129. package/lib/sandbox/workspace-view.ts +14 -10
  130. package/lib/self-update.ts +341 -0
  131. package/lib/server/protocol.ts +5 -5
  132. package/lib/task/activity-log.ts +6 -1
  133. package/lib/task/artifact-lifecycle.ts +5 -3
  134. package/lib/task/codex-orchestration.ts +40 -45
  135. package/lib/task/command-options.ts +1 -2
  136. package/lib/task/commands/cat.ts +0 -4
  137. package/lib/task/commands/decisions.ts +80 -75
  138. package/lib/task/commands/files.ts +6 -6
  139. package/lib/task/commands/grep.ts +23 -51
  140. package/lib/task/commands/issue-body.ts +6 -6
  141. package/lib/task/commands/log.ts +22 -10
  142. package/lib/task/commands/show.ts +5 -6
  143. package/lib/task/commands/status.ts +8 -8
  144. package/lib/task/commit-operation.ts +25 -30
  145. package/lib/task/commit-policy.ts +1 -2
  146. package/lib/task/control-authority.ts +563 -0
  147. package/lib/task/create.ts +6 -1
  148. package/lib/task/current-contract.ts +49 -0
  149. package/lib/task/decision-details.ts +340 -0
  150. package/lib/task/decision-intents.ts +7 -2
  151. package/lib/task/delegation-receipts.ts +8 -6
  152. package/lib/task/events.ts +10 -5
  153. package/lib/task/finalization.ts +84 -42
  154. package/lib/task/index.ts +19 -28
  155. package/lib/task/ledger-intents.ts +6 -8
  156. package/lib/task/ledger.ts +17 -7
  157. package/lib/task/lifecycle.ts +20 -0
  158. package/lib/task/orchestration.ts +42 -16
  159. package/lib/task/review-artifacts.ts +53 -15
  160. package/lib/task/review-finalization.ts +33 -7
  161. package/lib/task/verification-engine.ts +33 -21
  162. package/lib/task/verification-review.ts +1 -1
  163. package/lib/task/workspace-snapshot.ts +4 -13
  164. package/lib/task/write.ts +20 -1
  165. package/lib/update.ts +6 -40
  166. package/lib/version.ts +6 -1
  167. package/package.json +1 -1
  168. package/templates/.agents/QUICKSTART.en.md +2 -3
  169. package/templates/.agents/QUICKSTART.zh-CN.md +2 -3
  170. package/templates/.agents/README.en.md +5 -3
  171. package/templates/.agents/README.zh-CN.md +5 -3
  172. package/templates/.agents/rules/README.en.md +1 -0
  173. package/templates/.agents/rules/README.zh-CN.md +1 -0
  174. package/templates/.agents/rules/compatibility-policy.en.md +40 -0
  175. package/templates/.agents/rules/compatibility-policy.zh-CN.md +40 -0
  176. package/templates/.agents/rules/create-issue.github.en.md +1 -1
  177. package/templates/.agents/rules/create-issue.github.zh-CN.md +1 -1
  178. package/templates/.agents/rules/human-decision-context.en.md +9 -7
  179. package/templates/.agents/rules/human-decision-context.zh-CN.md +9 -7
  180. package/templates/.agents/rules/issue-fields.github.en.md +1 -1
  181. package/templates/.agents/rules/issue-fields.github.zh-CN.md +1 -1
  182. package/templates/.agents/rules/issue-pr-commands.en.md +1 -1
  183. package/templates/.agents/rules/issue-pr-commands.github.en.md +1 -1
  184. package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +1 -1
  185. package/templates/.agents/rules/issue-pr-commands.zh-CN.md +1 -1
  186. package/templates/.agents/rules/issue-sync.github.en.md +1 -1
  187. package/templates/.agents/rules/issue-sync.github.zh-CN.md +2 -2
  188. package/templates/.agents/rules/lifecycle-orchestration.en.md +4 -4
  189. package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +4 -4
  190. package/templates/.agents/rules/milestone-inference.github.en.md +1 -1
  191. package/templates/.agents/rules/milestone-inference.github.zh-CN.md +1 -1
  192. package/templates/.agents/rules/next-step-output.en.md +3 -3
  193. package/templates/.agents/rules/next-step-output.zh-CN.md +3 -3
  194. package/templates/.agents/rules/no-mid-flow-questions.en.md +1 -1
  195. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +1 -1
  196. package/templates/.agents/rules/pr-sync.en.md +2 -2
  197. package/templates/.agents/rules/pr-sync.github.en.md +3 -2
  198. package/templates/.agents/rules/pr-sync.github.zh-CN.md +3 -1
  199. package/templates/.agents/rules/pr-sync.zh-CN.md +2 -1
  200. package/templates/.agents/rules/release-commands.github.en.md +6 -0
  201. package/templates/.agents/rules/release-commands.github.zh-CN.md +6 -0
  202. package/templates/.agents/rules/review-handshake.en.md +1 -1
  203. package/templates/.agents/rules/review-handshake.zh-CN.md +1 -1
  204. package/templates/.agents/rules/review-method.en.md +1 -0
  205. package/templates/.agents/rules/review-method.zh-CN.md +1 -0
  206. package/templates/.agents/rules/task-management.en.md +1 -2
  207. package/templates/.agents/rules/task-management.zh-CN.md +1 -2
  208. package/templates/.agents/skills/analyze-task/SKILL.en.md +4 -3
  209. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +4 -3
  210. package/templates/.agents/skills/block-task/SKILL.en.md +2 -2
  211. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +2 -2
  212. package/templates/.agents/skills/cancel-task/SKILL.en.md +2 -2
  213. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +2 -2
  214. package/templates/.agents/skills/check-task/SKILL.en.md +2 -2
  215. package/templates/.agents/skills/check-task/SKILL.zh-CN.md +2 -2
  216. package/templates/.agents/skills/close-codescan/SKILL.en.md +1 -1
  217. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +1 -1
  218. package/templates/.agents/skills/close-dependabot/SKILL.en.md +1 -1
  219. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +1 -1
  220. package/templates/.agents/skills/code-task/SKILL.en.md +4 -3
  221. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +5 -3
  222. package/templates/.agents/skills/commit/SKILL.en.md +27 -7
  223. package/templates/.agents/skills/commit/SKILL.zh-CN.md +3 -4
  224. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +5 -5
  225. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +5 -5
  226. package/templates/.agents/skills/complete-task/SKILL.en.md +3 -3
  227. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +3 -3
  228. package/templates/.agents/skills/create-pr/SKILL.en.md +15 -11
  229. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +15 -11
  230. package/templates/.agents/skills/create-pr/reference/change-report.en.md +46 -0
  231. package/templates/.agents/skills/create-pr/reference/change-report.zh-CN.md +46 -0
  232. package/templates/.agents/skills/create-pr/scripts/change-report.mjs +203 -0
  233. package/templates/.agents/skills/create-release-note/SKILL.en.md +5 -6
  234. package/templates/.agents/skills/create-release-note/SKILL.zh-CN.md +5 -6
  235. package/templates/.agents/skills/create-task/SKILL.en.md +1 -1
  236. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +1 -1
  237. package/templates/.agents/skills/import-issue/SKILL.en.md +1 -1
  238. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +1 -1
  239. package/templates/.agents/skills/plan-task/SKILL.en.md +5 -4
  240. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +5 -4
  241. package/templates/.agents/skills/restore-task/SKILL.en.md +1 -1
  242. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +1 -1
  243. package/templates/.agents/skills/review-analysis/SKILL.en.md +5 -3
  244. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +5 -3
  245. package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -0
  246. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -0
  247. package/templates/.agents/skills/review-code/SKILL.en.md +5 -3
  248. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -3
  249. package/templates/.agents/skills/review-code/config/verify.en.json +1 -0
  250. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -0
  251. package/templates/.agents/skills/review-code/reference/migration-risks.en.md +9 -6
  252. package/templates/.agents/skills/review-code/reference/migration-risks.zh-CN.md +9 -6
  253. package/templates/.agents/skills/review-plan/SKILL.en.md +5 -3
  254. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +5 -3
  255. package/templates/.agents/skills/review-plan/config/verify.en.json +1 -0
  256. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -0
  257. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +7 -3
  258. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +7 -3
  259. package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.en.md +1 -1
  260. package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.zh-CN.md +1 -1
  261. package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +2 -2
  262. package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +2 -2
  263. package/templates/.agents/skills/run-task/SKILL.en.md +6 -2
  264. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +6 -2
  265. package/templates/.agents/skills/run-task/reference/host-validation.en.md +2 -2
  266. package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +2 -2
  267. package/templates/.agents/skills/update-agent-infra/SKILL.en.md +2 -2
  268. package/templates/.agents/skills/update-agent-infra/SKILL.zh-CN.md +2 -2
  269. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +159 -104
  270. package/templates/.agents/skills/watch-pr/SKILL.en.md +2 -2
  271. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +2 -2
  272. package/templates/.agents/templates/task.en.md +1 -1
  273. package/templates/.agents/templates/task.zh-CN.md +1 -1
  274. package/templates/.claude/commands/analyze-task.en.md +1 -1
  275. package/templates/.claude/commands/analyze-task.zh-CN.md +1 -1
  276. package/templates/.claude/commands/block-task.en.md +1 -1
  277. package/templates/.claude/commands/block-task.zh-CN.md +1 -1
  278. package/templates/.claude/commands/cancel-task.en.md +1 -1
  279. package/templates/.claude/commands/cancel-task.zh-CN.md +1 -1
  280. package/templates/.claude/commands/check-task.en.md +1 -1
  281. package/templates/.claude/commands/check-task.zh-CN.md +1 -1
  282. package/templates/.claude/commands/code-task.en.md +1 -1
  283. package/templates/.claude/commands/code-task.zh-CN.md +1 -1
  284. package/templates/.claude/commands/commit.en.md +1 -1
  285. package/templates/.claude/commands/commit.zh-CN.md +1 -1
  286. package/templates/.claude/commands/complete-manual-validation.en.md +1 -1
  287. package/templates/.claude/commands/complete-manual-validation.zh-CN.md +1 -1
  288. package/templates/.claude/commands/complete-task.en.md +1 -1
  289. package/templates/.claude/commands/complete-task.zh-CN.md +1 -1
  290. package/templates/.claude/commands/create-pr.en.md +1 -1
  291. package/templates/.claude/commands/create-pr.zh-CN.md +1 -1
  292. package/templates/.claude/commands/plan-task.en.md +1 -1
  293. package/templates/.claude/commands/plan-task.zh-CN.md +1 -1
  294. package/templates/.claude/commands/review-analysis.en.md +1 -1
  295. package/templates/.claude/commands/review-analysis.zh-CN.md +1 -1
  296. package/templates/.claude/commands/review-code.en.md +1 -1
  297. package/templates/.claude/commands/review-code.zh-CN.md +1 -1
  298. package/templates/.claude/commands/review-plan.en.md +1 -1
  299. package/templates/.claude/commands/review-plan.zh-CN.md +1 -1
  300. package/templates/.claude/commands/run-manual-validation.en.md +1 -1
  301. package/templates/.claude/commands/run-manual-validation.zh-CN.md +1 -1
  302. package/templates/.claude/commands/run-task.en.md +1 -1
  303. package/templates/.claude/commands/run-task.zh-CN.md +1 -1
  304. package/templates/.claude/commands/watch-pr.en.md +1 -1
  305. package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
  306. package/templates/.traecli/commands/update-agent-infra.en.md +7 -0
  307. package/templates/.traecli/commands/update-agent-infra.zh-CN.md +7 -0
  308. package/dist/lib/builtin-tuis.js +0 -40
  309. package/lib/builtin-tuis.ts +0 -56
@@ -3,15 +3,15 @@ import { classifyAgent } from '../../agent-clients/tokens.js';
3
3
  import { formatTable } from '../../table.js';
4
4
  import { parseTaskScope } from '../command-options.js';
5
5
  import { resolveTaskContext } from '../resolve-ref.js';
6
- import { isReviewStage, parseLedger } from '../ledger.js';
6
+ import { LEDGER_SECTION_MISSING_CODE, LEDGER_SECTION_MISSING_MESSAGE, isReviewStage, parseLedgerDocument } from '../ledger.js';
7
7
  import { parseActivityLog, pairEntries } from '../activity-log.js';
8
- const USAGE = `Usage: ai task log [<N | TASK-id> | --task <ref> | -t <ref>]
8
+ const USAGE = `Usage: ai task log [--task <ref> | -t <ref>]
9
9
 
10
10
  Renders a task's activity log as a per-step status table. A step's start and
11
11
  completion are paired onto one row: STARTED holds the start time, DONE the
12
12
  completion time (or '(in progress)' while still running).
13
- Omit <ref> Resolve the unique active task for the current branch.
14
- <ref> Bare numeric short id, or a full TASK-YYYYMMDD-HHMMSS id.
13
+ Omit the scope Resolve the unique active task for the current branch.
14
+ --task/-t <ref> Bare numeric short id, or a full TASK-YYYYMMDD-HHMMSS id.
15
15
 
16
16
  Columns: # (row) / STEP / AGENT / STARTED / DONE / NOTE
17
17
  A human-executed step shows AGENT as 'human' and, when it has no start marker,
@@ -85,8 +85,8 @@ function isHumanCountField(field) {
85
85
  return fieldNumber(field, 'manual-validation') !== undefined || fieldNumber(field, 'human-decision') !== undefined;
86
86
  }
87
87
  // A step is human-executed when its agent token is not a known AI token.
88
- // Known long names (claude-code -> claude, gemini-cli -> gemini) classify as
89
- // AI; empty or unknown tokens classify as non-AI (human).
88
+ // Known long names classify as AI; empty or unknown tokens classify as non-AI
89
+ // (human).
90
90
  export function isHumanAgent(agent) {
91
91
  return classifyAgent(agent).status !== 'ai';
92
92
  }
@@ -118,12 +118,12 @@ function log(args = []) {
118
118
  process.exitCode = 1;
119
119
  return;
120
120
  }
121
- if (scope.positionals.length > 1 || (scope.explicit && scope.positionals.length > 0)) {
122
- process.stderr.write('ai task log: task ref must be provided once\n');
121
+ if (scope.positionals.length > 0) {
122
+ process.stderr.write('ai task log: positional task ref is not supported; use --task <ref> or -t <ref>\n');
123
123
  process.exitCode = 1;
124
124
  return;
125
125
  }
126
- const resolved = resolveTaskContext(scope.taskRef ?? scope.positionals[0]);
126
+ const resolved = resolveTaskContext(scope.taskRef);
127
127
  if (!resolved.ok) {
128
128
  process.stderr.write(`ai task log: ${resolved.message}\n`);
129
129
  process.exitCode = 1;
@@ -142,7 +142,18 @@ function log(args = []) {
142
142
  return;
143
143
  }
144
144
  const steps = pairEntries(entries);
145
- const humanDecisionCounts = countHumanDecisionsByStage(parseLedger(content));
145
+ let humanDecisionCounts = new Map();
146
+ let ledgerDiagnostic = null;
147
+ try {
148
+ const ledger = parseLedgerDocument(content);
149
+ if (ledger.present)
150
+ humanDecisionCounts = countHumanDecisionsByStage(ledger.rows);
151
+ else
152
+ ledgerDiagnostic = `${LEDGER_SECTION_MISSING_CODE}: ${LEDGER_SECTION_MISSING_MESSAGE}`;
153
+ }
154
+ catch (error) {
155
+ ledgerDiagnostic = `LEDGER_DOCUMENT_INVALID: ${error instanceof Error ? error.message : String(error)}`;
156
+ }
146
157
  const rows = steps.map((s, idx) => {
147
158
  const stage = reviewStageForStep(s.step);
148
159
  const note = stage
@@ -157,6 +168,10 @@ function log(args = []) {
157
168
  for (const line of formatTable(TABLE_HEADERS, rows, { zebra: Boolean(process.stdout.isTTY) })) {
158
169
  process.stdout.write(`${line}\n`);
159
170
  }
171
+ if (ledgerDiagnostic) {
172
+ process.stdout.write(`Ledger: unavailable [${ledgerDiagnostic}]\n`);
173
+ process.exitCode = 1;
174
+ }
160
175
  process.stdout.write(`Total: ${steps.length} steps\n`);
161
176
  }
162
177
  export { log };
@@ -1,12 +1,11 @@
1
1
  import fs from 'node:fs';
2
2
  import { parseTaskScope } from '../command-options.js';
3
3
  import { resolveTaskContext } from '../resolve-ref.js';
4
- const USAGE = `Usage: ai task show [<N | TASK-id> | --task <ref> | -t <ref>]
4
+ const USAGE = `Usage: ai task show [--task <ref> | -t <ref>]
5
5
 
6
6
  Prints the task.md content for the matching task.
7
7
  Omit the ref Resolve the unique active task for the current branch.
8
- N (bare numeric) Recommended; resolves the active short id via the registry.
9
- TASK-YYYYMMDD-HHMMSS Locates a task in active / blocked / completed / archive.
8
+ --task/-t <ref> Bare numeric short id, or a full TASK-YYYYMMDD-HHMMSS id.
10
9
  `;
11
10
  function show(args = []) {
12
11
  if (args[0] === '--help' || args[0] === '-h') {
@@ -22,12 +21,12 @@ function show(args = []) {
22
21
  process.exitCode = 1;
23
22
  return;
24
23
  }
25
- if (scope.positionals.length > 1 || (scope.explicit && scope.positionals.length > 0)) {
26
- process.stderr.write('ai task show: task ref must be provided once\n');
24
+ if (scope.positionals.length > 0) {
25
+ process.stderr.write('ai task show: positional task ref is not supported; use --task <ref> or -t <ref>\n');
27
26
  process.exitCode = 1;
28
27
  return;
29
28
  }
30
- const resolved = resolveTaskContext(scope.taskRef ?? scope.positionals[0]);
29
+ const resolved = resolveTaskContext(scope.taskRef);
31
30
  if (!resolved.ok) {
32
31
  process.stderr.write(`ai task show: ${resolved.message}\n`);
33
32
  process.exitCode = 1;
@@ -8,15 +8,15 @@ import { enumerateArtifacts } from '../artifacts.js';
8
8
  import { parseTaskFrontmatter, extractTitle } from '../frontmatter.js';
9
9
  import { loadShortIdByTaskId } from '../short-id.js';
10
10
  import { getOpenWorkflowWarnings, formatWorkflowWarningSummary } from '../workflow-warnings.js';
11
- import { parseActivityLog, pairEntries } from '../activity-log.js';
11
+ import { parseActivityLog, pairEntries, startedBackedRows } from '../activity-log.js';
12
12
  import { readRun } from '../orchestration.js';
13
13
  import { statusCard } from '../../server/display.js';
14
- const USAGE = `Usage: ai task status [<N | TASK-id> | --task <ref> | -t <ref>]
14
+ const USAGE = `Usage: ai task status [--task <ref> | -t <ref>]
15
15
 
16
16
  Prints an aggregated "health check" view for a task: header, metadata,
17
17
  artifacts, workflow/runtime execution state, and git branch state.
18
- Omit <ref> Resolve the unique active task for the current branch.
19
- <ref> Bare numeric short id, or a full TASK-YYYYMMDD-HHMMSS id.
18
+ Omit the scope Resolve the unique active task for the current branch.
19
+ --task/-t <ref> Bare numeric short id, or a full TASK-YYYYMMDD-HHMMSS id.
20
20
 
21
21
  Git rows are best-effort: a failed git call degrades that row to '-' without
22
22
  failing the command.
@@ -155,7 +155,7 @@ function collectWorkflow(content, now = new Date()) {
155
155
  if (!parsed.sectionFound || parsed.entries.length === 0) {
156
156
  return { state: 'unknown', step: DASH, agent: DASH, startedAt: DASH, doneAt: DASH, stale: DASH };
157
157
  }
158
- const rows = pairEntries(parsed.entries);
158
+ const rows = startedBackedRows(pairEntries(parsed.entries));
159
159
  const latest = rows.at(-1);
160
160
  if (!latest) {
161
161
  return { state: 'unknown', step: DASH, agent: DASH, startedAt: DASH, doneAt: DASH, stale: DASH };
@@ -431,10 +431,10 @@ function status(args = []) {
431
431
  let model;
432
432
  try {
433
433
  const scope = parseTaskScope(args);
434
- if (scope.positionals.length > 1 || (scope.explicit && scope.positionals.length > 0)) {
435
- throw new Error('task ref must be provided once');
434
+ if (scope.positionals.length > 0) {
435
+ throw new Error('positional task ref is not supported; use --task <ref> or -t <ref>');
436
436
  }
437
- const resolved = resolveTaskContext(scope.taskRef ?? scope.positionals[0]);
437
+ const resolved = resolveTaskContext(scope.taskRef);
438
438
  if (!resolved.ok)
439
439
  throw new Error(resolved.message);
440
440
  model = buildFromResolved({
@@ -82,12 +82,12 @@ function boundTask(input, taskId, taskDir, taskMdPath, repoRoot, state) {
82
82
  function validateCommon(input, branch) {
83
83
  if (!input.message.trim())
84
84
  return { code: 'GIT_COMMIT_INPUT_INVALID', message: 'Commit message is required' };
85
- if (input.paths.length === 0 && !input.push)
86
- return { code: 'GIT_COMMIT_INPUT_INVALID', message: 'At least one explicit path is required unless this is a push-only retry' };
87
85
  if (!/^[a-f0-9]{40,64}$/.test(input.expectedHead))
88
86
  return { code: 'GIT_HEAD_EXPECTATION_REQUIRED', message: 'A valid expected HEAD is required' };
89
87
  if (!/^[a-f0-9]{40,64}$/.test(input.expectedTree))
90
88
  return { code: 'GIT_TREE_EXPECTATION_REQUIRED', message: 'A valid expected tree is required' };
89
+ if (!input.push)
90
+ return { code: 'GIT_PUSH_INPUT_INVALID', message: 'Commit delivery requires a push policy' };
91
91
  if (input.paths.some((candidate) => !candidate || candidate.startsWith('/') || candidate.split(/[\\/]/).includes('..'))) {
92
92
  return { code: 'GIT_COMMIT_INPUT_INVALID', message: 'Commit paths must stay inside the repository' };
93
93
  }
@@ -96,13 +96,11 @@ function validateCommon(input, branch) {
96
96
  }
97
97
  if (branch !== null && branch === '')
98
98
  return { code: 'GIT_BRANCH_INVALID', message: 'A named branch is required' };
99
- if (input.push) {
100
- if (!input.push.remote || input.push.refs.length !== 1)
101
- return { code: 'GIT_PUSH_INPUT_INVALID', message: 'Push requires one remote and one ref' };
102
- const ref = input.push.refs[0] ?? '';
103
- if (!HEAD_REF.test(ref) || HEAD_REF.exec(ref)?.[1] !== branch) {
104
- return { code: 'GIT_PUSH_INPUT_INVALID', message: 'Push ref must be the current full heads ref' };
105
- }
99
+ if (!input.push.remote || input.push.refs.length !== 1)
100
+ return { code: 'GIT_PUSH_INPUT_INVALID', message: 'Push requires one remote and one ref' };
101
+ const ref = input.push.refs[0] ?? '';
102
+ if (!HEAD_REF.test(ref) || HEAD_REF.exec(ref)?.[1] !== branch) {
103
+ return { code: 'GIT_PUSH_INPUT_INVALID', message: 'Push ref must be the current full heads ref' };
106
104
  }
107
105
  return null;
108
106
  }
@@ -253,22 +251,20 @@ function executeUnlocked(input, task, mode) {
253
251
  }
254
252
  let status = committed.status;
255
253
  let result = committed.status === 'applied' ? 'committed' : 'no_op';
256
- if (input.push) {
257
- const target = `${input.push.remote}:${input.push.refs[0]}`;
258
- const decision = commitPushDecision({ branch, automatic: input.push.automatic }, target);
259
- if (!decision.shouldPush) {
260
- warnings.push(decision.warning);
261
- }
262
- else {
263
- const pushed = pushGitRefs({
264
- cwd: input.cwd,
265
- remote: input.push.remote,
266
- refs: input.push.refs,
267
- expectedSha: committed.snapshot?.head ?? gitText(input.cwd, ['rev-parse', 'HEAD'])
268
- });
269
- if (pushed.status !== 'applied')
270
- warnings.push(warning('COMMIT_PUSH_FAILED', pushed.error?.message ?? 'Git push failed', true, 'push', target, 'ACTION_REQUIRED'));
271
- }
254
+ const target = `${input.push.remote}:${input.push.refs[0]}`;
255
+ const decision = commitPushDecision({ branch }, target);
256
+ if (!decision.shouldPush) {
257
+ warnings.push(decision.warning);
258
+ }
259
+ else {
260
+ const pushed = pushGitRefs({
261
+ cwd: input.cwd,
262
+ remote: input.push.remote,
263
+ refs: input.push.refs,
264
+ expectedSha: committed.snapshot?.head ?? gitText(input.cwd, ['rev-parse', 'HEAD'])
265
+ });
266
+ if (pushed.status !== 'applied')
267
+ warnings.push(warning('COMMIT_PUSH_FAILED', pushed.error?.message ?? 'Git push failed', true, 'push', target, 'ACTION_REQUIRED'));
272
268
  }
273
269
  if (warnings.length > 0) {
274
270
  status = 'applied';
@@ -1,6 +1,6 @@
1
1
  function commitPushDecision(policy, target) {
2
2
  const branch = policy.branch.trim();
3
- if (policy.automatic && (branch === 'main' || branch === 'master'))
3
+ if (branch === 'main' || branch === 'master')
4
4
  return {
5
5
  shouldPush: false,
6
6
  warning: {