agentplane 0.1.7 → 0.1.9

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 (86) hide show
  1. package/assets/AGENTS.md +13 -2
  2. package/dist/backends/task-backend.d.ts +28 -0
  3. package/dist/backends/task-backend.d.ts.map +1 -1
  4. package/dist/backends/task-backend.js +85 -4
  5. package/dist/backends/task-index.d.ts.map +1 -1
  6. package/dist/backends/task-index.js +3 -6
  7. package/dist/cli/command-guide.d.ts.map +1 -1
  8. package/dist/cli/command-guide.js +10 -11
  9. package/dist/cli/help.d.ts.map +1 -1
  10. package/dist/cli/help.js +7 -5
  11. package/dist/cli/run-cli.d.ts.map +1 -1
  12. package/dist/cli/run-cli.js +75 -74
  13. package/dist/commands/backend.d.ts.map +1 -1
  14. package/dist/commands/backend.js +17 -2
  15. package/dist/commands/branch/index.d.ts.map +1 -1
  16. package/dist/commands/branch/index.js +3 -1
  17. package/dist/commands/guard/index.d.ts +24 -3
  18. package/dist/commands/guard/index.d.ts.map +1 -1
  19. package/dist/commands/guard/index.js +175 -61
  20. package/dist/commands/hooks/index.d.ts.map +1 -1
  21. package/dist/commands/hooks/index.js +39 -29
  22. package/dist/commands/pr/index.d.ts.map +1 -1
  23. package/dist/commands/pr/index.js +15 -12
  24. package/dist/commands/recipes.d.ts +75 -6
  25. package/dist/commands/recipes.d.ts.map +1 -1
  26. package/dist/commands/recipes.js +76 -538
  27. package/dist/commands/scenario.d.ts +7 -0
  28. package/dist/commands/scenario.d.ts.map +1 -0
  29. package/dist/commands/scenario.js +501 -0
  30. package/dist/commands/shared/network-approval.d.ts +8 -0
  31. package/dist/commands/shared/network-approval.d.ts.map +1 -0
  32. package/dist/commands/shared/network-approval.js +25 -0
  33. package/dist/commands/shared/task-backend.d.ts +19 -3
  34. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  35. package/dist/commands/shared/task-backend.js +19 -5
  36. package/dist/commands/task/block.d.ts.map +1 -1
  37. package/dist/commands/task/block.js +22 -16
  38. package/dist/commands/task/comment.d.ts.map +1 -1
  39. package/dist/commands/task/comment.js +9 -2
  40. package/dist/commands/task/finish.d.ts.map +1 -1
  41. package/dist/commands/task/finish.js +36 -25
  42. package/dist/commands/task/index.d.ts +3 -0
  43. package/dist/commands/task/index.d.ts.map +1 -1
  44. package/dist/commands/task/index.js +3 -0
  45. package/dist/commands/task/migrate-doc.d.ts +8 -0
  46. package/dist/commands/task/migrate-doc.d.ts.map +1 -0
  47. package/dist/commands/task/migrate-doc.js +147 -0
  48. package/dist/commands/task/plan.d.ts +14 -0
  49. package/dist/commands/task/plan.d.ts.map +1 -0
  50. package/dist/commands/task/plan.js +217 -0
  51. package/dist/commands/task/scaffold.d.ts.map +1 -1
  52. package/dist/commands/task/scaffold.js +15 -4
  53. package/dist/commands/task/set-status.d.ts.map +1 -1
  54. package/dist/commands/task/set-status.js +18 -4
  55. package/dist/commands/task/shared.d.ts +5 -2
  56. package/dist/commands/task/shared.d.ts.map +1 -1
  57. package/dist/commands/task/shared.js +47 -28
  58. package/dist/commands/task/start.d.ts.map +1 -1
  59. package/dist/commands/task/start.js +24 -17
  60. package/dist/commands/task/verify-record.d.ts +16 -0
  61. package/dist/commands/task/verify-record.d.ts.map +1 -0
  62. package/dist/commands/task/verify-record.js +284 -0
  63. package/dist/commands/task/verify.d.ts +1 -13
  64. package/dist/commands/task/verify.d.ts.map +1 -1
  65. package/dist/commands/task/verify.js +1 -362
  66. package/dist/commands/upgrade.d.ts.map +1 -1
  67. package/dist/commands/upgrade.js +17 -2
  68. package/dist/commands/workflow.d.ts +1 -1
  69. package/dist/commands/workflow.d.ts.map +1 -1
  70. package/dist/commands/workflow.js +1 -1
  71. package/dist/shared/git-log.d.ts +5 -0
  72. package/dist/shared/git-log.d.ts.map +1 -0
  73. package/dist/shared/git-log.js +14 -0
  74. package/dist/shared/git-path.d.ts +3 -0
  75. package/dist/shared/git-path.d.ts.map +1 -0
  76. package/dist/shared/git-path.js +30 -0
  77. package/dist/shared/guards.d.ts +2 -0
  78. package/dist/shared/guards.d.ts.map +1 -0
  79. package/dist/shared/guards.js +3 -0
  80. package/dist/shared/protected-paths.d.ts +12 -0
  81. package/dist/shared/protected-paths.d.ts.map +1 -0
  82. package/dist/shared/protected-paths.js +51 -0
  83. package/dist/shared/strings.d.ts +2 -0
  84. package/dist/shared/strings.d.ts.map +1 -0
  85. package/dist/shared/strings.js +14 -0
  86. package/package.json +2 -2
