agentplane 0.1.7 → 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.
- package/dist/backends/task-backend.d.ts +16 -0
- package/dist/backends/task-backend.d.ts.map +1 -1
- package/dist/backends/task-backend.js +44 -0
- package/dist/backends/task-index.d.ts.map +1 -1
- package/dist/backends/task-index.js +3 -6
- package/dist/cli/command-guide.d.ts.map +1 -1
- package/dist/cli/command-guide.js +4 -4
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +7 -5
- package/dist/cli/run-cli.d.ts.map +1 -1
- package/dist/cli/run-cli.js +18 -72
- package/dist/commands/backend.d.ts.map +1 -1
- package/dist/commands/backend.js +17 -2
- package/dist/commands/branch/index.d.ts.map +1 -1
- package/dist/commands/branch/index.js +3 -1
- package/dist/commands/pr/index.d.ts.map +1 -1
- package/dist/commands/pr/index.js +15 -12
- package/dist/commands/recipes.d.ts.map +1 -1
- package/dist/commands/recipes.js +67 -23
- package/dist/commands/shared/network-approval.d.ts +8 -0
- package/dist/commands/shared/network-approval.d.ts.map +1 -0
- package/dist/commands/shared/network-approval.js +25 -0
- package/dist/commands/shared/task-backend.d.ts.map +1 -1
- package/dist/commands/shared/task-backend.js +6 -0
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +2 -1
- package/dist/commands/task/index.d.ts +3 -0
- package/dist/commands/task/index.d.ts.map +1 -1
- package/dist/commands/task/index.js +3 -0
- package/dist/commands/task/migrate-doc.d.ts +8 -0
- package/dist/commands/task/migrate-doc.d.ts.map +1 -0
- package/dist/commands/task/migrate-doc.js +147 -0
- package/dist/commands/task/plan.d.ts +14 -0
- package/dist/commands/task/plan.d.ts.map +1 -0
- package/dist/commands/task/plan.js +217 -0
- package/dist/commands/task/scaffold.d.ts.map +1 -1
- package/dist/commands/task/scaffold.js +15 -4
- package/dist/commands/task/shared.d.ts +2 -0
- package/dist/commands/task/shared.d.ts.map +1 -1
- package/dist/commands/task/shared.js +29 -0
- package/dist/commands/task/start.d.ts.map +1 -1
- package/dist/commands/task/start.js +2 -1
- package/dist/commands/task/verify-record.d.ts +16 -0
- package/dist/commands/task/verify-record.d.ts.map +1 -0
- package/dist/commands/task/verify-record.js +277 -0
- package/dist/commands/task/verify.d.ts +1 -13
- package/dist/commands/task/verify.d.ts.map +1 -1
- package/dist/commands/task/verify.js +1 -362
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +17 -2
- package/dist/commands/workflow.d.ts +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +1 -1
- package/package.json +2 -2
|
@@ -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":"AAIA,OAAO,EAaL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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":"
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)",
|
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,
|
|
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>
|
|
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":"
|
|
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"}
|
package/dist/cli/run-cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, rm
|
|
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, 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, 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
|
|
235
|
+
await atomicWriteFile(filePath, content, "utf8");
|
|
236
236
|
return true;
|
|
237
237
|
}
|
|
238
238
|
async function cmdConfigShow(opts) {
|
|
@@ -631,8 +631,8 @@ async function cmdInit(opts) {
|
|
|
631
631
|
custom_fields: { task_id: 1 },
|
|
632
632
|
},
|
|
633
633
|
};
|
|
634
|
-
await
|
|
635
|
-
await
|
|
634
|
+
await atomicWriteFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
|
|
635
|
+
await atomicWriteFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
|
|
636
636
|
const agentsPath = path.join(resolved.gitRoot, "AGENTS.md");
|
|
637
637
|
const installPaths = [
|
|
638
638
|
path.relative(resolved.gitRoot, configPath),
|
|
@@ -642,7 +642,7 @@ async function cmdInit(opts) {
|
|
|
642
642
|
if (!(await fileExists(agentsPath))) {
|
|
643
643
|
const template = await loadAgentsTemplate();
|
|
644
644
|
const filtered = filterAgentsByWorkflow(template, workflow);
|
|
645
|
-
await
|
|
645
|
+
await atomicWriteFile(agentsPath, filtered, "utf8");
|
|
646
646
|
wroteAgents = true;
|
|
647
647
|
}
|
|
648
648
|
if (wroteAgents) {
|
|
@@ -653,7 +653,7 @@ async function cmdInit(opts) {
|
|
|
653
653
|
const targetPath = path.join(resolved.agentplaneDir, "agents", agent.fileName);
|
|
654
654
|
if (await fileExists(targetPath))
|
|
655
655
|
continue;
|
|
656
|
-
await
|
|
656
|
+
await atomicWriteFile(targetPath, agent.contents, "utf8");
|
|
657
657
|
installPaths.push(path.relative(resolved.gitRoot, targetPath));
|
|
658
658
|
}
|
|
659
659
|
if (hooks) {
|
|
@@ -1010,6 +1010,9 @@ export async function runCli(argv) {
|
|
|
1010
1010
|
if (namespace === "task" && command === "migrate") {
|
|
1011
1011
|
return await cmdTaskMigrate({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1012
1012
|
}
|
|
1013
|
+
if (namespace === "task" && command === "migrate-doc") {
|
|
1014
|
+
return await cmdTaskMigrateDoc({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1015
|
+
}
|
|
1013
1016
|
if (namespace === "task" && command === "export") {
|
|
1014
1017
|
return await cmdTaskExport({ cwd: process.cwd(), rootOverride: globals.root });
|
|
1015
1018
|
}
|
|
@@ -1054,6 +1057,12 @@ export async function runCli(argv) {
|
|
|
1054
1057
|
message: usageMessage(TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE),
|
|
1055
1058
|
});
|
|
1056
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
|
+
}
|
|
1057
1066
|
if (namespace === "task" && command === "comment") {
|
|
1058
1067
|
const [taskId, ...restArgs] = args;
|
|
1059
1068
|
if (!taskId) {
|
|
@@ -2375,74 +2384,11 @@ export async function runCli(argv) {
|
|
|
2375
2384
|
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2376
2385
|
});
|
|
2377
2386
|
}
|
|
2378
|
-
let cwdOverride;
|
|
2379
|
-
let logPath;
|
|
2380
|
-
let skipIfUnchanged = false;
|
|
2381
|
-
let quiet = false;
|
|
2382
|
-
let require = false;
|
|
2383
|
-
let yes = false;
|
|
2384
|
-
for (let i = 0; i < verifyArgs.length; i++) {
|
|
2385
|
-
const arg = verifyArgs[i];
|
|
2386
|
-
if (!arg)
|
|
2387
|
-
continue;
|
|
2388
|
-
if (arg === "--cwd") {
|
|
2389
|
-
const next = verifyArgs[i + 1];
|
|
2390
|
-
if (!next)
|
|
2391
|
-
throw new CliError({
|
|
2392
|
-
exitCode: 2,
|
|
2393
|
-
code: "E_USAGE",
|
|
2394
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2395
|
-
});
|
|
2396
|
-
cwdOverride = next;
|
|
2397
|
-
i++;
|
|
2398
|
-
continue;
|
|
2399
|
-
}
|
|
2400
|
-
if (arg === "--log") {
|
|
2401
|
-
const next = verifyArgs[i + 1];
|
|
2402
|
-
if (!next)
|
|
2403
|
-
throw new CliError({
|
|
2404
|
-
exitCode: 2,
|
|
2405
|
-
code: "E_USAGE",
|
|
2406
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2407
|
-
});
|
|
2408
|
-
logPath = next;
|
|
2409
|
-
i++;
|
|
2410
|
-
continue;
|
|
2411
|
-
}
|
|
2412
|
-
if (arg === "--skip-if-unchanged") {
|
|
2413
|
-
skipIfUnchanged = true;
|
|
2414
|
-
continue;
|
|
2415
|
-
}
|
|
2416
|
-
if (arg === "--quiet") {
|
|
2417
|
-
quiet = true;
|
|
2418
|
-
continue;
|
|
2419
|
-
}
|
|
2420
|
-
if (arg === "--require") {
|
|
2421
|
-
require = true;
|
|
2422
|
-
continue;
|
|
2423
|
-
}
|
|
2424
|
-
if (arg === "--yes") {
|
|
2425
|
-
yes = true;
|
|
2426
|
-
continue;
|
|
2427
|
-
}
|
|
2428
|
-
if (arg.startsWith("--")) {
|
|
2429
|
-
throw new CliError({
|
|
2430
|
-
exitCode: 2,
|
|
2431
|
-
code: "E_USAGE",
|
|
2432
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2433
|
-
});
|
|
2434
|
-
}
|
|
2435
|
-
}
|
|
2436
2387
|
return await cmdVerify({
|
|
2437
2388
|
cwd: process.cwd(),
|
|
2438
2389
|
rootOverride: globals.root,
|
|
2439
2390
|
taskId,
|
|
2440
|
-
|
|
2441
|
-
logPath,
|
|
2442
|
-
skipIfUnchanged,
|
|
2443
|
-
quiet,
|
|
2444
|
-
require,
|
|
2445
|
-
yes,
|
|
2391
|
+
args: verifyArgs,
|
|
2446
2392
|
});
|
|
2447
2393
|
}
|
|
2448
2394
|
if (namespace === "integrate") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/backend.js
CHANGED
|
@@ -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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/branch/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/branch/index.ts"],"names":[],"mappings":"AAoCA,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,iBAAiB,2EAC4C,CAAC;AAC3E,eAAO,MAAM,yBAAyB,yCAAyC,CAAC;AAChF,eAAO,MAAM,mBAAmB,sEACqC,CAAC;AACtE,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AAClF,eAAO,MAAM,mBAAmB,8FAC6D,CAAC;AAC9F,eAAO,MAAM,2BAA2B,iGACwD,CAAC;AACjG,eAAO,MAAM,gBAAgB,mFACqD,CAAC;AACnF,eAAO,MAAM,wBAAwB,kFAC4C,CAAC;AAClF,eAAO,MAAM,oBAAoB,mFACiD,CAAC;AACnF,eAAO,MAAM,4BAA4B,oCAAoC,CAAC;AAoD9E,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4GlB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8IlB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlB;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDlB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4DlB"}
|
|
@@ -13,6 +13,7 @@ import { gitBranchExists, gitCurrentBranch } from "../shared/git-ops.js";
|
|
|
13
13
|
import { findWorktreeForBranch, gitListTaskBranches, parseTaskIdFromBranch, } from "../shared/git-worktree.js";
|
|
14
14
|
import { isPathWithin, resolvePathFallback } from "../shared/path.js";
|
|
15
15
|
import { loadBackendTask } from "../shared/task-backend.js";
|
|
16
|
+
import { ensurePlanApprovedIfRequired } from "../task/shared.js";
|
|
16
17
|
export { gitInitRepo, resolveInitBaseBranch, promptInitBaseBranch, ensureInitCommit, } from "../shared/git-ops.js";
|
|
17
18
|
export const BRANCH_BASE_USAGE = "Usage: agentplane branch base get|set|clear|explain [<name>|--current]";
|
|
18
19
|
export const BRANCH_BASE_USAGE_EXAMPLE = "agentplane branch base set --current";
|
|
@@ -89,11 +90,12 @@ export async function cmdWorkStart(opts) {
|
|
|
89
90
|
message: usageMessage(WORK_START_USAGE, WORK_START_USAGE_EXAMPLE),
|
|
90
91
|
});
|
|
91
92
|
}
|
|
92
|
-
await loadBackendTask({
|
|
93
|
+
const { task } = await loadBackendTask({
|
|
93
94
|
cwd: opts.cwd,
|
|
94
95
|
rootOverride: opts.rootOverride,
|
|
95
96
|
taskId: opts.taskId,
|
|
96
97
|
});
|
|
98
|
+
ensurePlanApprovedIfRequired(task, loaded.config);
|
|
97
99
|
const currentBranch = await gitCurrentBranch(resolved.gitRoot);
|
|
98
100
|
let baseRef = currentBranch;
|
|
99
101
|
if (mode === "branch_pr") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pr/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pr/index.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,aAAa,wEAAwE,CAAC;AACnG,eAAO,MAAM,qBAAqB,0DAA0D,CAAC;AAC7F,eAAO,MAAM,eAAe,0CAA0C,CAAC;AACvE,eAAO,MAAM,uBAAuB,6CAA6C,CAAC;AAClF,eAAO,MAAM,cAAc,yCAAyC,CAAC;AACrE,eAAO,MAAM,sBAAsB,4CAA4C,CAAC;AAChF,eAAO,MAAM,aAAa,oEAAoE,CAAC;AAC/F,eAAO,MAAM,qBAAqB,4EACuC,CAAC;AAC1E,eAAO,MAAM,eAAe,wJAC2H,CAAC;AACxJ,eAAO,MAAM,uBAAuB,0DAA0D,CAAC;AA2H/F,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoElB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyFlB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgElB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAogBlB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { mkdir, readFile
|
|
1
|
+
import { mkdir, readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { loadConfig, resolveBaseBranch, resolveProject, } from "@agentplaneorg/core";
|
|
3
|
+
import { atomicWriteFile, loadConfig, resolveBaseBranch, resolveProject, } from "@agentplaneorg/core";
|
|
4
4
|
import { mapBackendError, mapCoreError } from "../../cli/error-map.js";
|
|
5
5
|
import { fileExists } from "../../cli/fs-utils.js";
|
|
6
6
|
import { successMessage, unknownEntityMessage, usageMessage, workflowModeMessage, } from "../../cli/output.js";
|
|
@@ -14,6 +14,7 @@ import { appendVerifyLog, extractLastVerifiedSha, parsePrMeta, runShellCommand,
|
|
|
14
14
|
import { isPathWithin } from "../shared/path.js";
|
|
15
15
|
import { loadBackendTask } from "../shared/task-backend.js";
|
|
16
16
|
import { cmdFinish } from "../task/index.js";
|
|
17
|
+
import { ensurePlanApprovedIfRequired, ensureVerificationSatisfiedIfRequired, } from "../task/shared.js";
|
|
17
18
|
export const PR_OPEN_USAGE = "Usage: agentplane pr open <task-id> --author <id> [--branch <name>]";
|
|
18
19
|
export const PR_OPEN_USAGE_EXAMPLE = "agentplane pr open 202602030608-F1Q8AB --author CODER";
|
|
19
20
|
export const PR_UPDATE_USAGE = "Usage: agentplane pr update <task-id>";
|
|
@@ -167,14 +168,14 @@ export async function cmdPrOpen(opts) {
|
|
|
167
168
|
last_verified_at: meta?.last_verified_at ?? null,
|
|
168
169
|
verify: meta?.verify ?? { status: "skipped" },
|
|
169
170
|
};
|
|
170
|
-
await
|
|
171
|
+
await atomicWriteFile(metaPath, `${JSON.stringify(nextMeta, null, 2)}\n`, "utf8");
|
|
171
172
|
if (!(await fileExists(diffstatPath)))
|
|
172
|
-
await
|
|
173
|
+
await atomicWriteFile(diffstatPath, "", "utf8");
|
|
173
174
|
if (!(await fileExists(verifyLogPath)))
|
|
174
|
-
await
|
|
175
|
+
await atomicWriteFile(verifyLogPath, "", "utf8");
|
|
175
176
|
if (!(await fileExists(reviewPath))) {
|
|
176
177
|
const review = renderPrReviewTemplate({ author, createdAt, branch });
|
|
177
|
-
await
|
|
178
|
+
await atomicWriteFile(reviewPath, review, "utf8");
|
|
178
179
|
}
|
|
179
180
|
process.stdout.write(`${successMessage("pr open", path.relative(resolved.gitRoot, prDir))}\n`);
|
|
180
181
|
return 0;
|
|
@@ -228,7 +229,7 @@ export async function cmdPrUpdate(opts) {
|
|
|
228
229
|
const branch = await gitCurrentBranch(resolved.gitRoot);
|
|
229
230
|
const { stdout: diffStatOut } = await execFileAsync("git", ["diff", "--stat", `${baseBranch}...HEAD`], { cwd: resolved.gitRoot, env: gitEnv() });
|
|
230
231
|
const diffstat = diffStatOut.trimEnd();
|
|
231
|
-
await
|
|
232
|
+
await atomicWriteFile(diffstatPath, diffstat ? `${diffstat}\n` : "", "utf8");
|
|
232
233
|
const { stdout: headOut } = await execFileAsync("git", ["rev-parse", "HEAD"], {
|
|
233
234
|
cwd: resolved.gitRoot,
|
|
234
235
|
env: gitEnv(),
|
|
@@ -245,7 +246,7 @@ export async function cmdPrUpdate(opts) {
|
|
|
245
246
|
];
|
|
246
247
|
const reviewText = await readFile(reviewPath, "utf8");
|
|
247
248
|
const nextReview = updateAutoSummaryBlock(reviewText, summaryLines.join("\n"));
|
|
248
|
-
await
|
|
249
|
+
await atomicWriteFile(reviewPath, nextReview, "utf8");
|
|
249
250
|
const rawMeta = await readFile(metaPath, "utf8");
|
|
250
251
|
const meta = parsePrMeta(rawMeta, opts.taskId);
|
|
251
252
|
const nextMeta = {
|
|
@@ -255,7 +256,7 @@ export async function cmdPrUpdate(opts) {
|
|
|
255
256
|
last_verified_sha: meta.last_verified_sha ?? null,
|
|
256
257
|
last_verified_at: meta.last_verified_at ?? null,
|
|
257
258
|
};
|
|
258
|
-
await
|
|
259
|
+
await atomicWriteFile(metaPath, `${JSON.stringify(nextMeta, null, 2)}\n`, "utf8");
|
|
259
260
|
process.stdout.write(`${successMessage("pr update", path.relative(resolved.gitRoot, prDir))}\n`);
|
|
260
261
|
return 0;
|
|
261
262
|
}
|
|
@@ -359,7 +360,7 @@ export async function cmdPrNote(opts) {
|
|
|
359
360
|
}
|
|
360
361
|
const review = await readFile(reviewPath, "utf8");
|
|
361
362
|
const updated = appendHandoffNote(review, `${author}: ${body}`);
|
|
362
|
-
await
|
|
363
|
+
await atomicWriteFile(reviewPath, updated, "utf8");
|
|
363
364
|
process.stdout.write(`${successMessage("pr note", opts.taskId)}\n`);
|
|
364
365
|
return 0;
|
|
365
366
|
}
|
|
@@ -390,6 +391,8 @@ export async function cmdIntegrate(opts) {
|
|
|
390
391
|
message: workflowModeMessage(loaded.config.workflow_mode, "branch_pr"),
|
|
391
392
|
});
|
|
392
393
|
}
|
|
394
|
+
ensurePlanApprovedIfRequired(task, loaded.config);
|
|
395
|
+
ensureVerificationSatisfiedIfRequired(task, loaded.config);
|
|
393
396
|
await ensureGitClean({ cwd: opts.cwd, rootOverride: opts.rootOverride });
|
|
394
397
|
if (opts.base?.trim().length === 0) {
|
|
395
398
|
throw new CliError({
|
|
@@ -793,9 +796,9 @@ export async function cmdIntegrate(opts) {
|
|
|
793
796
|
? { ...mergedMeta.verify, status: "pass" }
|
|
794
797
|
: { status: "pass", command: verifyCommands.join(" && ") };
|
|
795
798
|
}
|
|
796
|
-
await
|
|
799
|
+
await atomicWriteFile(metaPath, `${JSON.stringify(nextMeta, null, 2)}\n`, "utf8");
|
|
797
800
|
const diffstat = await gitDiffStat(resolved.gitRoot, baseShaBeforeMerge, branch);
|
|
798
|
-
await
|
|
801
|
+
await atomicWriteFile(diffstatPath, diffstat ? `${diffstat}\n` : "", "utf8");
|
|
799
802
|
const verifyDesc = verifyCommands.length === 0
|
|
800
803
|
? "skipped(no commands)"
|
|
801
804
|
: shouldRunVerify
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/commands/recipes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/commands/recipes.ts"],"names":[],"mappings":"AAinEA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyGlB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDlB"}
|