agentplane 0.2.19 → 0.2.22

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 (122) hide show
  1. package/assets/AGENTS.md +6 -4
  2. package/bin/agentplane.js +24 -0
  3. package/dist/backends/task-backend/load.d.ts +2 -0
  4. package/dist/backends/task-backend/load.d.ts.map +1 -1
  5. package/dist/backends/task-backend/load.js +38 -18
  6. package/dist/backends/task-backend/local-backend.d.ts.map +1 -1
  7. package/dist/backends/task-backend/local-backend.js +27 -7
  8. package/dist/cli/command-guide.d.ts.map +1 -1
  9. package/dist/cli/command-guide.js +12 -11
  10. package/dist/cli/run-cli/command-catalog.d.ts +1 -1
  11. package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
  12. package/dist/cli/run-cli/command-catalog.js +72 -13
  13. package/dist/cli/run-cli/commands/core.d.ts +11 -1
  14. package/dist/cli/run-cli/commands/core.d.ts.map +1 -1
  15. package/dist/cli/run-cli/commands/core.js +295 -8
  16. package/dist/cli/run-cli/commands/init/write-agents.d.ts.map +1 -1
  17. package/dist/cli/run-cli/commands/init/write-agents.js +33 -1
  18. package/dist/cli/run-cli/commands/init/write-config.d.ts.map +1 -1
  19. package/dist/cli/run-cli/commands/init/write-config.js +4 -0
  20. package/dist/cli/run-cli/commands/init/write-gitignore.d.ts.map +1 -1
  21. package/dist/cli/run-cli/commands/init/write-gitignore.js +3 -18
  22. package/dist/cli/run-cli/commands/init.d.ts +1 -0
  23. package/dist/cli/run-cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/run-cli/commands/init.js +96 -31
  25. package/dist/cli/run-cli.d.ts.map +1 -1
  26. package/dist/cli/run-cli.js +86 -17
  27. package/dist/cli/spec/docs-render.d.ts.map +1 -1
  28. package/dist/cli/spec/docs-render.js +13 -6
  29. package/dist/commands/backend/sync.command.d.ts +3 -2
  30. package/dist/commands/backend/sync.command.d.ts.map +1 -1
  31. package/dist/commands/backend/sync.command.js +13 -15
  32. package/dist/commands/commit.command.d.ts.map +1 -1
  33. package/dist/commands/commit.command.js +2 -0
  34. package/dist/commands/commit.spec.d.ts +2 -0
  35. package/dist/commands/commit.spec.d.ts.map +1 -1
  36. package/dist/commands/commit.spec.js +26 -0
  37. package/dist/commands/doctor.run.d.ts.map +1 -1
  38. package/dist/commands/doctor.run.js +15 -6
  39. package/dist/commands/finish.run.d.ts.map +1 -1
  40. package/dist/commands/finish.run.js +2 -0
  41. package/dist/commands/finish.spec.d.ts +2 -0
  42. package/dist/commands/finish.spec.d.ts.map +1 -1
  43. package/dist/commands/finish.spec.js +36 -0
  44. package/dist/commands/guard/impl/allow.d.ts.map +1 -1
  45. package/dist/commands/guard/impl/allow.js +33 -7
  46. package/dist/commands/guard/impl/commands.d.ts +2 -0
  47. package/dist/commands/guard/impl/commands.d.ts.map +1 -1
  48. package/dist/commands/guard/impl/commands.js +24 -4
  49. package/dist/commands/guard/impl/comment-commit.d.ts +1 -0
  50. package/dist/commands/guard/impl/comment-commit.d.ts.map +1 -1
  51. package/dist/commands/guard/impl/comment-commit.js +16 -24
  52. package/dist/commands/pr/pr.command.d.ts +1 -1
  53. package/dist/commands/pr/pr.command.d.ts.map +1 -1
  54. package/dist/commands/pr/pr.command.js +15 -15
  55. package/dist/commands/release/apply.command.d.ts.map +1 -1
  56. package/dist/commands/release/apply.command.js +51 -3
  57. package/dist/commands/release/plan.command.d.ts.map +1 -1
  58. package/dist/commands/release/plan.command.js +25 -1
  59. package/dist/commands/shared/task-backend.d.ts +3 -0
  60. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  61. package/dist/commands/shared/task-backend.js +4 -1
  62. package/dist/commands/task/block.d.ts.map +1 -1
  63. package/dist/commands/task/block.js +16 -16
  64. package/dist/commands/task/close-duplicate.command.d.ts +14 -0
  65. package/dist/commands/task/close-duplicate.command.d.ts.map +1 -0
  66. package/dist/commands/task/close-duplicate.command.js +102 -0
  67. package/dist/commands/task/close-duplicate.d.ts +14 -0
  68. package/dist/commands/task/close-duplicate.d.ts.map +1 -0
  69. package/dist/commands/task/close-duplicate.js +90 -0
  70. package/dist/commands/task/close-noop.command.d.ts +14 -0
  71. package/dist/commands/task/close-noop.command.d.ts.map +1 -0
  72. package/dist/commands/task/close-noop.command.js +77 -0
  73. package/dist/commands/task/close-noop.d.ts +13 -0
  74. package/dist/commands/task/close-noop.d.ts.map +1 -0
  75. package/dist/commands/task/close-noop.js +77 -0
  76. package/dist/commands/task/finish.d.ts +2 -0
  77. package/dist/commands/task/finish.d.ts.map +1 -1
  78. package/dist/commands/task/finish.js +63 -14
  79. package/dist/commands/task/index.d.ts +3 -0
  80. package/dist/commands/task/index.d.ts.map +1 -1
  81. package/dist/commands/task/index.js +3 -0
  82. package/dist/commands/task/new.d.ts.map +1 -1
  83. package/dist/commands/task/new.js +34 -6
  84. package/dist/commands/task/new.spec.js +1 -1
  85. package/dist/commands/task/plan.d.ts.map +1 -1
  86. package/dist/commands/task/plan.js +16 -5
  87. package/dist/commands/task/ready.d.ts.map +1 -1
  88. package/dist/commands/task/ready.js +6 -8
  89. package/dist/commands/task/set-status.d.ts.map +1 -1
  90. package/dist/commands/task/set-status.js +19 -21
  91. package/dist/commands/task/shared.d.ts +35 -1
  92. package/dist/commands/task/shared.d.ts.map +1 -1
  93. package/dist/commands/task/shared.js +188 -0
  94. package/dist/commands/task/start-ready.command.d.ts +14 -0
  95. package/dist/commands/task/start-ready.command.d.ts.map +1 -0
  96. package/dist/commands/task/start-ready.command.js +77 -0
  97. package/dist/commands/task/start-ready.d.ts +13 -0
  98. package/dist/commands/task/start-ready.d.ts.map +1 -0
  99. package/dist/commands/task/start-ready.js +37 -0
  100. package/dist/commands/task/start.d.ts.map +1 -1
  101. package/dist/commands/task/start.js +20 -23
  102. package/dist/commands/task/update.command.d.ts +1 -0
  103. package/dist/commands/task/update.command.d.ts.map +1 -1
  104. package/dist/commands/task/update.command.js +8 -0
  105. package/dist/commands/task/update.d.ts +1 -0
  106. package/dist/commands/task/update.d.ts.map +1 -1
  107. package/dist/commands/task/update.js +19 -3
  108. package/dist/commands/upgrade.d.ts.map +1 -1
  109. package/dist/commands/upgrade.js +67 -19
  110. package/dist/shared/errors.d.ts +9 -1
  111. package/dist/shared/errors.d.ts.map +1 -1
  112. package/dist/shared/errors.js +3 -1
  113. package/dist/shared/runtime-artifacts.d.ts +3 -0
  114. package/dist/shared/runtime-artifacts.d.ts.map +1 -0
  115. package/dist/shared/runtime-artifacts.js +18 -0
  116. package/dist/usecases/context/resolve-context.d.ts +3 -0
  117. package/dist/usecases/context/resolve-context.d.ts.map +1 -1
  118. package/dist/usecases/context/resolve-context.js +6 -1
  119. package/package.json +2 -2
  120. package/dist/cli/parse/lifecycle.d.ts +0 -64
  121. package/dist/cli/parse/lifecycle.d.ts.map +0 -1
  122. package/dist/cli/parse/lifecycle.js +0 -285