package/assets/AGENTS.md CHANGED
@@ -181,7 +181,7 @@ There are two supported modes:
181
181
 
182
182
  Use agentplane commit flows with a message that conforms to the built-in command guide, e.g.:
183
183
 
184
- `agentplane guard commit <task-id> -m "✨ <suffix> <detailed changelog ...>" ...`
184
+ `agentplane guard commit <task-id> -m "✨ <suffix> <scope>: <summary>" ...`
185
185
 
186
186
  In this mode:
187
187
 
@@ -197,7 +197,18 @@ Use comment-driven flags (where supported by agentplane), e.g.:
197
197
 
198
198
  In this mode:
199
199
 
200
- - agentplane builds the commit subject as `<emoji> <suffix> <formatted comment>` from the status/finish body.
200
+ - agentplane builds the commit subject as `<emoji> <suffix> <scope>: <summary>` from the status/finish body.
201
+ - agentplane adds a short structured commit body (Task/Agent/Status/Comment) automatically for comment-driven commits.
202
+
203
+ ## Commit subject format (enforced)
204
+
205
+ `<emoji> <suffix> <scope>: <summary>`
206
+
207
+ Recommended action/status emojis:
208
+
209
+ - `🚧` start / DOING
210
+ - `⛔` blocked / BLOCKED
211
+ - `✅` finish / DONE
201
212
 
202
213
  Agents must not reinterpret `-m` as “body-only” or “comment-only”. `-m` is a commit message.
203
214
 
@@ -1,4 +1,29 @@
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
+ };
16
+ export type TaskEventType = "status" | "comment" | "verify";
17
+ export type TaskEvent = {
18
+ type: TaskEventType;
19
+ at: string;
20
+ author: string;
21
+ from?: string;
22
+ to?: string;
23
+ state?: string;
24
+ note?: string;
25
+ body?: string;
26
+ };
2
27
  type ExtractTaskDoc = (body: string) => string;
3
28
  type MergeTaskDoc = (body: string, doc: string) => string;
4
29
  declare const extractTaskDoc: ExtractTaskDoc;
