agentplane 0.1.6 → 0.1.8

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 (138) hide show
  1. package/assets/AGENTS.md +1 -1
  2. package/assets/agents/ORCHESTRATOR.json +1 -1
  3. package/assets/agents/UPGRADER.json +1 -1
  4. package/dist/backends/task-backend.d.ts +16 -0
  5. package/dist/backends/task-backend.d.ts.map +1 -1
  6. package/dist/backends/task-backend.js +44 -0
  7. package/dist/backends/task-index.d.ts.map +1 -1
  8. package/dist/backends/task-index.js +3 -6
  9. package/dist/cli/command-guide.d.ts.map +1 -1
  10. package/dist/cli/command-guide.js +4 -4
  11. package/dist/cli/help.d.ts.map +1 -1
  12. package/dist/cli/help.js +7 -5
  13. package/dist/cli/run-cli.d.ts.map +1 -1
  14. package/dist/cli/run-cli.js +39 -78
  15. package/dist/commands/backend.d.ts.map +1 -1
  16. package/dist/commands/backend.js +17 -2
  17. package/dist/commands/branch/index.d.ts +60 -0
  18. package/dist/commands/branch/index.d.ts.map +1 -0
  19. package/dist/commands/branch/index.js +513 -0
  20. package/dist/commands/guard/index.d.ts +67 -0
  21. package/dist/commands/guard/index.d.ts.map +1 -0
  22. package/dist/commands/guard/index.js +367 -0
  23. package/dist/commands/hooks/index.d.ts +18 -0
  24. package/dist/commands/hooks/index.d.ts.map +1 -0
  25. package/dist/commands/hooks/index.js +290 -0
  26. package/dist/commands/pr/index.d.ts +46 -0
  27. package/dist/commands/pr/index.d.ts.map +1 -0
  28. package/dist/commands/pr/index.js +857 -0
  29. package/dist/commands/recipes.d.ts.map +1 -1
  30. package/dist/commands/recipes.js +67 -23
  31. package/dist/commands/shared/git-diff.d.ts +9 -0
  32. package/dist/commands/shared/git-diff.d.ts.map +1 -0
  33. package/dist/commands/shared/git-diff.js +41 -0
  34. package/dist/commands/shared/git-ops.d.ts +24 -0
  35. package/dist/commands/shared/git-ops.d.ts.map +1 -0
  36. package/dist/commands/shared/git-ops.js +181 -0
  37. package/dist/commands/shared/git-worktree.d.ts +8 -0
  38. package/dist/commands/shared/git-worktree.d.ts.map +1 -0
  39. package/dist/commands/shared/git-worktree.js +48 -0
  40. package/dist/commands/shared/git.d.ts +4 -0
  41. package/dist/commands/shared/git.d.ts.map +1 -0
  42. package/dist/commands/shared/git.js +14 -0
  43. package/dist/commands/shared/network-approval.d.ts +8 -0
  44. package/dist/commands/shared/network-approval.d.ts.map +1 -0
  45. package/dist/commands/shared/network-approval.js +25 -0
  46. package/dist/commands/shared/path.d.ts +3 -0
  47. package/dist/commands/shared/path.d.ts.map +1 -0
  48. package/dist/commands/shared/path.js +14 -0
  49. package/dist/commands/shared/pr-meta.d.ts +21 -0
  50. package/dist/commands/shared/pr-meta.d.ts.map +1 -0
  51. package/dist/commands/shared/pr-meta.js +72 -0
  52. package/dist/commands/shared/task-backend.d.ts +15 -0
  53. package/dist/commands/shared/task-backend.d.ts.map +1 -0
  54. package/dist/commands/shared/task-backend.js +61 -0
  55. package/dist/commands/task/add.d.ts +8 -0
  56. package/dist/commands/task/add.d.ts.map +1 -0
  57. package/dist/commands/task/add.js +164 -0
  58. package/dist/commands/task/block.d.ts +19 -0
  59. package/dist/commands/task/block.d.ts.map +1 -0
  60. package/dist/commands/task/block.js +86 -0
  61. package/dist/commands/task/comment.d.ts +8 -0
  62. package/dist/commands/task/comment.d.ts.map +1 -0
  63. package/dist/commands/task/comment.js +29 -0
  64. package/dist/commands/task/doc.d.ts +17 -0
  65. package/dist/commands/task/doc.d.ts.map +1 -0
  66. package/dist/commands/task/doc.js +220 -0
  67. package/dist/commands/task/export.d.ts +5 -0
  68. package/dist/commands/task/export.d.ts.map +1 -0
  69. package/dist/commands/task/export.js +27 -0
  70. package/dist/commands/task/finish.d.ts +27 -0
  71. package/dist/commands/task/finish.d.ts.map +1 -0
  72. package/dist/commands/task/finish.js +132 -0
  73. package/dist/commands/task/index.d.ts +26 -0
  74. package/dist/commands/task/index.d.ts.map +1 -0
  75. package/dist/commands/task/index.js +25 -0
  76. package/dist/commands/task/lint.d.ts +5 -0
  77. package/dist/commands/task/lint.d.ts.map +1 -0
  78. package/dist/commands/task/lint.js +22 -0
  79. package/dist/commands/task/list.d.ts +11 -0
  80. package/dist/commands/task/list.d.ts.map +1 -0
  81. package/dist/commands/task/list.js +54 -0
  82. package/dist/commands/task/migrate-doc.d.ts +8 -0
  83. package/dist/commands/task/migrate-doc.d.ts.map +1 -0
  84. package/dist/commands/task/migrate-doc.js +147 -0
  85. package/dist/commands/task/migrate.d.ts +6 -0
  86. package/dist/commands/task/migrate.d.ts.map +1 -0
  87. package/dist/commands/task/migrate.js +70 -0
  88. package/dist/commands/task/new.d.ts +8 -0
  89. package/dist/commands/task/new.d.ts.map +1 -0
  90. package/dist/commands/task/new.js +117 -0
  91. package/dist/commands/task/next.d.ts +6 -0
  92. package/dist/commands/task/next.d.ts.map +1 -0
  93. package/dist/commands/task/next.js +45 -0
  94. package/dist/commands/task/normalize.d.ts +6 -0
  95. package/dist/commands/task/normalize.d.ts.map +1 -0
  96. package/dist/commands/task/normalize.js +46 -0
  97. package/dist/commands/task/plan.d.ts +14 -0
  98. package/dist/commands/task/plan.d.ts.map +1 -0
  99. package/dist/commands/task/plan.js +217 -0
  100. package/dist/commands/task/ready.d.ts +6 -0
  101. package/dist/commands/task/ready.d.ts.map +1 -0
  102. package/dist/commands/task/ready.js +57 -0
  103. package/dist/commands/task/scaffold.d.ts +8 -0
  104. package/dist/commands/task/scaffold.d.ts.map +1 -0
  105. package/dist/commands/task/scaffold.js +142 -0
  106. package/dist/commands/task/scrub.d.ts +8 -0
  107. package/dist/commands/task/scrub.d.ts.map +1 -0
  108. package/dist/commands/task/scrub.js +121 -0
  109. package/dist/commands/task/search.d.ts +7 -0
  110. package/dist/commands/task/search.d.ts.map +1 -0
  111. package/dist/commands/task/search.js +79 -0
  112. package/dist/commands/task/set-status.d.ts +19 -0
  113. package/dist/commands/task/set-status.d.ts.map +1 -0
  114. package/dist/commands/task/set-status.js +123 -0
  115. package/dist/commands/task/shared.d.ts +48 -0
  116. package/dist/commands/task/shared.d.ts.map +1 -0
  117. package/dist/commands/task/shared.js +312 -0
  118. package/dist/commands/task/show.d.ts +6 -0
  119. package/dist/commands/task/show.d.ts.map +1 -0
  120. package/dist/commands/task/show.js +35 -0
  121. package/dist/commands/task/start.d.ts +19 -0
  122. package/dist/commands/task/start.d.ts.map +1 -0
  123. package/dist/commands/task/start.js +110 -0
  124. package/dist/commands/task/update.d.ts +8 -0
  125. package/dist/commands/task/update.d.ts.map +1 -0
  126. package/dist/commands/task/update.js +144 -0
  127. package/dist/commands/task/verify-record.d.ts +16 -0
  128. package/dist/commands/task/verify-record.d.ts.map +1 -0
  129. package/dist/commands/task/verify-record.js +277 -0
  130. package/dist/commands/task/verify.d.ts +2 -0
  131. package/dist/commands/task/verify.d.ts.map +1 -0
  132. package/dist/commands/task/verify.js +1 -0
  133. package/dist/commands/upgrade.d.ts.map +1 -1
  134. package/dist/commands/upgrade.js +17 -2
  135. package/dist/commands/workflow.d.ts +5 -364
  136. package/dist/commands/workflow.d.ts.map +1 -1
  137. package/dist/commands/workflow.js +6 -4617
  138. package/package.json +2 -2
