agentplane 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/AGENTS.md +1 -1
- package/assets/agents/ORCHESTRATOR.json +1 -1
- package/assets/agents/UPGRADER.json +1 -1
- 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 +39 -78
- package/dist/commands/backend.d.ts.map +1 -1
- package/dist/commands/backend.js +17 -2
- package/dist/commands/branch/index.d.ts +60 -0
- package/dist/commands/branch/index.d.ts.map +1 -0
- package/dist/commands/branch/index.js +513 -0
- package/dist/commands/guard/index.d.ts +67 -0
- package/dist/commands/guard/index.d.ts.map +1 -0
- package/dist/commands/guard/index.js +367 -0
- package/dist/commands/hooks/index.d.ts +18 -0
- package/dist/commands/hooks/index.d.ts.map +1 -0
- package/dist/commands/hooks/index.js +290 -0
- package/dist/commands/pr/index.d.ts +46 -0
- package/dist/commands/pr/index.d.ts.map +1 -0
- package/dist/commands/pr/index.js +857 -0
- package/dist/commands/recipes.d.ts.map +1 -1
- package/dist/commands/recipes.js +67 -23
- package/dist/commands/shared/git-diff.d.ts +9 -0
- package/dist/commands/shared/git-diff.d.ts.map +1 -0
- package/dist/commands/shared/git-diff.js +41 -0
- package/dist/commands/shared/git-ops.d.ts +24 -0
- package/dist/commands/shared/git-ops.d.ts.map +1 -0
- package/dist/commands/shared/git-ops.js +181 -0
- package/dist/commands/shared/git-worktree.d.ts +8 -0
- package/dist/commands/shared/git-worktree.d.ts.map +1 -0
- package/dist/commands/shared/git-worktree.js +48 -0
- package/dist/commands/shared/git.d.ts +4 -0
- package/dist/commands/shared/git.d.ts.map +1 -0
- package/dist/commands/shared/git.js +14 -0
- 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/path.d.ts +3 -0
- package/dist/commands/shared/path.d.ts.map +1 -0
- package/dist/commands/shared/path.js +14 -0
- package/dist/commands/shared/pr-meta.d.ts +21 -0
- package/dist/commands/shared/pr-meta.d.ts.map +1 -0
- package/dist/commands/shared/pr-meta.js +72 -0
- package/dist/commands/shared/task-backend.d.ts +15 -0
- package/dist/commands/shared/task-backend.d.ts.map +1 -0
- package/dist/commands/shared/task-backend.js +61 -0
- package/dist/commands/task/add.d.ts +8 -0
- package/dist/commands/task/add.d.ts.map +1 -0
- package/dist/commands/task/add.js +164 -0
- package/dist/commands/task/block.d.ts +19 -0
- package/dist/commands/task/block.d.ts.map +1 -0
- package/dist/commands/task/block.js +86 -0
- package/dist/commands/task/comment.d.ts +8 -0
- package/dist/commands/task/comment.d.ts.map +1 -0
- package/dist/commands/task/comment.js +29 -0
- package/dist/commands/task/doc.d.ts +17 -0
- package/dist/commands/task/doc.d.ts.map +1 -0
- package/dist/commands/task/doc.js +220 -0
- package/dist/commands/task/export.d.ts +5 -0
- package/dist/commands/task/export.d.ts.map +1 -0
- package/dist/commands/task/export.js +27 -0
- package/dist/commands/task/finish.d.ts +27 -0
- package/dist/commands/task/finish.d.ts.map +1 -0
- package/dist/commands/task/finish.js +132 -0
- package/dist/commands/task/index.d.ts +26 -0
- package/dist/commands/task/index.d.ts.map +1 -0
- package/dist/commands/task/index.js +25 -0
- package/dist/commands/task/lint.d.ts +5 -0
- package/dist/commands/task/lint.d.ts.map +1 -0
- package/dist/commands/task/lint.js +22 -0
- package/dist/commands/task/list.d.ts +11 -0
- package/dist/commands/task/list.d.ts.map +1 -0
- package/dist/commands/task/list.js +54 -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/migrate.d.ts +6 -0
- package/dist/commands/task/migrate.d.ts.map +1 -0
- package/dist/commands/task/migrate.js +70 -0
- package/dist/commands/task/new.d.ts +8 -0
- package/dist/commands/task/new.d.ts.map +1 -0
- package/dist/commands/task/new.js +117 -0
- package/dist/commands/task/next.d.ts +6 -0
- package/dist/commands/task/next.d.ts.map +1 -0
- package/dist/commands/task/next.js +45 -0
- package/dist/commands/task/normalize.d.ts +6 -0
- package/dist/commands/task/normalize.d.ts.map +1 -0
- package/dist/commands/task/normalize.js +46 -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/ready.d.ts +6 -0
- package/dist/commands/task/ready.d.ts.map +1 -0
- package/dist/commands/task/ready.js +57 -0
- package/dist/commands/task/scaffold.d.ts +8 -0
- package/dist/commands/task/scaffold.d.ts.map +1 -0
- package/dist/commands/task/scaffold.js +142 -0
- package/dist/commands/task/scrub.d.ts +8 -0
- package/dist/commands/task/scrub.d.ts.map +1 -0
- package/dist/commands/task/scrub.js +121 -0
- package/dist/commands/task/search.d.ts +7 -0
- package/dist/commands/task/search.d.ts.map +1 -0
- package/dist/commands/task/search.js +79 -0
- package/dist/commands/task/set-status.d.ts +19 -0
- package/dist/commands/task/set-status.d.ts.map +1 -0
- package/dist/commands/task/set-status.js +123 -0
- package/dist/commands/task/shared.d.ts +48 -0
- package/dist/commands/task/shared.d.ts.map +1 -0
- package/dist/commands/task/shared.js +312 -0
- package/dist/commands/task/show.d.ts +6 -0
- package/dist/commands/task/show.d.ts.map +1 -0
- package/dist/commands/task/show.js +35 -0
- package/dist/commands/task/start.d.ts +19 -0
- package/dist/commands/task/start.d.ts.map +1 -0
- package/dist/commands/task/start.js +110 -0
- package/dist/commands/task/update.d.ts +8 -0
- package/dist/commands/task/update.d.ts.map +1 -0
- package/dist/commands/task/update.js +144 -0
- 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 +2 -0
- package/dist/commands/task/verify.d.ts.map +1 -0
- package/dist/commands/task/verify.js +1 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +17 -2
- package/dist/commands/workflow.d.ts +5 -364
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +6 -4617
- package/package.json +2 -2
package/assets/AGENTS.md
CHANGED
|
@@ -41,7 +41,7 @@ No other role may assume another role’s authority.
|
|
|
41
41
|
## Truthfulness & safety
|
|
42
42
|
|
|
43
43
|
- Never invent facts about repo state. Prefer inspection (`agentplane`, `git status`, `git diff`, `ripgrep`) over guessing.
|
|
44
|
-
- Never modify `.agentplane/tasks.json` manually. It is **
|
|
44
|
+
- Never modify `.agentplane/tasks.json` manually. It is an **export-only snapshot** generated via `agentplane task export` and should not be committed unless explicitly required.
|
|
45
45
|
- Task status transitions, task docs, and commits must follow **agentplane** flows where available.
|
|
46
46
|
|
|
47
47
|
## Cleanliness & untracked files
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"workflow": [
|
|
16
16
|
"Follow shared workflow rules in AGENTS.md and `agentplane quickstart` / `agentplane role <ROLE>` output.",
|
|
17
17
|
"Before planning or execution, load .agentplane/config.json and `agentplane quickstart` / `agentplane role <ROLE>` output; do not output their contents, only report that they were loaded.",
|
|
18
|
-
"Use `agentplane config show|set` for config changes (workflow_mode,
|
|
18
|
+
"Use `agentplane config show|set` for config changes (workflow_mode, branch/task settings); avoid manual edits.",
|
|
19
19
|
"Convert the first user message into a top-level plan; do not create tasks until the user approves it.",
|
|
20
20
|
"Restate the user goal and constraints, then draft a numbered top-level plan with agent assignments and expected outcomes.",
|
|
21
21
|
"Decompose the top-level plan into atomic tasks, assign each to an existing agent ID, and schedule CREATOR if a required agent is missing.",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"Follow shared workflow rules in AGENTS.md and `agentplane quickstart` / `agentplane role <ROLE>` output.",
|
|
22
22
|
"Check the `framework.last_update` date from `.agentplane/config.json`; compare it to UTC today and detect when 10+ days have passed.",
|
|
23
23
|
"Invoke `agentplane upgrade --force` when a user explicitly requests an update, or rely on the stale-date logic otherwise.",
|
|
24
|
-
"Require a clean working tree and run the upgrade from the pinned base branch (
|
|
24
|
+
"Require a clean working tree and run the upgrade from the pinned base branch (or current branch when unpinned in branch_pr).",
|
|
25
25
|
"After a successful upgrade, update `framework.last_update` to `datetime.now(UTC).date()` and document the run in the owning task/pr artifacts."
|
|
26
26
|
]
|
|
27
27
|
}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { type AgentplaneConfig, type ResolvedProject, type TaskRecord } from "@agentplaneorg/core";
|
|
2
|
+
export type PlanApprovalState = "pending" | "approved" | "rejected";
|
|
3
|
+
export type PlanApproval = {
|
|
4
|
+
state: PlanApprovalState;
|
|
5
|
+
updated_at: string | null;
|
|
6
|
+
updated_by: string | null;
|
|
7
|
+
note: string | null;
|
|
8
|
+
};
|
|
9
|
+
export type VerificationState = "pending" | "ok" | "needs_rework";
|
|
10
|
+
export type VerificationResult = {
|
|
11
|
+
state: VerificationState;
|
|
12
|
+
updated_at: string | null;
|
|
13
|
+
updated_by: string | null;
|
|
14
|
+
note: string | null;
|
|
15
|
+
};
|
|
2
16
|
type ExtractTaskDoc = (body: string) => string;
|
|
3
17
|
type MergeTaskDoc = (body: string, doc: string) => string;
|
|
4
18
|
declare const extractTaskDoc: ExtractTaskDoc;
|
|
@@ -14,6 +28,8 @@ export type TaskData = {
|
|
|
14
28
|
depends_on: string[];
|
|
15
29
|
tags: string[];
|
|
16
30
|
verify: string[];
|
|
31
|
+
plan_approval?: PlanApproval;
|
|
32
|
+
verification?: VerificationResult;
|
|
17
33
|
commit?: {
|
|
18
34
|
hash: string;
|
|
19
35
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.ts"],"names":[],"mappings":"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, 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) {
|
|
@@ -535,7 +535,7 @@ async function cmdInit(opts) {
|
|
|
535
535
|
const existingGitRoot = await findGitRoot(initRoot);
|
|
536
536
|
const gitRootExisted = Boolean(existingGitRoot);
|
|
537
537
|
let gitRoot = existingGitRoot;
|
|
538
|
-
const baseBranchFallback =
|
|
538
|
+
const baseBranchFallback = "main";
|
|
539
539
|
if (!gitRoot) {
|
|
540
540
|
await gitInitRepo(initRoot, baseBranchFallback);
|
|
541
541
|
gitRoot = initRoot;
|
|
@@ -605,7 +605,6 @@ async function cmdInit(opts) {
|
|
|
605
605
|
await mkdir(path.join(resolved.agentplaneDir, "backends", "local"), { recursive: true });
|
|
606
606
|
await mkdir(path.join(resolved.agentplaneDir, "backends", "redmine"), { recursive: true });
|
|
607
607
|
const rawConfig = defaultConfig();
|
|
608
|
-
setByDottedKey(rawConfig, "base_branch", initBaseBranch);
|
|
609
608
|
setByDottedKey(rawConfig, "workflow_mode", workflow);
|
|
610
609
|
setByDottedKey(rawConfig, "tasks_backend.config_path", path.relative(resolved.gitRoot, backendPath));
|
|
611
610
|
setByDottedKey(rawConfig, "agents.approvals.require_plan", String(requirePlanApproval));
|
|
@@ -632,8 +631,8 @@ async function cmdInit(opts) {
|
|
|
632
631
|
custom_fields: { task_id: 1 },
|
|
633
632
|
},
|
|
634
633
|
};
|
|
635
|
-
await
|
|
636
|
-
await
|
|
634
|
+
await atomicWriteFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
|
|
635
|
+
await atomicWriteFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
|
|
637
636
|
const agentsPath = path.join(resolved.gitRoot, "AGENTS.md");
|
|
638
637
|
const installPaths = [
|
|
639
638
|
path.relative(resolved.gitRoot, configPath),
|
|
@@ -643,7 +642,7 @@ async function cmdInit(opts) {
|
|
|
643
642
|
if (!(await fileExists(agentsPath))) {
|
|
644
643
|
const template = await loadAgentsTemplate();
|
|
645
644
|
const filtered = filterAgentsByWorkflow(template, workflow);
|
|
646
|
-
await
|
|
645
|
+
await atomicWriteFile(agentsPath, filtered, "utf8");
|
|
647
646
|
wroteAgents = true;
|
|
648
647
|
}
|
|
649
648
|
if (wroteAgents) {
|
|
@@ -654,7 +653,7 @@ async function cmdInit(opts) {
|
|
|
654
653
|
const targetPath = path.join(resolved.agentplaneDir, "agents", agent.fileName);
|
|
655
654
|
if (await fileExists(targetPath))
|
|
656
655
|
continue;
|
|
657
|
-
await
|
|
656
|
+
await atomicWriteFile(targetPath, agent.contents, "utf8");
|
|
658
657
|
installPaths.push(path.relative(resolved.gitRoot, targetPath));
|
|
659
658
|
}
|
|
660
659
|
if (hooks) {
|
|
@@ -1011,6 +1010,9 @@ export async function runCli(argv) {
|
|
|
1011
1010
|
if (namespace === "task" && command === "migrate") {
|
|
1012
1011
|
return await cmdTaskMigrate({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1013
1012
|
}
|
|
1013
|
+
if (namespace === "task" && command === "migrate-doc") {
|
|
1014
|
+
return await cmdTaskMigrateDoc({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1015
|
+
}
|
|
1014
1016
|
if (namespace === "task" && command === "export") {
|
|
1015
1017
|
return await cmdTaskExport({ cwd: process.cwd(), rootOverride: globals.root });
|
|
1016
1018
|
}
|
|
@@ -1055,6 +1057,12 @@ export async function runCli(argv) {
|
|
|
1055
1057
|
message: usageMessage(TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE),
|
|
1056
1058
|
});
|
|
1057
1059
|
}
|
|
1060
|
+
if (namespace === "task" && command === "plan") {
|
|
1061
|
+
return await cmdTaskPlan({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1062
|
+
}
|
|
1063
|
+
if (namespace === "task" && command === "verify") {
|
|
1064
|
+
return await cmdTaskVerify({ cwd: process.cwd(), rootOverride: globals.root, args });
|
|
1065
|
+
}
|
|
1058
1066
|
if (namespace === "task" && command === "comment") {
|
|
1059
1067
|
const [taskId, ...restArgs] = args;
|
|
1060
1068
|
if (!taskId) {
|
|
@@ -1261,12 +1269,21 @@ export async function runCli(argv) {
|
|
|
1261
1269
|
}
|
|
1262
1270
|
if (namespace === "branch") {
|
|
1263
1271
|
if (command === "base") {
|
|
1264
|
-
const [subcommand,
|
|
1272
|
+
const [subcommand, ...rest] = args;
|
|
1265
1273
|
if (subcommand === "get") {
|
|
1266
1274
|
return await cmdBranchBaseGet({ cwd: process.cwd(), rootOverride: globals.root });
|
|
1267
1275
|
}
|
|
1268
1276
|
if (subcommand === "set") {
|
|
1269
|
-
|
|
1277
|
+
const useCurrent = rest.includes("--current");
|
|
1278
|
+
const value = rest.find((entry) => entry && entry !== "--current");
|
|
1279
|
+
if (useCurrent && value) {
|
|
1280
|
+
throw new CliError({
|
|
1281
|
+
exitCode: 2,
|
|
1282
|
+
code: "E_USAGE",
|
|
1283
|
+
message: usageMessage(BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE),
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
if (!value && !useCurrent) {
|
|
1270
1287
|
throw new CliError({
|
|
1271
1288
|
exitCode: 2,
|
|
1272
1289
|
code: "E_USAGE",
|
|
@@ -1277,8 +1294,15 @@ export async function runCli(argv) {
|
|
|
1277
1294
|
cwd: process.cwd(),
|
|
1278
1295
|
rootOverride: globals.root,
|
|
1279
1296
|
value,
|
|
1297
|
+
useCurrent,
|
|
1280
1298
|
});
|
|
1281
1299
|
}
|
|
1300
|
+
if (subcommand === "clear") {
|
|
1301
|
+
return await cmdBranchBaseClear({ cwd: process.cwd(), rootOverride: globals.root });
|
|
1302
|
+
}
|
|
1303
|
+
if (subcommand === "explain") {
|
|
1304
|
+
return await cmdBranchBaseExplain({ cwd: process.cwd(), rootOverride: globals.root });
|
|
1305
|
+
}
|
|
1282
1306
|
throw new CliError({
|
|
1283
1307
|
exitCode: 2,
|
|
1284
1308
|
code: "E_USAGE",
|
|
@@ -1445,7 +1469,7 @@ export async function runCli(argv) {
|
|
|
1445
1469
|
message: usageMessage(WORK_START_USAGE, WORK_START_USAGE_EXAMPLE),
|
|
1446
1470
|
});
|
|
1447
1471
|
}
|
|
1448
|
-
if (!agent || !slug
|
|
1472
|
+
if (!agent || !slug) {
|
|
1449
1473
|
throw new CliError({
|
|
1450
1474
|
exitCode: 2,
|
|
1451
1475
|
code: "E_USAGE",
|
|
@@ -2360,74 +2384,11 @@ export async function runCli(argv) {
|
|
|
2360
2384
|
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2361
2385
|
});
|
|
2362
2386
|
}
|
|
2363
|
-
let cwdOverride;
|
|
2364
|
-
let logPath;
|
|
2365
|
-
let skipIfUnchanged = false;
|
|
2366
|
-
let quiet = false;
|
|
2367
|
-
let require = false;
|
|
2368
|
-
let yes = false;
|
|
2369
|
-
for (let i = 0; i < verifyArgs.length; i++) {
|
|
2370
|
-
const arg = verifyArgs[i];
|
|
2371
|
-
if (!arg)
|
|
2372
|
-
continue;
|
|
2373
|
-
if (arg === "--cwd") {
|
|
2374
|
-
const next = verifyArgs[i + 1];
|
|
2375
|
-
if (!next)
|
|
2376
|
-
throw new CliError({
|
|
2377
|
-
exitCode: 2,
|
|
2378
|
-
code: "E_USAGE",
|
|
2379
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2380
|
-
});
|
|
2381
|
-
cwdOverride = next;
|
|
2382
|
-
i++;
|
|
2383
|
-
continue;
|
|
2384
|
-
}
|
|
2385
|
-
if (arg === "--log") {
|
|
2386
|
-
const next = verifyArgs[i + 1];
|
|
2387
|
-
if (!next)
|
|
2388
|
-
throw new CliError({
|
|
2389
|
-
exitCode: 2,
|
|
2390
|
-
code: "E_USAGE",
|
|
2391
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2392
|
-
});
|
|
2393
|
-
logPath = next;
|
|
2394
|
-
i++;
|
|
2395
|
-
continue;
|
|
2396
|
-
}
|
|
2397
|
-
if (arg === "--skip-if-unchanged") {
|
|
2398
|
-
skipIfUnchanged = true;
|
|
2399
|
-
continue;
|
|
2400
|
-
}
|
|
2401
|
-
if (arg === "--quiet") {
|
|
2402
|
-
quiet = true;
|
|
2403
|
-
continue;
|
|
2404
|
-
}
|
|
2405
|
-
if (arg === "--require") {
|
|
2406
|
-
require = true;
|
|
2407
|
-
continue;
|
|
2408
|
-
}
|
|
2409
|
-
if (arg === "--yes") {
|
|
2410
|
-
yes = true;
|
|
2411
|
-
continue;
|
|
2412
|
-
}
|
|
2413
|
-
if (arg.startsWith("--")) {
|
|
2414
|
-
throw new CliError({
|
|
2415
|
-
exitCode: 2,
|
|
2416
|
-
code: "E_USAGE",
|
|
2417
|
-
message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
|
|
2418
|
-
});
|
|
2419
|
-
}
|
|
2420
|
-
}
|
|
2421
2387
|
return await cmdVerify({
|
|
2422
2388
|
cwd: process.cwd(),
|
|
2423
2389
|
rootOverride: globals.root,
|
|
2424
2390
|
taskId,
|
|
2425
|
-
|
|
2426
|
-
logPath,
|
|
2427
|
-
skipIfUnchanged,
|
|
2428
|
-
quiet,
|
|
2429
|
-
require,
|
|
2430
|
-
yes,
|
|
2391
|
+
args: verifyArgs,
|
|
2431
2392
|
});
|
|
2432
2393
|
}
|
|
2433
2394
|
if (namespace === "integrate") {
|
|
@@ -2542,7 +2503,7 @@ export async function runCli(argv) {
|
|
|
2542
2503
|
continue;
|
|
2543
2504
|
if (arg === "--base") {
|
|
2544
2505
|
const next = args[i + 1];
|
|
2545
|
-
if (!next)
|
|
2506
|
+
if (!next || next.trim().length === 0)
|
|
2546
2507
|
throw new CliError({
|
|
2547
2508
|
exitCode: 2,
|
|
2548
2509
|
code: "E_USAGE",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"
|
|
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,
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export { gitInitRepo, resolveInitBaseBranch, promptInitBaseBranch, ensureInitCommit, } from "../shared/git-ops.js";
|
|
2
|
+
export declare const BRANCH_BASE_USAGE = "Usage: agentplane branch base get|set|clear|explain [<name>|--current]";
|
|
3
|
+
export declare const BRANCH_BASE_USAGE_EXAMPLE = "agentplane branch base set --current";
|
|
4
|
+
export declare const BRANCH_STATUS_USAGE = "Usage: agentplane branch status [--branch <name>] [--base <name>]";
|
|
5
|
+
export declare const BRANCH_STATUS_USAGE_EXAMPLE = "agentplane branch status --base main";
|
|
6
|
+
export declare const BRANCH_REMOVE_USAGE = "Usage: agentplane branch remove [--branch <name>] [--worktree <path>] [--force] [--quiet]";
|
|
7
|
+
export declare const BRANCH_REMOVE_USAGE_EXAMPLE = "agentplane branch remove --branch task/20260203-F1Q8AB --worktree .agentplane/worktrees/task";
|
|
8
|
+
export declare const WORK_START_USAGE = "Usage: agentplane work start <task-id> --agent <id> --slug <slug> [--worktree]";
|
|
9
|
+
export declare const WORK_START_USAGE_EXAMPLE = "agentplane work start 202602030608-F1Q8AB --agent CODER --slug cli --worktree";
|
|
10
|
+
export declare const CLEANUP_MERGED_USAGE = "Usage: agentplane cleanup merged [--base <name>] [--yes] [--archive] [--quiet]";
|
|
11
|
+
export declare const CLEANUP_MERGED_USAGE_EXAMPLE = "agentplane cleanup merged --yes";
|
|
12
|
+
export declare function cmdWorkStart(opts: {
|
|
13
|
+
cwd: string;
|
|
14
|
+
rootOverride?: string;
|
|
15
|
+
taskId: string;
|
|
16
|
+
agent: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
worktree: boolean;
|
|
19
|
+
}): Promise<number>;
|
|
20
|
+
export declare function cmdCleanupMerged(opts: {
|
|
21
|
+
cwd: string;
|
|
22
|
+
rootOverride?: string;
|
|
23
|
+
base?: string;
|
|
24
|
+
yes: boolean;
|
|
25
|
+
archive: boolean;
|
|
26
|
+
quiet: boolean;
|
|
27
|
+
}): Promise<number>;
|
|
28
|
+
export declare function cmdBranchBaseGet(opts: {
|
|
29
|
+
cwd: string;
|
|
30
|
+
rootOverride?: string;
|
|
31
|
+
}): Promise<number>;
|
|
32
|
+
export declare function cmdBranchBaseSet(opts: {
|
|
33
|
+
cwd: string;
|
|
34
|
+
rootOverride?: string;
|
|
35
|
+
value?: string;
|
|
36
|
+
useCurrent?: boolean;
|
|
37
|
+
}): Promise<number>;
|
|
38
|
+
export declare function cmdBranchBaseClear(opts: {
|
|
39
|
+
cwd: string;
|
|
40
|
+
rootOverride?: string;
|
|
41
|
+
}): Promise<number>;
|
|
42
|
+
export declare function cmdBranchBaseExplain(opts: {
|
|
43
|
+
cwd: string;
|
|
44
|
+
rootOverride?: string;
|
|
45
|
+
}): Promise<number>;
|
|
46
|
+
export declare function cmdBranchStatus(opts: {
|
|
47
|
+
cwd: string;
|
|
48
|
+
rootOverride?: string;
|
|
49
|
+
branch?: string;
|
|
50
|
+
base?: string;
|
|
51
|
+
}): Promise<number>;
|
|
52
|
+
export declare function cmdBranchRemove(opts: {
|
|
53
|
+
cwd: string;
|
|
54
|
+
rootOverride?: string;
|
|
55
|
+
branch?: string;
|
|
56
|
+
worktree?: string;
|
|
57
|
+
force: boolean;
|
|
58
|
+
quiet: boolean;
|
|
59
|
+
}): Promise<number>;
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|