@@ -14,6 +39,8 @@ export type TaskData = {
14
39
  depends_on: string[];
15
40
  tags: string[];
16
41
  verify: string[];
42
+ plan_approval?: PlanApproval;
43
+ verification?: VerificationResult;
17
44
  commit?: {
18
45
  hash: string;
19
46
  message: string;
@@ -22,6 +49,7 @@ export type TaskData = {
22
49
  author: string;
23
50
  body: string;
24
51
  }[];
52
+ events?: TaskEvent[];
25
53
  doc?: string;
26
54
  doc_version?: number;
27
55
  doc_updated_at?: 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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"}
@@ -3,6 +3,7 @@ import { mkdir, readdir, readFile, stat } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { atomicWriteFile as atomicWriteFileCore, canonicalizeJson, docChanged, extractTaskDoc as extractTaskDocCore, generateTaskId as generateTaskIdCore, loadConfig, mergeTaskDoc as mergeTaskDocCore, parseTaskReadme, renderTaskReadme, resolveProject, TASK_ID_ALPHABET, taskReadmePath, } from "@agentplaneorg/core";
5
5
  import { loadDotEnv } from "../shared/env.js";
6
+ import { isRecord } from "../shared/guards.js";
6
7
  import { buildTaskIndexEntry, loadTaskIndex, resolveTaskIndexPath, saveTaskIndex, } from "./task-index.js";
7
8
  const TASK_ID_RE = new RegExp(String.raw `^\d{12}-[${TASK_ID_ALPHABET}]{4,}$`);
8
9
  const DEFAULT_DOC_UPDATED_BY = "agentplane";
@@ -14,9 +15,6 @@ const generateTaskId = generateTaskIdCore;
14
15
  function nowIso() {
15
16
  return new Date().toISOString();
16
17
  }
17
- function isRecord(value) {
18
- return !!value && typeof value === "object" && !Array.isArray(value);
19
- }
20
18
  function toStringSafe(value) {
21
19
  if (typeof value === "string")
22
20
  return value;
@@ -167,6 +165,62 @@ function normalizePriority(value) {
167
165
  return "high";
168
166
  return "med";
169
167
  }
168
+ function defaultPlanApproval() {
169
+ return { state: "pending", updated_at: null, updated_by: null, note: null };
170
+ }
171
+ function normalizePlanApproval(value) {
172
+ if (!isRecord(value))
173
+ return null;
174
+ const state = typeof value.state === "string" ? value.state : "";
175
+ if (state !== "pending" && state !== "approved" && state !== "rejected")
176
+ return null;
177
+ const updatedAt = value.updated_at === null || typeof value.updated_at === "string" ? value.updated_at : null;
178
+ const updatedBy = value.updated_by === null || typeof value.updated_by === "string" ? value.updated_by : null;
179
+ const note = value.note === null || typeof value.note === "string" ? value.note : null;
180
+ return { state, updated_at: updatedAt, updated_by: updatedBy, note };
181
+ }
182
+ function defaultVerificationResult() {
183
+ return { state: "pending", updated_at: null, updated_by: null, note: null };
184
+ }
185
+ function normalizeVerificationResult(value) {
186
+ if (!isRecord(value))
187
+ return null;
188
+ const state = typeof value.state === "string" ? value.state : "";
189
+ if (state !== "pending" && state !== "ok" && state !== "needs_rework")
190
+ return null;
191
+ const updatedAt = value.updated_at === null || typeof value.updated_at === "string" ? value.updated_at : null;
192
+ const updatedBy = value.updated_by === null || typeof value.updated_by === "string" ? value.updated_by : null;
193
+ const note = value.note === null || typeof value.note === "string" ? value.note : null;
194
+ return { state, updated_at: updatedAt, updated_by: updatedBy, note };
195
+ }
196
+ const TASK_EVENT_TYPES = new Set(["status", "comment", "verify"]);
197
+ function normalizeEvents(value) {
198
+ if (!Array.isArray(value))
199
+ return [];
200
+ const events = [];
201
+ for (const entry of value) {
202
+ if (!isRecord(entry))
203
+ continue;
204
+ const type = typeof entry.type === "string" ? entry.type : "";
205
+ if (!TASK_EVENT_TYPES.has(type))
206
+ continue;
207
+ const at = typeof entry.at === "string" ? entry.at : "";
208
+ const author = typeof entry.author === "string" ? entry.author : "";
209
+ if (!at.trim() || !author.trim())
210
+ continue;
211
+ events.push({
212
+ type: type,
213
+ at,
214
+ author,
215
+ from: typeof entry.from === "string" ? entry.from : undefined,
216
+ to: typeof entry.to === "string" ? entry.to : undefined,
217
+ state: typeof entry.state === "string" ? entry.state : undefined,
218
+ note: typeof entry.note === "string" ? entry.note : undefined,
219
+ body: typeof entry.body === "string" ? entry.body : undefined,
220
+ });
221
+ }
222
+ return events;
223
+ }
170
224
  export function taskRecordToData(record) {
171
225
  const fm = record.frontmatter;
172
226
  const comments = Array.isArray(fm.comments)
@@ -180,6 +234,9 @@ export function taskRecordToData(record) {
180
234
  typeof fm.commit.message === "string"
181
235
  ? { hash: fm.commit.hash, message: fm.commit.message }
182
236
  : null;
237
+ const events = normalizeEvents(fm.events);
238
+ const planApproval = normalizePlanApproval(fm.plan_approval);
239
+ const verification = normalizeVerificationResult(fm.verification);
183
240
  const baseId = typeof fm.id === "string" ? fm.id : typeof record.id === "string" ? record.id : "";
184
241
  const task = {
185
242
  id: baseId.trim(),
@@ -191,8 +248,11 @@ export function taskRecordToData(record) {
191
248
  depends_on: normalizeDependsOn(fm.depends_on),
192
249
  tags: toStringArray(fm.tags),
193
250
  verify: toStringArray(fm.verify),
251
+ plan_approval: planApproval ?? undefined,
252
+ verification: verification ?? undefined,
194
253
  commit,
195
254
  comments,
255
+ events,
196
256
  doc_version: typeof fm.doc_version === "number" ? fm.doc_version : undefined,
197
257
  doc_updated_at: typeof fm.doc_updated_at === "string" ? fm.doc_updated_at : undefined,
198
258
  doc_updated_by: typeof fm.doc_updated_by === "string" ? fm.doc_updated_by : undefined,
@@ -205,7 +265,7 @@ export function taskRecordToData(record) {
205
265
  return task;
206
266
  }
207
267
  function taskDataToExport(task) {
208
- return {
268
+ const base = {
209
269
  ...task,
210
270
  id: task.id,
211
271
  title: task.title ?? "",
@@ -226,6 +286,15 @@ function taskDataToExport(task) {
226
286
  dirty: Boolean(task.dirty),
227
287
  id_source: task.id_source ?? "generated",
228
288
  };
289
+ const events = Array.isArray(task.events)
290
+ ? task.events.filter((event) => !!event &&
291
+ typeof event.type === "string" &&
292
+ typeof event.at === "string" &&
293
+ typeof event.author === "string")
294
+ : [];
295
+ if (events.length > 0)
296
+ return { ...base, events };
297
+ return base;
229
298
  }
230
299
  export function buildTasksExportSnapshotFromTasks(tasks) {
231
300
  const exportTasks = tasks.map((task) => taskDataToExport(task));
@@ -419,6 +488,18 @@ export class LocalBackend {
419
488
  payload[key] = existingFrontmatter[key];
420
489
  }
421
490
  }
491
+ if (payload.plan_approval === undefined && existingFrontmatter.plan_approval !== undefined) {
492
+ payload.plan_approval = existingFrontmatter.plan_approval;
493
+ }
494
+ if (payload.plan_approval === undefined) {
495
+ payload.plan_approval = defaultPlanApproval();
496
+ }
497
+ if (payload.verification === undefined && existingFrontmatter.verification !== undefined) {
498
+ payload.verification = existingFrontmatter.verification;
499
+ }
500
+ if (payload.verification === undefined) {
501
+ payload.verification = defaultVerificationResult();
502
+ }
422
503
  if (task.doc !== undefined) {
423
504
  const docText = String(task.doc ?? "");
424
505
  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,CA2EzC"}
@@ -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,9 +77,9 @@ 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
- '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
82
+ '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> <scope>: <summary>"` / `agentplane commit <task-id> -m "<emoji> <suffix> <scope>: <summary>" --allow <path-prefix>`',
83
83
  ],
84
84
  },
85
85
  {
@@ -88,9 +88,9 @@ 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
- '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
93
+ '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> <scope>: <summary>"` / `agentplane commit <task-id> -m "<emoji> <suffix> <scope>: <summary>" --allow <path-prefix>`',
94
94
  ],
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ const ROLE_GUIDES = [
98
98
  lines: [
99
99
  '- Task docs: `agentplane task doc set <task-id> --section Summary --text "..."` (repeat per section or use `--file`)',
100
100
  '- PR notes: `agentplane pr note <task-id> --author DOCS --body "..."`',
101
- '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
101
+ '- Commit: `agentplane guard commit <task-id> -m "<emoji> <suffix> <scope>: <summary>"` / `agentplane commit <task-id> -m "<emoji> <suffix> <scope>: <summary>" --allow <path-prefix>`',
102
102
  ],
103
103
  },
104
104
  {
@@ -120,7 +120,7 @@ const ROLE_GUIDES = [
120
120
  role: "CREATOR",
121
121
  lines: [
122
122
  '- Task bookkeeping: `agentplane task update <task-id> ...` / `agentplane start <task-id> --author CREATOR --body "Start: ..."`',
123
- '- Commits: `agentplane guard commit <task-id> -m "<emoji> <suffix> ..."` / `agentplane commit <task-id> -m "<emoji> <suffix> ..." --allow <path-prefix>`',
123
+ '- Commits: `agentplane guard commit <task-id> -m "<emoji> <suffix> <scope>: <summary>"` / `agentplane commit <task-id> -m "<emoji> <suffix> <scope>: <summary>" --allow <path-prefix>`',
124
124
  ],
125
125
  },
126
126
  {
@@ -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)",
@@ -235,11 +235,10 @@ export function renderQuickstart() {
235
235
  "",
236
236
  "## Commit message format",
237
237
  "",
238
- "Use: `<emoji> <suffix> <detailed changelog ...>`.",
238
+ "Use: `<emoji> <suffix> <scope>: <summary>`.",
239
239
  "",
240
240
  "Notes:",
241
241
  "- `suffix` is the task ID segment after the last dash.",
242
- "- For batch commits, include every task suffix in the subject.",
243
- "- When using comment-driven flags, the subject is auto-built as `<emoji> <suffix> <formatted comment>` from your status/finish body.",
242
+ "- When using comment-driven flags, the subject is auto-built as `<emoji> <suffix> <scope>: <summary>`, and the body is auto-built from your status/finish comment.",
244
243
  ].join("\n");
245
244
  }
@@ -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":"AA2iCA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA63D5D"}
1
+ {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":"AAojCA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA83D5D"}