package/assets/AGENTS.md CHANGED
@@ -41,7 +41,7 @@ No other role may assume another role’s authority.
41
41
  ## Truthfulness & safety
42
42
 
43
43
  - Never invent facts about repo state. Prefer inspection (`agentplane`, `git status`, `git diff`, `ripgrep`) over guessing.
44
- - Never modify `.agentplane/tasks.json` manually. It is **agentplane-managed state**.
44
+ - Never modify `.agentplane/tasks.json` manually. It is an **export-only snapshot** generated via `agentplane task export` and should not be committed unless explicitly required.
45
45
  - Task status transitions, task docs, and commits must follow **agentplane** flows where available.
46
46
 
47
47
  ## Cleanliness & untracked files
@@ -15,7 +15,7 @@
15
15
  "workflow": [
16
16
  "Follow shared workflow rules in AGENTS.md and `agentplane quickstart` / `agentplane role <ROLE>` output.",
17
17
  "Before planning or execution, load .agentplane/config.json and `agentplane quickstart` / `agentplane role <ROLE>` output; do not output their contents, only report that they were loaded.",
18
- "Use `agentplane config show|set` for config changes (workflow_mode, base_branch, branch/task settings); avoid manual edits.",
18
+ "Use `agentplane config show|set` for config changes (workflow_mode, branch/task settings); avoid manual edits.",
19
19
  "Convert the first user message into a top-level plan; do not create tasks until the user approves it.",
20
20
  "Restate the user goal and constraints, then draft a numbered top-level plan with agent assignments and expected outcomes.",
21
21
  "Decompose the top-level plan into atomic tasks, assign each to an existing agent ID, and schedule CREATOR if a required agent is missing.",
@@ -21,7 +21,7 @@
21
21
  "Follow shared workflow rules in AGENTS.md and `agentplane quickstart` / `agentplane role <ROLE>` output.",
22
22
  "Check the `framework.last_update` date from `.agentplane/config.json`; compare it to UTC today and detect when 10+ days have passed.",
23
23
  "Invoke `agentplane upgrade --force` when a user explicitly requests an update, or rely on the stale-date logic otherwise.",
24
- "Require a clean working tree and run the upgrade from the pinned base branch (default `main`).",
24
+ "Require a clean working tree and run the upgrade from the pinned base branch (or current branch when unpinned in branch_pr).",
25
25
  "After a successful upgrade, update `framework.last_update` to `datetime.now(UTC).date()` and document the run in the owning task/pr artifacts."
26
26
  ]
27
27
  }
@@ -1,4 +1,18 @@
1
1
  import { type AgentplaneConfig, type ResolvedProject, type TaskRecord } from "@agentplaneorg/core";
