agentplane 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/assets/AGENTS.md +13 -2
  2. package/dist/backends/task-backend.d.ts +28 -0
  3. package/dist/backends/task-backend.d.ts.map +1 -1
  4. package/dist/backends/task-backend.js +85 -4
  5. package/dist/backends/task-index.d.ts.map +1 -1
  6. package/dist/backends/task-index.js +3 -6
  7. package/dist/cli/command-guide.d.ts.map +1 -1
  8. package/dist/cli/command-guide.js +10 -11
  9. package/dist/cli/help.d.ts.map +1 -1
  10. package/dist/cli/help.js +7 -5
  11. package/dist/cli/run-cli.d.ts.map +1 -1
  12. package/dist/cli/run-cli.js +75 -74
  13. package/dist/commands/backend.d.ts.map +1 -1
  14. package/dist/commands/backend.js +17 -2
  15. package/dist/commands/branch/index.d.ts.map +1 -1
  16. package/dist/commands/branch/index.js +3 -1
  17. package/dist/commands/guard/index.d.ts +24 -3
  18. package/dist/commands/guard/index.d.ts.map +1 -1
  19. package/dist/commands/guard/index.js +175 -61
  20. package/dist/commands/hooks/index.d.ts.map +1 -1
  21. package/dist/commands/hooks/index.js +39 -29
  22. package/dist/commands/pr/index.d.ts.map +1 -1
  23. package/dist/commands/pr/index.js +15 -12
  24. package/dist/commands/recipes.d.ts +75 -6
  25. package/dist/commands/recipes.d.ts.map +1 -1
  26. package/dist/commands/recipes.js +76 -538
  27. package/dist/commands/scenario.d.ts +7 -0
  28. package/dist/commands/scenario.d.ts.map +1 -0
  29. package/dist/commands/scenario.js +501 -0
  30. package/dist/commands/shared/network-approval.d.ts +8 -0
  31. package/dist/commands/shared/network-approval.d.ts.map +1 -0
  32. package/dist/commands/shared/network-approval.js +25 -0
  33. package/dist/commands/shared/task-backend.d.ts +19 -3
  34. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  35. package/dist/commands/shared/task-backend.js +19 -5
  36. package/dist/commands/task/block.d.ts.map +1 -1
  37. package/dist/commands/task/block.js +22 -16
  38. package/dist/commands/task/comment.d.ts.map +1 -1
  39. package/dist/commands/task/comment.js +9 -2
  40. package/dist/commands/task/finish.d.ts.map +1 -1
  41. package/dist/commands/task/finish.js +36 -25
  42. package/dist/commands/task/index.d.ts +3 -0
  43. package/dist/commands/task/index.d.ts.map +1 -1
  44. package/dist/commands/task/index.js +3 -0
  45. package/dist/commands/task/migrate-doc.d.ts +8 -0
  46. package/dist/commands/task/migrate-doc.d.ts.map +1 -0
  47. package/dist/commands/task/migrate-doc.js +147 -0
  48. package/dist/commands/task/plan.d.ts +14 -0
  49. package/dist/commands/task/plan.d.ts.map +1 -0
  50. package/dist/commands/task/plan.js +217 -0
  51. package/dist/commands/task/scaffold.d.ts.map +1 -1
  52. package/dist/commands/task/scaffold.js +15 -4
  53. package/dist/commands/task/set-status.d.ts.map +1 -1
  54. package/dist/commands/task/set-status.js +18 -4
  55. package/dist/commands/task/shared.d.ts +5 -2
  56. package/dist/commands/task/shared.d.ts.map +1 -1
  57. package/dist/commands/task/shared.js +47 -28
  58. package/dist/commands/task/start.d.ts.map +1 -1
  59. package/dist/commands/task/start.js +24 -17
  60. package/dist/commands/task/verify-record.d.ts +16 -0
  61. package/dist/commands/task/verify-record.d.ts.map +1 -0
  62. package/dist/commands/task/verify-record.js +284 -0
  63. package/dist/commands/task/verify.d.ts +1 -13
  64. package/dist/commands/task/verify.d.ts.map +1 -1
  65. package/dist/commands/task/verify.js +1 -362
  66. package/dist/commands/upgrade.d.ts.map +1 -1
  67. package/dist/commands/upgrade.js +17 -2
  68. package/dist/commands/workflow.d.ts +1 -1
  69. package/dist/commands/workflow.d.ts.map +1 -1
  70. package/dist/commands/workflow.js +1 -1
  71. package/dist/shared/git-log.d.ts +5 -0
  72. package/dist/shared/git-log.d.ts.map +1 -0
  73. package/dist/shared/git-log.js +14 -0
  74. package/dist/shared/git-path.d.ts +3 -0
  75. package/dist/shared/git-path.d.ts.map +1 -0
  76. package/dist/shared/git-path.js +30 -0
  77. package/dist/shared/guards.d.ts +2 -0
  78. package/dist/shared/guards.d.ts.map +1 -0
  79. package/dist/shared/guards.js +3 -0
  80. package/dist/shared/protected-paths.d.ts +12 -0
  81. package/dist/shared/protected-paths.d.ts.map +1 -0
  82. package/dist/shared/protected-paths.js +51 -0
  83. package/dist/shared/strings.d.ts +2 -0
  84. package/dist/shared/strings.d.ts.map +1 -0
  85. package/dist/shared/strings.js +14 -0
  86. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