@@ -0,0 +1,102 @@
1
+ import { usageError } from "../../cli/spec/errors.js";
2
+ import { cmdTaskCloseDuplicate } from "./close-duplicate.js";
3
+ export const taskCloseDuplicateSpec = {
4
+ id: ["task", "close-duplicate"],
5
+ group: "Task",
6
+ summary: "Close a task as a duplicate of another task with no-op bookkeeping metadata.",
7
+ args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
8
+ options: [
9
+ {
10
+ kind: "string",
11
+ name: "of",
12
+ valueHint: "<task-id>",
13
+ required: true,
14
+ description: "Canonical task id that this task duplicates.",
15
+ },
16
+ {
17
+ kind: "string",
18
+ name: "author",
19
+ valueHint: "<id>",
20
+ required: true,
21
+ description: "Comment author id (e.g. ORCHESTRATOR).",
22
+ },
23
+ {
24
+ kind: "string",
25
+ name: "note",
26
+ valueHint: "<text>",
27
+ description: "Optional short reason appended to the closure comment.",
28
+ },
29
+ { kind: "boolean", name: "force", default: false, description: "Force closure despite gates." },
30
+ {
31
+ kind: "boolean",
32
+ name: "yes",
33
+ default: false,
34
+ description: "Auto-approve force-action approval checks when required.",
35
+ },
36
+ { kind: "boolean", name: "quiet", default: false, description: "Suppress output." },
37
+ ],
38
+ examples: [
39
+ {
40
+ cmd: "agentplane task close-duplicate 202602120845-VKGC27 --of 202602120845-RWJ8K3 --author ORCHESTRATOR",
41
+ why: "Close accidental duplicate task in one command.",
42
+ },
43
+ ],
44
+ validateRaw: (raw) => {
45
+ const taskId = typeof raw.args["task-id"] === "string" ? raw.args["task-id"].trim() : "";
46
+ const of = typeof raw.opts.of === "string" ? raw.opts.of.trim() : "";
47
+ const author = typeof raw.opts.author === "string" ? raw.opts.author.trim() : "";
48
+ const note = raw.opts.note;
49
+ if (!taskId) {
50
+ throw usageError({
51
+ spec: taskCloseDuplicateSpec,
52
+ message: "Invalid value for task-id: empty.",
53
+ });
54
+ }
55
+ if (!of) {
56
+ throw usageError({ spec: taskCloseDuplicateSpec, message: "Invalid value for --of: empty." });
57
+ }
58
+ if (!author) {
59
+ throw usageError({
60
+ spec: taskCloseDuplicateSpec,
61
+ message: "Invalid value for --author: empty.",
62
+ });
63
+ }
64
+ if (typeof note === "string" && note.trim().length === 0) {
65
+ throw usageError({
66
+ spec: taskCloseDuplicateSpec,
67
+ message: "Invalid value for --note: empty.",
68
+ });
69
+ }
70
+ if (taskId === of) {
71
+ throw usageError({
72
+ spec: taskCloseDuplicateSpec,
73
+ message: "Duplicate target must differ from task-id.",
74
+ });
75
+ }
76
+ },
77
+ parse: (raw) => ({
78
+ taskId: String(raw.args["task-id"]),
79
+ duplicateOf: String(raw.opts.of),
80
+ author: String(raw.opts.author),
81
+ note: typeof raw.opts.note === "string" ? raw.opts.note : undefined,
82
+ force: raw.opts.force === true,
83
+ yes: raw.opts.yes === true,
84
+ quiet: raw.opts.quiet === true,
85
+ }),
86
+ };
87
+ export function makeRunTaskCloseDuplicateHandler(getCtx) {
88
+ return async (ctx, p) => {
89
+ return await cmdTaskCloseDuplicate({
90
+ ctx: await getCtx("task close-duplicate"),
91
+ cwd: ctx.cwd,
92
+ rootOverride: ctx.rootOverride,
93
+ taskId: p.taskId,
94
+ duplicateOf: p.duplicateOf,
95
+ author: p.author,
96
+ note: p.note,
97
+ force: p.force,
98
+ yes: p.yes,
99
+ quiet: p.quiet,
100
+ });
101
+ };
102
+ }
@@ -0,0 +1,14 @@
1
+ import { type CommandContext } from "../shared/task-backend.js";
2
+ export declare function cmdTaskCloseDuplicate(opts: {
3
+ ctx: CommandContext;
4
+ cwd: string;
5
+ rootOverride?: string;
6
+ taskId: string;
7
+ duplicateOf: string;
8
+ author: string;
9
+ note?: string;
10
+ force: boolean;
11
+ yes: boolean;
12
+ quiet: boolean;
13
+ }): Promise<number>;
14
+ //# sourceMappingURL=close-duplicate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-duplicate.d.ts","sourceRoot":"","sources":["../../../src/commands/task/close-duplicate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIrF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuFlB"}
@@ -0,0 +1,90 @@
1
+ import { mapBackendError } from "../../cli/error-map.js";
2
+ import { CliError } from "../../shared/errors.js";
3
+ import { ensureActionApproved } from "../shared/approval-requirements.js";
4
+ import { loadTaskFromContext } from "../shared/task-backend.js";
5
+ import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
6
+ import { appendTaskEvent, nowIso, requireStructuredComment } from "./shared.js";
7
+ export async function cmdTaskCloseDuplicate(opts) {
8
+ try {
9
+ const sourceId = opts.taskId.trim();
10
+ const duplicateOf = opts.duplicateOf.trim();
11
+ if (!sourceId || !duplicateOf) {
12
+ throw new CliError({
13
+ exitCode: 2,
14
+ code: "E_USAGE",
15
+ message: "Both task id and --of must be non-empty.",
16
+ });
17
+ }
18
+ if (sourceId === duplicateOf) {
19
+ throw new CliError({
20
+ exitCode: 2,
21
+ code: "E_USAGE",
22
+ message: `Duplicate target must differ from task id (${sourceId}).`,
23
+ });
24
+ }
25
+ if (opts.force) {
26
+ await ensureActionApproved({
27
+ action: "force_action",
28
+ config: opts.ctx.config,
29
+ yes: opts.yes,
30
+ reason: "task close-duplicate --force",
31
+ });
32
+ }
33
+ const canonical = await loadTaskFromContext({ ctx: opts.ctx, taskId: duplicateOf });
34
+ const useStore = backendIsLocalFileBackend(opts.ctx);
35
+ const store = useStore ? getTaskStore(opts.ctx) : null;
36
+ const task = useStore
37
+ ? await store.get(sourceId)
38
+ : await loadTaskFromContext({ ctx: opts.ctx, taskId: sourceId });
39
+ if (!opts.force && String(task.status || "TODO").toUpperCase() === "DONE") {
40
+ throw new CliError({
41
+ exitCode: 2,
42
+ code: "E_USAGE",
43
+ message: `Task is already DONE: ${sourceId} (use --force to override)`,
44
+ });
45
+ }
46
+ const reason = opts.note?.trim();
47
+ const canonicalTitle = canonical.title?.trim() ? ` (${canonical.title.trim()})` : "";
48
+ const baseBody = `Verified: ${sourceId} is a bookkeeping duplicate of ${duplicateOf}${canonicalTitle}; ` +
49
+ "no code/config changes are expected in this task and closure is recorded as no-op.";
50
+ const body = reason ? `${baseBody}\n\nReason: ${reason}` : baseBody;
51
+ const verifiedCfg = opts.ctx.config.tasks.comments.verified;
52
+ requireStructuredComment(body, verifiedCfg.prefix, verifiedCfg.min_chars);
53
+ const at = nowIso();
54
+ const next = {
55
+ ...task,
56
+ status: "DONE",
57
+ comments: [
58
+ ...(Array.isArray(task.comments) ? task.comments : []),
59
+ { author: opts.author, body },
60
+ ],
61
+ events: appendTaskEvent(task, {
62
+ type: "status",
63
+ at,
64
+ author: opts.author,
65
+ from: String(task.status || "TODO").toUpperCase(),
66
+ to: "DONE",
67
+ note: body,
68
+ }),
69
+ result_summary: `Closed as duplicate of ${duplicateOf}.`,
70
+ risk_level: "low",
71
+ breaking: false,
72
+ doc_version: 2,
73
+ doc_updated_at: at,
74
+ doc_updated_by: opts.author,
75
+ };
76
+ await (useStore ? store.update(sourceId, () => next) : opts.ctx.taskBackend.writeTask(next));
77
+ if (!opts.quiet) {
78
+ process.stdout.write(`task.done: ${sourceId} (duplicate of ${duplicateOf})\n`);
79
+ }
80
+ return 0;
81
+ }
82
+ catch (err) {
83
+ if (err instanceof CliError)
84
+ throw err;
85
+ throw mapBackendError(err, {
86
+ command: "task close-duplicate",
87
+ root: opts.rootOverride ?? null,
88
+ });
89
+ }
90
+ }
@@ -0,0 +1,14 @@
1
+ import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
2
+ import type { CommandContext } from "../shared/task-backend.js";
3
+ type TaskCloseNoopParsed = {
4
+ taskId: string;
5
+ author: string;
6
+ note?: string;
7
+ force: boolean;
8
+ yes: boolean;
9
+ quiet: boolean;
10
+ };
11
+ export declare const taskCloseNoopSpec: CommandSpec<TaskCloseNoopParsed>;
12
+ export declare function makeRunTaskCloseNoopHandler(getCtx: (cmd: string) => Promise<CommandContext>): (ctx: CommandCtx, p: TaskCloseNoopParsed) => Promise<number>;
13
+ export {};
14
+ //# sourceMappingURL=close-noop.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-noop.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/close-noop.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,mBAAmB,CA2D9D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC5E,KAAK,UAAU,EAAE,GAAG,mBAAmB,KAAG,OAAO,CAAC,MAAM,CAAC,CAaxE"}
@@ -0,0 +1,77 @@
1
+ import { usageError } from "../../cli/spec/errors.js";
2
+ import { cmdTaskCloseNoop } from "./close-noop.js";
3
+ export const taskCloseNoopSpec = {
4
+ id: ["task", "close-noop"],
5
+ group: "Task",
6
+ summary: "Close a task as a verified no-op in one command.",
7
+ args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
8
+ options: [
9
+ {
10
+ kind: "string",
11
+ name: "author",
12
+ valueHint: "<id>",
13
+ required: true,
14
+ description: "Comment author id (e.g. ORCHESTRATOR).",
15
+ },
16
+ {
17
+ kind: "string",
18
+ name: "note",
19
+ valueHint: "<text>",
20
+ description: "Optional closure note.",
21
+ },
22
+ {
23
+ kind: "boolean",
24
+ name: "force",
25
+ default: false,
26
+ description: "Override status/verification gates.",
27
+ },
28
+ {
29
+ kind: "boolean",
30
+ name: "yes",
31
+ default: false,
32
+ description: "Auto-approve force-action checks when required.",
33
+ },
34
+ { kind: "boolean", name: "quiet", default: false, description: "Suppress output." },
35
+ ],
36
+ examples: [
37
+ {
38
+ cmd: 'agentplane task close-noop 202602030608-F1Q8AB --author ORCHESTRATOR --note "Duplicate tracking artifact"',
39
+ why: "Close bookkeeping-only tasks without manual verify+finish choreography.",
40
+ },
41
+ ],
42
+ validateRaw: (raw) => {
43
+ const taskId = typeof raw.args["task-id"] === "string" ? raw.args["task-id"].trim() : "";
44
+ const author = typeof raw.opts.author === "string" ? raw.opts.author.trim() : "";
45
+ const note = raw.opts.note;
46
+ if (!taskId)
47
+ throw usageError({ spec: taskCloseNoopSpec, message: "Invalid value for task-id: empty." });
48
+ if (!author)
49
+ throw usageError({ spec: taskCloseNoopSpec, message: "Invalid value for --author: empty." });
50
+ if (typeof note === "string" && note.trim().length === 0) {
51
+ throw usageError({ spec: taskCloseNoopSpec, message: "Invalid value for --note: empty." });
52
+ }
53
+ },
54
+ parse: (raw) => ({
55
+ taskId: String(raw.args["task-id"]),
56
+ author: String(raw.opts.author),
57
+ note: typeof raw.opts.note === "string" ? raw.opts.note : undefined,
58
+ force: raw.opts.force === true,
59
+ yes: raw.opts.yes === true,
60
+ quiet: raw.opts.quiet === true,
61
+ }),
62
+ };
63
+ export function makeRunTaskCloseNoopHandler(getCtx) {
64
+ return async (ctx, p) => {
65
+ return await cmdTaskCloseNoop({
66
+ ctx: await getCtx("task close-noop"),
67
+ cwd: ctx.cwd,
68
+ rootOverride: ctx.rootOverride,
69
+ taskId: p.taskId,
70
+ author: p.author,
71
+ note: p.note,
72
+ force: p.force,
73
+ yes: p.yes,
74
+ quiet: p.quiet,
75
+ });
76
+ };
77
+ }
@@ -0,0 +1,13 @@
1
+ import { type CommandContext } from "../shared/task-backend.js";
2
+ export declare function cmdTaskCloseNoop(opts: {
3
+ ctx?: CommandContext;
4
+ cwd: string;
5
+ rootOverride?: string;
6
+ taskId: string;
7
+ author: string;
8
+ note?: string;
9
+ force: boolean;
10
+ yes: boolean;
11
+ quiet: boolean;
12
+ }): Promise<number>;
13
+ //# sourceMappingURL=close-noop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-noop.d.ts","sourceRoot":"","sources":["../../../src/commands/task/close-noop.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsElB"}
@@ -0,0 +1,77 @@
1
+ import { mapBackendError } from "../../cli/error-map.js";
2
+ import { CliError } from "../../shared/errors.js";
3
+ import { ensureActionApproved } from "../shared/approval-requirements.js";
4
+ import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
5
+ import { loadCommandContext } from "../shared/task-backend.js";
6
+ import { appendTaskEvent, nowIso, requireStructuredComment } from "./shared.js";
7
+ export async function cmdTaskCloseNoop(opts) {
8
+ try {
9
+ const ctx = opts.ctx ??
10
+ (await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
11
+ if (opts.force) {
12
+ await ensureActionApproved({
13
+ action: "force_action",
14
+ config: ctx.config,
15
+ yes: opts.yes,
16
+ reason: "task close-noop --force",
17
+ });
18
+ }
19
+ const useStore = backendIsLocalFileBackend(ctx);
20
+ const store = useStore ? getTaskStore(ctx) : null;
21
+ const task = useStore
22
+ ? await store.get(opts.taskId)
23
+ : await ctx.taskBackend.getTask(opts.taskId);
24
+ if (!task) {
25
+ throw new CliError({
26
+ exitCode: 4,
27
+ code: "E_IO",
28
+ message: `Task not found: ${opts.taskId}`,
29
+ });
30
+ }
31
+ if (!opts.force && String(task.status || "TODO").toUpperCase() === "DONE") {
32
+ throw new CliError({
33
+ exitCode: 2,
34
+ code: "E_USAGE",
35
+ message: `Task is already DONE: ${opts.taskId} (use --force to override)`,
36
+ });
37
+ }
38
+ const normalizedNote = opts.note?.trim();
39
+ const baseBody = "Verified: no implementation changes were required; closure is recorded as no-op bookkeeping.";
40
+ const body = normalizedNote ? `${baseBody}\n\nNote: ${normalizedNote}` : baseBody;
41
+ const verifiedCfg = ctx.config.tasks.comments.verified;
42
+ requireStructuredComment(body, verifiedCfg.prefix, verifiedCfg.min_chars);
43
+ const at = nowIso();
44
+ const next = {
45
+ ...task,
46
+ status: "DONE",
47
+ comments: [
48
+ ...(Array.isArray(task.comments) ? task.comments : []),
49
+ { author: opts.author, body },
50
+ ],
51
+ events: appendTaskEvent(task, {
52
+ type: "status",
53
+ at,
54
+ author: opts.author,
55
+ from: String(task.status || "TODO").toUpperCase(),
56
+ to: "DONE",
57
+ note: body,
58
+ }),
59
+ result_summary: "No-op closure recorded.",
60
+ risk_level: "low",
61
+ breaking: false,
62
+ doc_version: 2,
63
+ doc_updated_at: at,
64
+ doc_updated_by: opts.author,
65
+ };
66
+ await (useStore ? store.update(opts.taskId, () => next) : ctx.taskBackend.writeTask(next));
67
+ if (!opts.quiet) {
68
+ process.stdout.write(`task.done: ${opts.taskId} (no-op)\n`);
69
+ }
70
+ return 0;
71
+ }
72
+ catch (err) {
73
+ if (err instanceof CliError)
74
+ throw err;
75
+ throw mapBackendError(err, { command: "task close-noop", root: opts.rootOverride ?? null });
76
+ }
77
+ }
@@ -24,6 +24,8 @@ export declare function cmdFinish(opts: {
24
24
  statusCommitAutoAllow: boolean;
25
25
  statusCommitRequireClean: boolean;
26
26
  confirmStatusCommit: boolean;
27
+ closeCommit?: boolean;
28
+ closeUnstageOthers?: boolean;
27
29
  quiet: boolean;
28
30
  }): Promise<number>;
29
31
  //# sourceMappingURL=finish.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAiCnC,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiRlB"}
1
+ {"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAmCnC,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqUlB"}
@@ -4,12 +4,12 @@ import { formatCommentBodyForCommit } from "../../shared/comment-format.js";
4
4
  import { CliError } from "../../shared/errors.js";
5
5
  import { readFile, rm } from "node:fs/promises";
6
6
  import path from "node:path";
7
- import { buildGitCommitEnv, commitFromComment } from "../guard/index.js";
7
+ import { buildGitCommitEnv, cmdCommit, commitFromComment } from "../guard/index.js";
8
8
  import { ensureActionApproved } from "../shared/approval-requirements.js";
9
9
  import { loadCommandContext, loadTaskFromContext, } from "../shared/task-backend.js";
10
10
  import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
11
11
  import { readDirectWorkLock } from "../../shared/direct-work-lock.js";
12
- import { appendTaskEvent, defaultCommitEmojiForStatus, enforceStatusCommitPolicy, ensureVerificationSatisfiedIfRequired, nowIso, readCommitInfo, readHeadCommit, requireStructuredComment, } from "./shared.js";
12
+ import { appendTaskEvent, defaultCommitEmojiForStatus, enforceStatusCommitPolicy, ensureVerificationSatisfiedIfRequired, nowIso, readCommitInfo, readHeadCommit, requireStructuredComment, resolvePrimaryTag, toStringArray, } from "./shared.js";
13
13
  async function clearDirectWorkLockIfMatches(opts) {
14
14
  const lockPath = path.join(opts.agentplaneDir, "cache", "direct-work.json");
15
15
  try {
@@ -40,23 +40,36 @@ export async function cmdFinish(opts) {
40
40
  }
41
41
  const { prefix, min_chars: minChars } = ctx.config.tasks.comments.verified;
42
42
  requireStructuredComment(opts.body, prefix, minChars);
43
- if (opts.commitFromComment || opts.statusCommit) {
44
- enforceStatusCommitPolicy({
45
- policy: ctx.config.status_commit_policy,
46
- action: "finish",
47
- confirmed: opts.confirmStatusCommit,
48
- quiet: opts.quiet,
43
+ const autoStatusCommit = (ctx.config.finish_auto_status_commit === true ||
44
+ ctx.config.commit_automation === "finish_only") &&
45
+ !opts.commitFromComment &&
46
+ !opts.statusCommit &&
47
+ opts.closeCommit !== true &&
48
+ opts.taskIds.length === 1;
49
+ const statusCommitRequested = opts.statusCommit || autoStatusCommit;
50
+ if ((opts.commitFromComment || statusCommitRequested) && opts.taskIds.length !== 1) {
51
+ throw new CliError({
52
+ exitCode: 2,
53
+ code: "E_USAGE",
54
+ message: "--commit-from-comment/--status-commit requires exactly one task id",
49
55
  });
50
56
  }
51
- if ((opts.commitFromComment || opts.statusCommit) && opts.taskIds.length !== 1) {
57
+ if (opts.closeCommit && opts.taskIds.length !== 1) {
52
58
  throw new CliError({
53
59
  exitCode: 2,
54
60
  code: "E_USAGE",
55
- message: "--commit-from-comment/--status-commit requires exactly one task id",
61
+ message: "--close-commit requires exactly one task id",
62
+ });
63
+ }
64
+ if (opts.closeCommit && (opts.commitFromComment || opts.statusCommit)) {
65
+ throw new CliError({
66
+ exitCode: 2,
67
+ code: "E_USAGE",
68
+ message: "--close-commit cannot be combined with --commit-from-comment/--status-commit",
56
69
  });
57
70
  }
58
71
  const primaryTaskId = opts.taskIds[0] ?? "";
59
- if ((opts.commitFromComment || opts.statusCommit) && !primaryTaskId) {
72
+ if ((opts.commitFromComment || statusCommitRequested) && !primaryTaskId) {
60
73
  throw new CliError({
61
74
  exitCode: 2,
62
75
  code: "E_USAGE",
@@ -82,6 +95,7 @@ export async function cmdFinish(opts) {
82
95
  const riskLevel = opts.risk;
83
96
  const breaking = opts.breaking === true;
84
97
  let primaryStatusFrom = null;
98
+ let primaryTag = null;
85
99
  for (const taskId of opts.taskIds) {
86
100
  const task = useStore ? await store.get(taskId) : await loadTaskFromContext({ ctx, taskId });
87
101
  if (!opts.force) {
@@ -95,9 +109,10 @@ export async function cmdFinish(opts) {
95
109
  }
96
110
  }
97
111
  if (taskId === primaryTaskId &&
98
- (opts.commitFromComment || opts.statusCommit) &&
112
+ (opts.commitFromComment || statusCommitRequested) &&
99
113
  primaryStatusFrom === null) {
100
114
  primaryStatusFrom = String(task.status || "TODO").toUpperCase();
115
+ primaryTag = resolvePrimaryTag(toStringArray(task.tags), ctx).primary;
101
116
  }
102
117
  ensureVerificationSatisfiedIfRequired(task, ctx.config);
103
118
  if (taskId === metaTaskId) {
@@ -149,9 +164,19 @@ export async function cmdFinish(opts) {
149
164
  ? store.update(taskId, () => nextTask)
150
165
  : ctx.taskBackend.writeTask(nextTask));
151
166
  }
167
+ if (opts.commitFromComment || statusCommitRequested) {
168
+ enforceStatusCommitPolicy({
169
+ policy: ctx.config.status_commit_policy,
170
+ action: "finish",
171
+ confirmed: opts.confirmStatusCommit || autoStatusCommit,
172
+ quiet: opts.quiet,
173
+ statusFrom: primaryStatusFrom ?? "UNKNOWN",
174
+ statusTo: "DONE",
175
+ });
176
+ }
152
177
  // tasks.json is export-only; generated via `agentplane task export`.
153
178
  let executorAgent = null;
154
- if (opts.commitFromComment || opts.statusCommit) {
179
+ if (opts.commitFromComment || statusCommitRequested) {
155
180
  const mode = ctx.config.workflow_mode;
156
181
  executorAgent = opts.author;
157
182
  if (mode === "direct") {
@@ -174,6 +199,7 @@ export async function cmdFinish(opts) {
174
199
  cwd: opts.cwd,
175
200
  rootOverride: opts.rootOverride,
176
201
  taskId: primaryTaskId,
202
+ primaryTag: primaryTag ?? "meta",
177
203
  executorAgent: executorAgent ?? undefined,
178
204
  author: opts.author,
179
205
  statusFrom: primaryStatusFrom ?? undefined,
@@ -221,7 +247,7 @@ export async function cmdFinish(opts) {
221
247
  await ctx.git.commitAmendNoEdit({ env });
222
248
  }
223
249
  }
224
- if (opts.statusCommit) {
250
+ if (statusCommitRequested) {
225
251
  if (typeof opts.statusCommitEmoji === "string" && opts.statusCommitEmoji.trim() !== "✅") {
226
252
  throw new CliError({
227
253
  exitCode: 2,
@@ -234,6 +260,7 @@ export async function cmdFinish(opts) {
234
260
  cwd: opts.cwd,
235
261
  rootOverride: opts.rootOverride,
236
262
  taskId: primaryTaskId,
263
+ primaryTag: primaryTag ?? "meta",
237
264
  executorAgent: executorAgent ?? undefined,
238
265
  author: opts.author,
239
266
  statusFrom: primaryStatusFrom ?? undefined,
@@ -249,6 +276,28 @@ export async function cmdFinish(opts) {
249
276
  config: ctx.config,
250
277
  });
251
278
  }
279
+ if (opts.closeCommit && primaryTaskId) {
280
+ await cmdCommit({
281
+ ctx,
282
+ cwd: opts.cwd,
283
+ rootOverride: opts.rootOverride,
284
+ taskId: primaryTaskId,
285
+ message: "",
286
+ close: true,
287
+ allow: [],
288
+ autoAllow: false,
289
+ allowTasks: true,
290
+ allowBase: false,
291
+ allowPolicy: false,
292
+ allowConfig: false,
293
+ allowHooks: false,
294
+ allowCI: false,
295
+ requireClean: true,
296
+ quiet: opts.quiet,
297
+ closeUnstageOthers: opts.closeUnstageOthers === true,
298
+ closeCheckOnly: false,
299
+ });
300
+ }
252
301
  if (ctx.config.workflow_mode === "direct") {
253
302
  await clearDirectWorkLockIfMatches({
254
303
  agentplaneDir: ctx.resolvedProject.agentplaneDir,
@@ -15,6 +15,9 @@ export { cmdTaskComment } from "./comment.js";
15
15
  export { cmdTaskSetStatus } from "./set-status.js";
16
16
  export { cmdTaskShow } from "./show.js";
17
17
  export { cmdTaskDerive } from "./derive.js";
18
+ export { cmdTaskCloseDuplicate } from "./close-duplicate.js";
19
+ export { cmdTaskStartReady } from "./start-ready.js";
20
+ export { cmdTaskCloseNoop } from "./close-noop.js";
18
21
  export { cmdTaskExport } from "./export.js";
19
22
  export { cmdTaskLint } from "./lint.js";
20
23
  export { cmdTaskPlanSet, cmdTaskPlanApprove, cmdTaskPlanReject } from "./plan.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/task/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/task/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -14,6 +14,9 @@ export { cmdTaskComment } from "./comment.js";
14
14
  export { cmdTaskSetStatus } from "./set-status.js";
15
15
  export { cmdTaskShow } from "./show.js";
16
16
  export { cmdTaskDerive } from "./derive.js";
17
+ export { cmdTaskCloseDuplicate } from "./close-duplicate.js";
18
+ export { cmdTaskStartReady } from "./start-ready.js";
19
+ export { cmdTaskCloseNoop } from "./close-noop.js";
17
20
  export { cmdTaskExport } from "./export.js";
18
21
  export { cmdTaskLint } from "./lint.js";
19
22
  export { cmdTaskPlanSet, cmdTaskPlanApprove, cmdTaskPlanReject } from "./plan.js";
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/commands/task/new.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4DlB"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/commands/task/new.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQpF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAyBF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsElB"}