2
+ export type PlanApprovalState = "pending" | "approved" | "rejected";
3
+ export type PlanApproval = {
4
+ state: PlanApprovalState;
5
+ updated_at: string | null;
6
+ updated_by: string | null;
7
+ note: string | null;
8
+ };
9
+ export type VerificationState = "pending" | "ok" | "needs_rework";
10
+ export type VerificationResult = {
11
+ state: VerificationState;
12
+ updated_at: string | null;
13
+ updated_by: string | null;
14
+ note: string | null;
15
+ };
2
16
  type ExtractTaskDoc = (body: string) => string;
3
17
  type MergeTaskDoc = (body: string, doc: string) => string;
4
18
  declare const extractTaskDoc: ExtractTaskDoc;
@@ -14,6 +28,8 @@ export type TaskData = {
14
28
  depends_on: string[];
15
29
  tags: string[];
16
30
  verify: string[];
31
+ plan_approval?: PlanApproval;
32
+ verification?: VerificationResult;
17
33
  commit?: {
18
34
  hash: string;
19
35
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.ts"],"names":[],"mappings":"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"}
@@ -167,6 +167,34 @@ function normalizePriority(value) {
167
167
  return "high";
168
168
  return "med";
169
169
  }
170
+ function defaultPlanApproval() {
171
+ return { state: "pending", updated_at: null, updated_by: null, note: null };
172
+ }
173
+ function normalizePlanApproval(value) {
174
+ if (!isRecord(value))
175
+ return null;
176
+ const state = typeof value.state === "string" ? value.state : "";
177
+ if (state !== "pending" && state !== "approved" && state !== "rejected")
178
+ return null;
179
+ const updatedAt = value.updated_at === null || typeof value.updated_at === "string" ? value.updated_at : null;
180
+ const updatedBy = value.updated_by === null || typeof value.updated_by === "string" ? value.updated_by : null;
181
+ const note = value.note === null || typeof value.note === "string" ? value.note : null;
182
+ return { state, updated_at: updatedAt, updated_by: updatedBy, note };
183
+ }
184
+ function defaultVerificationResult() {
185
+ return { state: "pending", updated_at: null, updated_by: null, note: null };
186
+ }
187
+ function normalizeVerificationResult(value) {
188
+ if (!isRecord(value))
189
+ return null;
190
+ const state = typeof value.state === "string" ? value.state : "";
191
+ if (state !== "pending" && state !== "ok" && state !== "needs_rework")
192
+ return null;
193
+ const updatedAt = value.updated_at === null || typeof value.updated_at === "string" ? value.updated_at : null;
194
+ const updatedBy = value.updated_by === null || typeof value.updated_by === "string" ? value.updated_by : null;
195
+ const note = value.note === null || typeof value.note === "string" ? value.note : null;
196
+ return { state, updated_at: updatedAt, updated_by: updatedBy, note };
197
+ }
170
198
  export function taskRecordToData(record) {
171
199
  const fm = record.frontmatter;
172
200
  const comments = Array.isArray(fm.comments)
@@ -180,6 +208,8 @@ export function taskRecordToData(record) {
180
208
  typeof fm.commit.message === "string"
181
209
  ? { hash: fm.commit.hash, message: fm.commit.message }
182
210
  : null;
211
+ const planApproval = normalizePlanApproval(fm.plan_approval);
212
+ const verification = normalizeVerificationResult(fm.verification);
183
213
  const baseId = typeof fm.id === "string" ? fm.id : typeof record.id === "string" ? record.id : "";
184
214
  const task = {
185
215
  id: baseId.trim(),
@@ -191,6 +221,8 @@ export function taskRecordToData(record) {
191
221
  depends_on: normalizeDependsOn(fm.depends_on),
192
222
  tags: toStringArray(fm.tags),
193
223
  verify: toStringArray(fm.verify),
224
+ plan_approval: planApproval ?? undefined,
225
+ verification: verification ?? undefined,
194
226
  commit,
195
227
  comments,
196
228
  doc_version: typeof fm.doc_version === "number" ? fm.doc_version : undefined,
@@ -419,6 +451,18 @@ export class LocalBackend {
419
451
  payload[key] = existingFrontmatter[key];
420
452
  }
421
453
  }
454
+ if (payload.plan_approval === undefined && existingFrontmatter.plan_approval !== undefined) {
455
+ payload.plan_approval = existingFrontmatter.plan_approval;
456
+ }
457
+ if (payload.plan_approval === undefined) {
458
+ payload.plan_approval = defaultPlanApproval();
459
+ }
460
+ if (payload.verification === undefined && existingFrontmatter.verification !== undefined) {
461
+ payload.verification = existingFrontmatter.verification;
462
+ }
463
+ if (payload.verification === undefined) {
464
+ payload.verification = defaultVerificationResult();
465
+ }
422
466
  if (task.doc !== undefined) {
423
467
  const docText = String(task.doc ?? "");
424
468
  body = mergeTaskDoc(body, docText);
@@ -1 +1 @@
1
- {"version":3,"file":"task-index.d.ts","sourceRoot":"","sources":["../../src/backends/task-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAG3C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,CAAC,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU7D;AAuBD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkBpF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1F;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,cAAc,CAMhB"}
1
+ {"version":3,"file":"task-index.d.ts","sourceRoot":"","sources":["../../src/backends/task-index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAG3C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,CAAC,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU7D;AAuBD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkBpF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,cAAc,CAMhB"}
@@ -1,5 +1,6 @@
1
- import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
1
+ import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { atomicWriteFile } from "@agentplaneorg/core";
3
4
  export const TASK_INDEX_SCHEMA_VERSION = 1;
4
5
  const TASK_INDEX_FILENAME = "tasks-index.v1.json";
5
6
  export function resolveTaskIndexPath(tasksDir) {
@@ -69,11 +70,7 @@ export async function loadTaskIndex(indexPath) {
69
70
  return { schema_version: TASK_INDEX_SCHEMA_VERSION, tasks };
70
71
  }
71
72
  export async function saveTaskIndex(indexPath, index) {
72
- const dir = path.dirname(indexPath);
73
- await mkdir(dir, { recursive: true });
74
- const tmpPath = `${indexPath}.tmp-${process.pid}`;
75
- await writeFile(tmpPath, `${JSON.stringify(index, null, 2)}\n`, "utf8");
76
- await rename(tmpPath, indexPath);
73
+ await atomicWriteFile(indexPath, `${JSON.stringify(index, null, 2)}\n`, "utf8");
77
74
  }
78
75
  export function buildTaskIndexEntry(task, readmePath, mtimeMs) {
79
76
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"command-guide.d.ts","sourceRoot":"","sources":["../../src/cli/command-guide.ts"],"names":[],"mappings":"AA4KA,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CA4EzC"}
1
+ {"version":3,"file":"command-guide.d.ts","sourceRoot":"","sources":["../../src/cli/command-guide.ts"],"names":[],"mappings":"AA6KA,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CA4EzC"}
@@ -33,7 +33,7 @@ const CHEAT_SHEET_ROWS = [
33
33
  },
34
34
  {
35
35
  operation: "CODER/TESTER: verify task",
36
- command: "`agentplane verify <task-id>`",
36
+ command: '`agentplane verify <task-id> --ok|--rework --by <id> --note "..."` (record-only; appends to README)',
37
37
  },
38
38
  {
39
39
  operation: "REVIEWER: check PR artifacts",
@@ -77,7 +77,7 @@ const ROLE_GUIDES = [
77
77
  "- direct mode: work in the current checkout; optional `agentplane work start <task-id> --agent <ROLE> --slug <slug>` only scaffolds docs",
78
78
  "- branch_pr: `agentplane work start <task-id> --agent <ROLE> --slug <slug> --worktree`",
79
79
  '- Status updates: `agentplane start <task-id> --author <ROLE> --body "Start: ..."` / `agentplane block <task-id> --author <ROLE> --body "Blocked: ..."`',
80
- "- Verify: `agentplane verify <task-id>`",
80
+ '- Verify: `agentplane verify <task-id> --ok|--rework --by <ROLE> --note "..."`',
81
81
  '- PR artifacts (branch_pr): `agentplane pr open <task-id> --branch task/<task-id>/<slug> --author <ROLE>` / `agentplane pr update <task-id>` / `agentplane pr note <task-id> --author <ROLE> --body "..."`',
82
82
  '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
83
83
  ],
@@ -88,7 +88,7 @@ const ROLE_GUIDES = [
88
88
  "- direct mode: work in the current checkout; optional `agentplane work start <task-id> --agent <ROLE> --slug <slug>` only scaffolds docs",
89
89
  "- branch_pr: `agentplane work start <task-id> --agent <ROLE> --slug <slug> --worktree`",
90
90
  '- Status updates: `agentplane start <task-id> --author <ROLE> --body "Start: ..."` / `agentplane block <task-id> --author <ROLE> --body "Blocked: ..."`',
91
- "- Verify: `agentplane verify <task-id>`",
91
+ '- Verify: `agentplane verify <task-id> --ok|--rework --by <ROLE> --note "..."`',
92
92
  '- PR artifacts (branch_pr): `agentplane pr open <task-id> --branch task/<task-id>/<slug> --author <ROLE>` / `agentplane pr update <task-id>` / `agentplane pr note <task-id> --author <ROLE> --body "..."`',
93
93
  '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
94
94
  ],
@@ -185,7 +185,7 @@ export function renderQuickstart() {
185
185
  "- `agentplane task list` / `agentplane task show <task-id>`",
186
186
  '- `agentplane task new --title "..." --description "..." --priority med --owner CODER --tag <tag>`',
187
187
  '- `agentplane start <task-id> --author <ROLE> --body "Start: ..."`',
188
- "- `agentplane verify <task-id>`",
188
+ '- `agentplane verify <task-id> --ok|--rework --by <ROLE> --note "..."`',
189
189
  '- `agentplane finish <task-id> --author <ROLE> --body "Verified: ..."`',
190
190
  "",
191
191
  "## Branch workflow (branch_pr)",
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CA4HnC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CA8HnC"}
package/dist/cli/help.js CHANGED
@@ -21,7 +21,7 @@ export function renderHelp() {
21
21
  " agentplane init [--ide <codex|cursor|windsurf>] [--workflow <direct|branch_pr>] [--hooks <yes|no>] [--require-plan-approval <yes|no>] [--require-network-approval <yes|no>] [--require-verify-approval <yes|no>] [--recipes <list>] [--yes] [--force|--backup]",
22
22
  "",
23
23
  "Upgrade commands:",
24
- " agentplane upgrade [--tag <tag>] [--dry-run] [--no-backup] [--source <repo-url>] [--bundle <path|url>] [--checksum <path|url>]",
24
+ " agentplane upgrade [--tag <tag>] [--dry-run] [--no-backup] [--source <repo-url>] [--bundle <path|url>] [--checksum <path|url>] [--yes]",
25
25
  "",
26
26
  "Config commands:",
27
27
  " agentplane config show",
@@ -36,11 +36,11 @@ export function renderHelp() {
36
36
  "",
37
37
  "Recipe commands:",
38
38
  " agentplane recipes list [--full] [--tag <tag>]",
39
- " agentplane recipes list-remote [--refresh] [--index <path|url>]",
39
+ " agentplane recipes list-remote [--refresh] [--index <path|url>] [--yes]",
40
40
  " agentplane recipes info <id>",
41
41
  " agentplane recipes explain <id>",
42
- " agentplane recipes install --name <id> [--index <path|url>] [--refresh]",
43
- " agentplane recipes install --path <path> | --url <url>",
42
+ " agentplane recipes install --name <id> [--index <path|url>] [--refresh] [--yes]",
43
+ " agentplane recipes install --path <path> | --url <url> [--yes]",
44
44
  " agentplane recipes remove <id>",
45
45
  " agentplane recipes cache prune [--dry-run] [--all]",
46
46
  " agentplane scenario list",
@@ -108,6 +108,7 @@ export function renderHelp() {
108
108
  " agentplane task lint",
109
109
  " agentplane task normalize",
110
110
  " agentplane task migrate [--source <path>]",
111
+ " agentplane task migrate-doc [<task-id> ...] [--all] [--quiet]",
111
112
  "",
112
113
  "Start commands:",
113
114
  " agentplane start <task-id> --author <id> --body <text> [--commit-from-comment] [--force]",
@@ -116,7 +117,8 @@ export function renderHelp() {
116
117
  " agentplane block <task-id> --author <id> --body <text> [--commit-from-comment] [--force]",
117
118
  "",
118
119
  "Verify commands:",
119
- " agentplane verify <task-id> [--skip-if-unchanged] [--cwd <path>] [--log <path>] [--require]",
120
+ " agentplane verify <task-id> (--ok | --rework) --by <id> --note <text> [--details <text> | --file <path>] [--quiet]",
121
+ " agentplane task verify <ok|rework> <task-id> --by <id> --note <text> [--details <text> | --file <path>]",
120
122
  "",
121
123
  "Finish commands:",
122
124
  " agentplane finish <task-id> [<task-id>...] --author <id> --body <text> [--commit-from-comment] [--status-commit]",
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":"AA0iCA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA62D5D"}
1
+ {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":"AAmjCA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAw0D5D"}
@@ -1,7 +1,7 @@
1
- import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
1
+ import { mkdir, readdir, readFile, rm } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import { defaultConfig, findGitRoot, getStagedFiles, loadConfig, resolveProject, saveConfig, setByDottedKey, } from "@agentplaneorg/core";
4
+ import { atomicWriteFile, defaultConfig, findGitRoot, getStagedFiles, loadConfig, resolveProject, saveConfig, setByDottedKey, } from "@agentplaneorg/core";
5
5
  import { renderHelp } from "./help.js";
6
6
  import { listRoles, renderQuickstart, renderRole } from "./command-guide.js";
7
7
  import { filterAgentsByWorkflow, loadAgentTemplates, loadAgentsTemplate, } from "../agents/agents-template.js";
@@ -17,7 +17,7 @@ import { getVersion } from "../meta/version.js";
17
17
  import { cmdUpgrade } from "../commands/upgrade.js";
18
18
  import { BACKEND_SYNC_USAGE, BACKEND_SYNC_USAGE_EXAMPLE, cmdBackendSync, cmdSync, } from "../commands/backend.js";
19
19
  import { cmdRecipes, cmdScenario } from "../commands/recipes.js";
20
- import { BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE, BRANCH_REMOVE_USAGE, BRANCH_REMOVE_USAGE_EXAMPLE, BRANCH_STATUS_USAGE, BRANCH_STATUS_USAGE_EXAMPLE, CLEANUP_MERGED_USAGE, CLEANUP_MERGED_USAGE_EXAMPLE, COMMIT_USAGE, COMMIT_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, GUARD_COMMIT_USAGE, GUARD_COMMIT_USAGE_EXAMPLE, HOOK_NAMES, INTEGRATE_USAGE, INTEGRATE_USAGE_EXAMPLE, PR_CHECK_USAGE, PR_CHECK_USAGE_EXAMPLE, PR_NOTE_USAGE, PR_NOTE_USAGE_EXAMPLE, PR_OPEN_USAGE, PR_OPEN_USAGE_EXAMPLE, PR_UPDATE_USAGE, PR_UPDATE_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, WORK_START_USAGE, WORK_START_USAGE_EXAMPLE, cmdBlock, cmdBranchBaseGet, cmdBranchBaseSet, cmdBranchRemove, cmdBranchStatus, cmdCleanupMerged, cmdCommit, cmdFinish, cmdGuardClean, cmdGuardCommit, cmdGuardSuggestAllow, cmdHooksInstall, cmdHooksRun, cmdHooksUninstall, cmdIntegrate, cmdPrCheck, cmdPrNote, cmdPrOpen, cmdPrUpdate, cmdReady, cmdStart, cmdTaskAdd, cmdTaskComment, cmdTaskDocSet, cmdTaskDocShow, cmdTaskExport, cmdTaskLint, cmdTaskMigrate, cmdTaskNew, cmdTaskNext, cmdTaskNormalize, cmdTaskScaffold, cmdTaskScrub, cmdTaskSearch, cmdTaskSetStatus, cmdTaskShow, cmdTaskUpdate, cmdTaskList, cmdVerify, cmdWorkStart, dedupeStrings, ensureInitCommit, gitInitRepo, promptInitBaseBranch, resolveInitBaseBranch, suggestAllowPrefixes, } from "../commands/workflow.js";
20
+ import { BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE, BRANCH_REMOVE_USAGE, BRANCH_REMOVE_USAGE_EXAMPLE, BRANCH_STATUS_USAGE, BRANCH_STATUS_USAGE_EXAMPLE, CLEANUP_MERGED_USAGE, CLEANUP_MERGED_USAGE_EXAMPLE, COMMIT_USAGE, COMMIT_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, GUARD_COMMIT_USAGE, GUARD_COMMIT_USAGE_EXAMPLE, HOOK_NAMES, INTEGRATE_USAGE, INTEGRATE_USAGE_EXAMPLE, PR_CHECK_USAGE, PR_CHECK_USAGE_EXAMPLE, PR_NOTE_USAGE, PR_NOTE_USAGE_EXAMPLE, PR_OPEN_USAGE, PR_OPEN_USAGE_EXAMPLE, PR_UPDATE_USAGE, PR_UPDATE_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, WORK_START_USAGE, WORK_START_USAGE_EXAMPLE, cmdBlock, cmdBranchBaseGet, cmdBranchBaseClear, cmdBranchBaseExplain, cmdBranchBaseSet, cmdBranchRemove, cmdBranchStatus, cmdCleanupMerged, cmdCommit, cmdFinish, cmdGuardClean, cmdGuardCommit, cmdGuardSuggestAllow, cmdHooksInstall, cmdHooksRun, cmdHooksUninstall, cmdIntegrate, cmdPrCheck, cmdPrNote, cmdPrOpen, cmdPrUpdate, cmdReady, cmdStart, cmdTaskAdd, cmdTaskComment, cmdTaskDocSet, cmdTaskDocShow, cmdTaskExport, cmdTaskLint, cmdTaskMigrate, cmdTaskMigrateDoc, cmdTaskNew, cmdTaskNext, cmdTaskNormalize, cmdTaskPlan, cmdTaskScaffold, cmdTaskScrub, cmdTaskSearch, cmdTaskSetStatus, cmdTaskShow, cmdTaskUpdate, cmdTaskList, cmdVerify, cmdTaskVerify, cmdWorkStart, dedupeStrings, ensureInitCommit, gitInitRepo, promptInitBaseBranch, resolveInitBaseBranch, suggestAllowPrefixes, } from "../commands/workflow.js";
21
21
  function parseGlobalArgs(argv) {
22
22
  let help = false;
23
23
  let version = false;
@@ -232,7 +232,7 @@ async function writeFileIfChanged(filePath, content) {
232
232
  if (code !== "ENOENT")
233
233
  throw err;
234
234
  }
235
- await writeFile(filePath, content, "utf8");
235
+ await atomicWriteFile(filePath, content, "utf8");
236
236
  return true;
237
237
  }
238
238
  async function cmdConfigShow(opts) {
@@ -535,7 +535,7 @@ async function cmdInit(opts) {
535
535
  const existingGitRoot = await findGitRoot(initRoot);
536
536
  const gitRootExisted = Boolean(existingGitRoot);
537
537
  let gitRoot = existingGitRoot;
538
- const baseBranchFallback = defaultConfig().base_branch;
538
+ const baseBranchFallback = "main";
539
539
  if (!gitRoot) {
540
540
  await gitInitRepo(initRoot, baseBranchFallback);
541
541
  gitRoot = initRoot;
@@ -605,7 +605,6 @@ async function cmdInit(opts) {
605
605
  await mkdir(path.join(resolved.agentplaneDir, "backends", "local"), { recursive: true });
606
606
  await mkdir(path.join(resolved.agentplaneDir, "backends", "redmine"), { recursive: true });
607
607
  const rawConfig = defaultConfig();
608
- setByDottedKey(rawConfig, "base_branch", initBaseBranch);
609
608
  setByDottedKey(rawConfig, "workflow_mode", workflow);
610
609
  setByDottedKey(rawConfig, "tasks_backend.config_path", path.relative(resolved.gitRoot, backendPath));
611
610
  setByDottedKey(rawConfig, "agents.approvals.require_plan", String(requirePlanApproval));
@@ -632,8 +631,8 @@ async function cmdInit(opts) {
632
631
  custom_fields: { task_id: 1 },
633
632
  },
634
633
  };
635
- await writeFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
636
- await writeFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
634
+ await atomicWriteFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
635
+ await atomicWriteFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
637
636
  const agentsPath = path.join(resolved.gitRoot, "AGENTS.md");
638
637
  const installPaths = [
639
638
  path.relative(resolved.gitRoot, configPath),
@@ -643,7 +642,7 @@ async function cmdInit(opts) {
643
642
  if (!(await fileExists(agentsPath))) {
644
643
  const template = await loadAgentsTemplate();
645
644
  const filtered = filterAgentsByWorkflow(template, workflow);
646
- await writeFile(agentsPath, filtered, "utf8");
645
+ await atomicWriteFile(agentsPath, filtered, "utf8");
647
646
  wroteAgents = true;
648
647
  }
649
648
  if (wroteAgents) {
@@ -654,7 +653,7 @@ async function cmdInit(opts) {
654
653
  const targetPath = path.join(resolved.agentplaneDir, "agents", agent.fileName);
655
654
  if (await fileExists(targetPath))
656
655
  continue;
657
- await writeFile(targetPath, agent.contents, "utf8");
656
+ await atomicWriteFile(targetPath, agent.contents, "utf8");
658
657
  installPaths.push(path.relative(resolved.gitRoot, targetPath));
659
658
  }
660
659
  if (hooks) {
@@ -1011,6 +1010,9 @@ export async function runCli(argv) {
1011
1010
  if (namespace === "task" && command === "migrate") {
1012
1011
  return await cmdTaskMigrate({ cwd: process.cwd(), rootOverride: globals.root, args });
1013
1012
  }
1013
+ if (namespace === "task" && command === "migrate-doc") {
1014
+ return await cmdTaskMigrateDoc({ cwd: process.cwd(), rootOverride: globals.root, args });
1015
+ }
1014
1016
  if (namespace === "task" && command === "export") {
1015
1017
  return await cmdTaskExport({ cwd: process.cwd(), rootOverride: globals.root });
1016
1018
  }
@@ -1055,6 +1057,12 @@ export async function runCli(argv) {
1055
1057
  message: usageMessage(TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE),
1056
1058
  });
1057
1059
  }
1060
+ if (namespace === "task" && command === "plan") {
1061
+ return await cmdTaskPlan({ cwd: process.cwd(), rootOverride: globals.root, args });
1062
+ }
1063
+ if (namespace === "task" && command === "verify") {
1064
+ return await cmdTaskVerify({ cwd: process.cwd(), rootOverride: globals.root, args });
1065
+ }
1058
1066
  if (namespace === "task" && command === "comment") {
1059
1067
  const [taskId, ...restArgs] = args;
1060
1068
  if (!taskId) {
@@ -1261,12 +1269,21 @@ export async function runCli(argv) {
1261
1269
  }
1262
1270
  if (namespace === "branch") {
1263
1271
  if (command === "base") {
1264
- const [subcommand, value] = args;
1272
+ const [subcommand, ...rest] = args;
1265
1273
  if (subcommand === "get") {
1266
1274
  return await cmdBranchBaseGet({ cwd: process.cwd(), rootOverride: globals.root });
1267
1275
  }
1268
1276
  if (subcommand === "set") {
1269
- if (!value) {
1277
+ const useCurrent = rest.includes("--current");
1278
+ const value = rest.find((entry) => entry && entry !== "--current");
1279
+ if (useCurrent && value) {
1280
+ throw new CliError({
1281
+ exitCode: 2,
1282
+ code: "E_USAGE",
1283
+ message: usageMessage(BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE),
1284
+ });
1285
+ }
1286
+ if (!value && !useCurrent) {
1270
1287
  throw new CliError({
1271
1288
  exitCode: 2,
1272
1289
  code: "E_USAGE",
@@ -1277,8 +1294,15 @@ export async function runCli(argv) {
1277
1294
  cwd: process.cwd(),
1278
1295
  rootOverride: globals.root,
1279
1296
  value,
1297
+ useCurrent,
1280
1298
  });
1281
1299
  }
1300
+ if (subcommand === "clear") {
1301
+ return await cmdBranchBaseClear({ cwd: process.cwd(), rootOverride: globals.root });
1302
+ }
1303
+ if (subcommand === "explain") {
1304
+ return await cmdBranchBaseExplain({ cwd: process.cwd(), rootOverride: globals.root });
1305
+ }
1282
1306
  throw new CliError({
1283
1307
  exitCode: 2,
1284
1308
  code: "E_USAGE",
@@ -1445,7 +1469,7 @@ export async function runCli(argv) {
1445
1469
  message: usageMessage(WORK_START_USAGE, WORK_START_USAGE_EXAMPLE),
1446
1470
  });
1447
1471
  }
1448
- if (!agent || !slug || !worktree) {
1472
+ if (!agent || !slug) {
1449
1473
  throw new CliError({
1450
1474
  exitCode: 2,
1451
1475
  code: "E_USAGE",
@@ -2360,74 +2384,11 @@ export async function runCli(argv) {
2360
2384
  message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
2361
2385
  });
2362
2386
  }
2363
- let cwdOverride;
2364
- let logPath;
2365
- let skipIfUnchanged = false;
2366
- let quiet = false;
2367
- let require = false;
2368
- let yes = false;
2369
- for (let i = 0; i < verifyArgs.length; i++) {
2370
- const arg = verifyArgs[i];
2371
- if (!arg)
2372
- continue;
2373
- if (arg === "--cwd") {
2374
- const next = verifyArgs[i + 1];
2375
- if (!next)
2376
- throw new CliError({
2377
- exitCode: 2,
2378
- code: "E_USAGE",
2379
- message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
2380
- });
2381
- cwdOverride = next;
2382
- i++;
2383
- continue;
2384
- }
2385
- if (arg === "--log") {
2386
- const next = verifyArgs[i + 1];
2387
- if (!next)
2388
- throw new CliError({
2389
- exitCode: 2,
2390
- code: "E_USAGE",
2391
- message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
2392
- });
2393
- logPath = next;
2394
- i++;
2395
- continue;
2396
- }
2397
- if (arg === "--skip-if-unchanged") {
2398
- skipIfUnchanged = true;
2399
- continue;
2400
- }
2401
- if (arg === "--quiet") {
2402
- quiet = true;
2403
- continue;
2404
- }
2405
- if (arg === "--require") {
2406
- require = true;
2407
- continue;
2408
- }
2409
- if (arg === "--yes") {
2410
- yes = true;
2411
- continue;
2412
- }
2413
- if (arg.startsWith("--")) {
2414
- throw new CliError({
2415
- exitCode: 2,
2416
- code: "E_USAGE",
2417
- message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
2418
- });
2419
- }
2420
- }
2421
2387
  return await cmdVerify({
2422
2388
  cwd: process.cwd(),
2423
2389
  rootOverride: globals.root,
2424
2390
  taskId,
2425
- execCwd: cwdOverride,
2426
- logPath,
2427
- skipIfUnchanged,
2428
- quiet,
2429
- require,
2430
- yes,
2391
+ args: verifyArgs,
2431
2392
  });
2432
2393
  }
2433
2394
  if (namespace === "integrate") {
@@ -2542,7 +2503,7 @@ export async function runCli(argv) {
2542
2503
  continue;
2543
2504
  if (arg === "--base") {
2544
2505
  const next = args[i + 1];
2545
- if (!next)
2506
+ if (!next || next.trim().length === 0)
2546
2507
  throw new CliError({
2547
2508
  exitCode: 2,
2548
2509
  code: "E_USAGE",
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,sIACsG,CAAC;AACtI,eAAO,MAAM,0BAA0B,mDAAmD,CAAC;AAC3F,eAAO,MAAM,UAAU,kIAC0G,CAAC;AAClI,eAAO,MAAM,kBAAkB,2CAA2C,CAAC;AA8J3E,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,sIACsG,CAAC;AACtI,eAAO,MAAM,0BAA0B,mDAAmD,CAAC;AAC3F,eAAO,MAAM,UAAU,kIAC0G,CAAC;AAClI,eAAO,MAAM,kBAAkB,2CAA2C,CAAC;AA8J3E,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB"}
@@ -2,6 +2,7 @@ import { backendNotSupportedMessage, usageMessage } from "../cli/output.js";
2
2
  import { mapBackendError } from "../cli/error-map.js";
3
3
  import { CliError } from "../shared/errors.js";
4
4
  import { loadTaskBackend } from "../backends/task-backend.js";
5
+ import { ensureNetworkApproved } from "./shared/network-approval.js";
5
6
  export const BACKEND_SYNC_USAGE = "Usage: agentplane backend sync <id> --direction <push|pull> [--conflict <diff|prefer-local|prefer-remote|fail>] [--yes] [--quiet]";
6
7
  export const BACKEND_SYNC_USAGE_EXAMPLE = "agentplane backend sync local --direction pull";
7
8
  export const SYNC_USAGE = "Usage: agentplane sync [<id>] [--direction <push|pull>] [--conflict <diff|prefer-local|prefer-remote|fail>] [--yes] [--quiet]";
@@ -142,7 +143,7 @@ function parseSyncArgs(args) {
142
143
  export async function cmdBackendSync(opts) {
143
144
  const flags = parseBackendSyncArgs(opts.args);
144
145
  try {
145
- const { backend, backendId } = await loadTaskBackend({
146
+ const { backend, backendId, config } = await loadTaskBackend({
146
147
  cwd: opts.cwd,
147
148
  rootOverride: opts.rootOverride ?? null,
148
149
  });
@@ -160,6 +161,13 @@ export async function cmdBackendSync(opts) {
160
161
  message: backendNotSupportedMessage("sync()"),
161
162
  });
162
163
  }
164
+ if (backendId !== "local") {
165
+ await ensureNetworkApproved({
166
+ config,
167
+ yes: flags.confirm,
168
+ reason: `backend sync may access the network (backend: ${backendId})`,
169
+ });
170
+ }
163
171
  await backend.sync({
164
172
  direction: flags.direction,
165
173
  conflict: flags.conflict,
@@ -177,7 +185,7 @@ export async function cmdBackendSync(opts) {
177
185
  export async function cmdSync(opts) {
178
186
  const flags = parseSyncArgs(opts.args);
179
187
  try {
180
- const { backend, backendId } = await loadTaskBackend({
188
+ const { backend, backendId, config } = await loadTaskBackend({
181
189
  cwd: opts.cwd,
182
190
  rootOverride: opts.rootOverride ?? null,
183
191
  });
@@ -195,6 +203,13 @@ export async function cmdSync(opts) {
195
203
  message: backendNotSupportedMessage("sync()"),
196
204
  });
197
205
  }
206
+ if (backendId !== "local") {
207
+ await ensureNetworkApproved({
208
+ config,
209
+ yes: flags.confirm,
210
+ reason: `sync may access the network (backend: ${backendId})`,
211
+ });
212
+ }
198
213
  await backend.sync({
199
214
  direction: flags.direction,
200
215
  conflict: flags.conflict,
@@ -0,0 +1,60 @@
1
+ export { gitInitRepo, resolveInitBaseBranch, promptInitBaseBranch, ensureInitCommit, } from "../shared/git-ops.js";
2
+ export declare const BRANCH_BASE_USAGE = "Usage: agentplane branch base get|set|clear|explain [<name>|--current]";
3
+ export declare const BRANCH_BASE_USAGE_EXAMPLE = "agentplane branch base set --current";
4
+ export declare const BRANCH_STATUS_USAGE = "Usage: agentplane branch status [--branch <name>] [--base <name>]";
5
+ export declare const BRANCH_STATUS_USAGE_EXAMPLE = "agentplane branch status --base main";
6
+ export declare const BRANCH_REMOVE_USAGE = "Usage: agentplane branch remove [--branch <name>] [--worktree <path>] [--force] [--quiet]";
7
+ export declare const BRANCH_REMOVE_USAGE_EXAMPLE = "agentplane branch remove --branch task/20260203-F1Q8AB --worktree .agentplane/worktrees/task";
8
+ export declare const WORK_START_USAGE = "Usage: agentplane work start <task-id> --agent <id> --slug <slug> [--worktree]";
9
+ export declare const WORK_START_USAGE_EXAMPLE = "agentplane work start 202602030608-F1Q8AB --agent CODER --slug cli --worktree";
10
+ export declare const CLEANUP_MERGED_USAGE = "Usage: agentplane cleanup merged [--base <name>] [--yes] [--archive] [--quiet]";
11
+ export declare const CLEANUP_MERGED_USAGE_EXAMPLE = "agentplane cleanup merged --yes";
12
+ export declare function cmdWorkStart(opts: {
13
+ cwd: string;
14
+ rootOverride?: string;
15
+ taskId: string;
16
+ agent: string;
17
+ slug: string;
18
+ worktree: boolean;
19
+ }): Promise<number>;
20
+ export declare function cmdCleanupMerged(opts: {
21
+ cwd: string;
22
+ rootOverride?: string;
23
+ base?: string;
24
+ yes: boolean;
25
+ archive: boolean;
26
+ quiet: boolean;
27
+ }): Promise<number>;
28
+ export declare function cmdBranchBaseGet(opts: {
29
+ cwd: string;
30
+ rootOverride?: string;
31
+ }): Promise<number>;
32
+ export declare function cmdBranchBaseSet(opts: {
33
+ cwd: string;
34
+ rootOverride?: string;
35
+ value?: string;
36
+ useCurrent?: boolean;
37
+ }): Promise<number>;
38
+ export declare function cmdBranchBaseClear(opts: {
39
+ cwd: string;
40
+ rootOverride?: string;
41
+ }): Promise<number>;
42
+ export declare function cmdBranchBaseExplain(opts: {
43
+ cwd: string;
44
+ rootOverride?: string;
45
+ }): Promise<number>;
46
+ export declare function cmdBranchStatus(opts: {
47
+ cwd: string;
48
+ rootOverride?: string;
49
+ branch?: string;
50
+ base?: string;
51
+ }): Promise<number>;
52
+ export declare function cmdBranchRemove(opts: {
53
+ cwd: string;
54
+ rootOverride?: string;
55
+ branch?: string;
56
+ worktree?: string;
57
+ force: boolean;
58
+ quiet: boolean;
59
+ }): Promise<number>;
60
+ //# sourceMappingURL=index.d.ts.map