- import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
1
+ import { mkdir, readdir, readFile, rm } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import { defaultConfig, findGitRoot, getStagedFiles, loadConfig, resolveProject, saveConfig, setByDottedKey, } from "@agentplaneorg/core";
4
+ import { atomicWriteFile, defaultConfig, findGitRoot, getStagedFiles, loadConfig, resolveProject, saveConfig, setByDottedKey, } from "@agentplaneorg/core";
5
5
  import { renderHelp } from "./help.js";
6
6
  import { listRoles, renderQuickstart, renderRole } from "./command-guide.js";
7
7
  import { filterAgentsByWorkflow, loadAgentTemplates, loadAgentsTemplate, } from "../agents/agents-template.js";
@@ -16,8 +16,9 @@ import { CliError, formatJsonError } from "../shared/errors.js";
16
16
  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
- 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";
19
+ import { cmdRecipes } from "../commands/recipes.js";
20
+ import { cmdScenario } from "../commands/scenario.js";
21
+ 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
22
  function parseGlobalArgs(argv) {
22
23
  let help = false;
23
24
  let version = false;
@@ -232,7 +233,7 @@ async function writeFileIfChanged(filePath, content) {
232
233
  if (code !== "ENOENT")
233
234
  throw err;
234
235
  }
235
- await writeFile(filePath, content, "utf8");
236
+ await atomicWriteFile(filePath, content, "utf8");
236
237
  return true;
237
238
  }
238
239
  async function cmdConfigShow(opts) {
@@ -332,7 +333,7 @@ const TASK_SET_STATUS_USAGE_EXAMPLE = "agentplane task set-status 202602030608-F
332
333
  const PR_GROUP_USAGE = "Usage: agentplane pr open|update|check|note <task-id>";
333
334
  const PR_GROUP_USAGE_EXAMPLE = "agentplane pr open 202602030608-F1Q8AB --author CODER";
334
335
  const GUARD_USAGE = "Usage: agentplane guard <subcommand>";
335
- const GUARD_USAGE_EXAMPLE = 'agentplane guard commit 202602030608-F1Q8AB -m "✨ F1Q8AB update" --allow packages/agentplane';
336
+ const GUARD_USAGE_EXAMPLE = 'agentplane guard commit 202602030608-F1Q8AB -m "✨ F1Q8AB task: implement allowlist guard" --allow packages/agentplane';
336
337
  const HOOKS_RUN_USAGE = "Usage: agentplane hooks run <hook>";
337
338
  const HOOKS_RUN_USAGE_EXAMPLE = "agentplane hooks run pre-commit";
338
339
  const HOOKS_INSTALL_USAGE = "Usage: agentplane hooks install|uninstall";
@@ -631,8 +632,8 @@ async function cmdInit(opts) {
631
632
  custom_fields: { task_id: 1 },
632
633
  },
633
634
  };
634
- await writeFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
635
- await writeFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
635
+ await atomicWriteFile(localBackendPath, `${JSON.stringify(localBackendPayload, null, 2)}\n`, "utf8");
636
+ await atomicWriteFile(redmineBackendPath, `${JSON.stringify(redmineBackendPayload, null, 2)}\n`, "utf8");
636
637
  const agentsPath = path.join(resolved.gitRoot, "AGENTS.md");
637
638
  const installPaths = [
638
639
  path.relative(resolved.gitRoot, configPath),
@@ -642,7 +643,7 @@ async function cmdInit(opts) {
642
643
  if (!(await fileExists(agentsPath))) {
643
644
  const template = await loadAgentsTemplate();
644
645
  const filtered = filterAgentsByWorkflow(template, workflow);
645
- await writeFile(agentsPath, filtered, "utf8");
646
+ await atomicWriteFile(agentsPath, filtered, "utf8");
646
647
  wroteAgents = true;
647
648
  }
648
649
  if (wroteAgents) {
@@ -653,7 +654,7 @@ async function cmdInit(opts) {
653
654
  const targetPath = path.join(resolved.agentplaneDir, "agents", agent.fileName);
654
655
  if (await fileExists(targetPath))
655
656
  continue;
656
- await writeFile(targetPath, agent.contents, "utf8");
657
+ await atomicWriteFile(targetPath, agent.contents, "utf8");
657
658
  installPaths.push(path.relative(resolved.gitRoot, targetPath));
658
659
  }
659
660
  if (hooks) {
@@ -1010,6 +1011,9 @@ export async function runCli(argv) {
1010
1011
  if (namespace === "task" && command === "migrate") {
1011
1012
  return await cmdTaskMigrate({ cwd: process.cwd(), rootOverride: globals.root, args });
1012
1013
  }
1014
+ if (namespace === "task" && command === "migrate-doc") {
1015
+ return await cmdTaskMigrateDoc({ cwd: process.cwd(), rootOverride: globals.root, args });
1016
+ }
1013
1017
  if (namespace === "task" && command === "export") {
1014
1018
  return await cmdTaskExport({ cwd: process.cwd(), rootOverride: globals.root });
1015
1019
  }
@@ -1054,6 +1058,12 @@ export async function runCli(argv) {
1054
1058
  message: usageMessage(TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE),
1055
1059
  });
1056
1060
  }
1061
+ if (namespace === "task" && command === "plan") {
1062
+ return await cmdTaskPlan({ cwd: process.cwd(), rootOverride: globals.root, args });
1063
+ }
1064
+ if (namespace === "task" && command === "verify") {
1065
+ return await cmdTaskVerify({ cwd: process.cwd(), rootOverride: globals.root, args });
1066
+ }
1057
1067
  if (namespace === "task" && command === "comment") {
1058
1068
  const [taskId, ...restArgs] = args;
1059
1069
  if (!taskId) {
@@ -1663,6 +1673,11 @@ export async function runCli(argv) {
1663
1673
  let message = "";
1664
1674
  let autoAllow = false;
1665
1675
  let allowTasks = false;
1676
+ let allowBase = false;
1677
+ let allowPolicy = false;
1678
+ let allowConfig = false;
1679
+ let allowHooks = false;
1680
+ let allowCI = false;
1666
1681
  let allowDirty = false;
1667
1682
  let requireClean = false;
1668
1683
  let quiet = false;
@@ -1698,6 +1713,26 @@ export async function runCli(argv) {
1698
1713
  allowTasks = true;
1699
1714
  continue;
1700
1715
  }
1716
+ if (arg === "--allow-base") {
1717
+ allowBase = true;
1718
+ continue;
1719
+ }
1720
+ if (arg === "--allow-policy") {
1721
+ allowPolicy = true;
1722
+ continue;
1723
+ }
1724
+ if (arg === "--allow-config") {
1725
+ allowConfig = true;
1726
+ continue;
1727
+ }
1728
+ if (arg === "--allow-hooks") {
1729
+ allowHooks = true;
1730
+ continue;
1731
+ }
1732
+ if (arg === "--allow-ci") {
1733
+ allowCI = true;
1734
+ continue;
1735
+ }
1701
1736
  if (arg === "--auto-allow") {
1702
1737
  autoAllow = true;
1703
1738
  continue;
@@ -1753,7 +1788,12 @@ export async function runCli(argv) {
1753
1788
  taskId,
1754
1789
  message,
1755
1790
  allow,
1791
+ allowBase,
1756
1792
  allowTasks,
1793
+ allowPolicy,
1794
+ allowConfig,
1795
+ allowHooks,
1796
+ allowCI,
1757
1797
  requireClean,
1758
1798
  quiet,
1759
1799
  });
@@ -1778,6 +1818,10 @@ export async function runCli(argv) {
1778
1818
  let autoAllow = false;
1779
1819
  let allowTasks = false;
1780
1820
  let allowBase = false;
1821
+ let allowPolicy = false;
1822
+ let allowConfig = false;
1823
+ let allowHooks = false;
1824
+ let allowCI = false;
1781
1825
  let requireClean = false;
1782
1826
  let quiet = false;
1783
1827
  for (let i = 0; i < args.length; i++) {
@@ -1820,6 +1864,22 @@ export async function runCli(argv) {
1820
1864
  allowBase = true;
1821
1865
  continue;
1822
1866
  }
1867
+ if (arg === "--allow-policy") {
1868
+ allowPolicy = true;
1869
+ continue;
1870
+ }
1871
+ if (arg === "--allow-config") {
1872
+ allowConfig = true;
1873
+ continue;
1874
+ }
1875
+ if (arg === "--allow-hooks") {
1876
+ allowHooks = true;
1877
+ continue;
1878
+ }
1879
+ if (arg === "--allow-ci") {
1880
+ allowCI = true;
1881
+ continue;
1882
+ }
1823
1883
  if (arg === "--require-clean") {
1824
1884
  requireClean = true;
1825
1885
  continue;
@@ -1852,6 +1912,10 @@ export async function runCli(argv) {
1852
1912
  autoAllow,
1853
1913
  allowTasks,
1854
1914
  allowBase,
1915
+ allowPolicy,
1916
+ allowConfig,
1917
+ allowHooks,
1918
+ allowCI,
1855
1919
  requireClean,
1856
1920
  quiet,
1857
1921
  });
@@ -2375,74 +2439,11 @@ export async function runCli(argv) {
2375
2439
  message: usageMessage(VERIFY_USAGE, VERIFY_USAGE_EXAMPLE),
2376
2440
  });
2377
2441
  }
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
2442
  return await cmdVerify({
2437
2443
  cwd: process.cwd(),
2438
2444
  rootOverride: globals.root,
2439
2445
  taskId,
2440
- execCwd: cwdOverride,
2441
- logPath,
2442
- skipIfUnchanged,
2443
- quiet,
2444
- require,
2445
- yes,
2446
+ args: verifyArgs,
2446
2447
  });
2447
2448
  }
2448
2449
  if (namespace === "integrate") {
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,sIACsG,CAAC;AACtI,eAAO,MAAM,0BAA0B,mDAAmD,CAAC;AAC3F,eAAO,MAAM,UAAU,kIAC0G,CAAC;AAClI,eAAO,MAAM,kBAAkB,2CAA2C,CAAC;AA8J3E,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/commands/backend.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,sIACsG,CAAC;AACtI,eAAO,MAAM,0BAA0B,mDAAmD,CAAC;AAC3F,eAAO,MAAM,UAAU,kIAC0G,CAAC;AAClI,eAAO,MAAM,kBAAkB,2CAA2C,CAAC;AA8J3E,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB"}
@@ -2,6 +2,7 @@ import { backendNotSupportedMessage, usageMessage } from "../cli/output.js";
2
2
  import { mapBackendError } from "../cli/error-map.js";
3
3
  import { CliError } from "../shared/errors.js";
4
4
  import { loadTaskBackend } from "../backends/task-backend.js";
5
+ import { ensureNetworkApproved } from "./shared/network-approval.js";
5
6
  export const BACKEND_SYNC_USAGE = "Usage: agentplane backend sync <id> --direction <push|pull> [--conflict <diff|prefer-local|prefer-remote|fail>] [--yes] [--quiet]";
6
7
  export const BACKEND_SYNC_USAGE_EXAMPLE = "agentplane backend sync local --direction pull";
7
8
  export const SYNC_USAGE = "Usage: agentplane sync [<id>] [--direction <push|pull>] [--conflict <diff|prefer-local|prefer-remote|fail>] [--yes] [--quiet]";
@@ -142,7 +143,7 @@ function parseSyncArgs(args) {
142
143
  export async function cmdBackendSync(opts) {
143
144
  const flags = parseBackendSyncArgs(opts.args);
144
145
  try {
145
- const { backend, backendId } = await loadTaskBackend({
146
+ const { backend, backendId, config } = await loadTaskBackend({
146
147
  cwd: opts.cwd,
147
148
  rootOverride: opts.rootOverride ?? null,
148
149
  });
@@ -160,6 +161,13 @@ export async function cmdBackendSync(opts) {
160
161
  message: backendNotSupportedMessage("sync()"),
161
162
  });
162
163
  }
164
+ if (backendId !== "local") {
165
+ await ensureNetworkApproved({
166
+ config,
167
+ yes: flags.confirm,
168
+ reason: `backend sync may access the network (backend: ${backendId})`,
169
+ });
170
+ }
163
171
  await backend.sync({
164
172
  direction: flags.direction,
165
173
  conflict: flags.conflict,
@@ -177,7 +185,7 @@ export async function cmdBackendSync(opts) {
177
185
  export async function cmdSync(opts) {
178
186
  const flags = parseSyncArgs(opts.args);
179
187
  try {
180
- const { backend, backendId } = await loadTaskBackend({
188
+ const { backend, backendId, config } = await loadTaskBackend({
181
189
  cwd: opts.cwd,
182
190
  rootOverride: opts.rootOverride ?? null,
183
191
  });
@@ -195,6 +203,13 @@ export async function cmdSync(opts) {
195
203
  message: backendNotSupportedMessage("sync()"),
196
204
  });
197
205
  }
206
+ if (backendId !== "local") {
207
+ await ensureNetworkApproved({
208
+ config,
209
+ yes: flags.confirm,
210
+ reason: `sync may access the network (backend: ${backendId})`,
211
+ });
212
+ }
198
213
  await backend.sync({
199
214
  direction: flags.direction,
200
215
  conflict: flags.conflict,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/branch/index.ts"],"names":[],"mappings":"AAmCA,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,CA2GlB;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"}
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,16 +1,30 @@
1
1
  import { loadConfig } from "@agentplaneorg/core";
2
+ export declare function buildGitCommitEnv(opts: {
3
+ taskId: string;
4
+ allowTasks: boolean;
5
+ allowBase: boolean;
6
+ allowPolicy: boolean;
7
+ allowConfig: boolean;
8
+ allowHooks: boolean;
9
+ allowCI: boolean;
10
+ }): NodeJS.ProcessEnv;
2
11
  export declare function suggestAllowPrefixes(paths: string[]): string[];
3
- export declare const GUARD_COMMIT_USAGE = "Usage: agentplane guard commit <task-id> -m <message> --allow <path> [--allow <path>...] [--auto-allow] [--allow-tasks] [--require-clean] [--quiet]";
4
- export declare const GUARD_COMMIT_USAGE_EXAMPLE = "agentplane guard commit 202602030608-F1Q8AB -m \"\u2728 F1Q8AB update\" --allow packages/agentplane";
12
+ export declare const GUARD_COMMIT_USAGE = "Usage: agentplane guard commit <task-id> -m <message> --allow <path> [--allow <path>...] [--auto-allow] [--allow-tasks] [--allow-base] [--allow-policy] [--allow-config] [--allow-hooks] [--allow-ci] [--require-clean] [--quiet]";
13
+ export declare const GUARD_COMMIT_USAGE_EXAMPLE = "agentplane guard commit 202602030608-F1Q8AB -m \"\u2728 F1Q8AB task: implement allowlist guard\" --allow packages/agentplane";
5
14
  export declare const COMMIT_USAGE = "Usage: agentplane commit <task-id> -m <message>";
6
- export declare const COMMIT_USAGE_EXAMPLE = "agentplane commit 202602030608-F1Q8AB -m \"\u2728 F1Q8AB update\"";
15
+ export declare const COMMIT_USAGE_EXAMPLE = "agentplane commit 202602030608-F1Q8AB -m \"\u2728 F1Q8AB task: implement allowlist guard\"";
7
16
  type GuardCommitOptions = {
8
17
  cwd: string;
9
18
  rootOverride?: string;
10
19
  taskId: string;
11
20
  message: string;
12
21
  allow: string[];
22
+ allowBase: boolean;
13
23
  allowTasks: boolean;
24
+ allowPolicy: boolean;
25
+ allowConfig: boolean;
26
+ allowHooks: boolean;
27
+ allowCI: boolean;
14
28
  requireClean: boolean;
15
29
  quiet: boolean;
16
30
  };
@@ -26,6 +40,9 @@ export declare function commitFromComment(opts: {
26
40
  cwd: string;
27
41
  rootOverride?: string;
28
42
  taskId: string;
43
+ author?: string;
44
+ statusFrom?: string;
45
+ statusTo?: string;
29
46
  commentBody: string;
30
47
  formattedComment: string | null;
31
48
  emoji: string;
@@ -60,6 +77,10 @@ export declare function cmdCommit(opts: {
60
77
  autoAllow: boolean;
61
78
  allowTasks: boolean;
62
79
  allowBase: boolean;
80
+ allowPolicy: boolean;
81
+ allowConfig: boolean;
82
+ allowHooks: boolean;
83
+ allowCI: boolean;
63
84
  requireClean: boolean;
64
85
  quiet: boolean;
65
86
  }): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/guard/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/guard/index.ts"],"names":[],"mappings":"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"}