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
@@ -9,12 +9,13 @@ import { extractArchive } from "../cli/archive.js";
9
9
  import { invalidFieldMessage, invalidValueMessage, missingValueMessage, requiredFieldMessage, usageMessage, } from "../cli/output.js";
10
10
  import { exitCodeForError } from "../cli/exit-codes.js";
11
11
  import { CliError } from "../shared/errors.js";
12
+ import { ensureNetworkApproved } from "./shared/network-approval.js";
12
13
  const DEFAULT_UPGRADE_ASSET = "agentplane-upgrade.tar.gz";
13
14
  const DEFAULT_UPGRADE_CHECKSUM_ASSET = "agentplane-upgrade.tar.gz.sha256";
14
- const UPGRADE_USAGE = "Usage: agentplane upgrade [--tag <tag>] [--dry-run] [--no-backup] [--source <repo-url>] [--bundle <path|url>] [--checksum <path|url>]";
15
+ const UPGRADE_USAGE = "Usage: agentplane upgrade [--tag <tag>] [--dry-run] [--no-backup] [--source <repo-url>] [--bundle <path|url>] [--checksum <path|url>] [--yes]";
15
16
  const UPGRADE_USAGE_EXAMPLE = "agentplane upgrade --tag v0.1.4 --dry-run";
16
17
  function parseUpgradeFlags(args) {
17
- const out = { dryRun: false, backup: true };
18
+ const out = { dryRun: false, backup: true, yes: false };
18
19
  for (let i = 0; i < args.length; i++) {
19
20
  const arg = args[i];
20
21
  if (!arg)
@@ -34,6 +35,10 @@ function parseUpgradeFlags(args) {
34
35
  out.backup = false;
35
36
  continue;
36
37
  }
38
+ if (arg === "--yes") {
39
+ out.yes = true;
40
+ continue;
41
+ }
37
42
  const next = args[i + 1];
38
43
  if (!next) {
39
44
  throw new CliError({ exitCode: 2, code: "E_USAGE", message: missingValueMessage(arg) });
@@ -136,6 +141,13 @@ export async function cmdUpgrade(opts) {
136
141
  });
137
142
  const loaded = await loadConfig(resolved.agentplaneDir);
138
143
  const source = flags.source ?? loaded.config.framework.source;
144
+ let networkApproved = false;
145
+ const ensureApproved = async (reason) => {
146
+ if (networkApproved)
147
+ return;
148
+ await ensureNetworkApproved({ config: loaded.config, yes: flags.yes, reason });
149
+ networkApproved = true;
150
+ };
139
151
  let tempRoot = null;
140
152
  let extractRoot = null;
141
153
  try {
@@ -146,6 +158,7 @@ export async function cmdUpgrade(opts) {
146
158
  const isUrl = flags.bundle.startsWith("http://") || flags.bundle.startsWith("https://");
147
159
  bundlePath = isUrl ? path.join(tempRoot, "bundle.tar.gz") : path.resolve(flags.bundle);
148
160
  if (isUrl) {
161
+ await ensureApproved("upgrade downloads the bundle/checksum from the network");
149
162
  await downloadToFile(flags.bundle, bundlePath);
150
163
  }
151
164
  const checksumValue = flags.checksum ?? "";
@@ -154,6 +167,7 @@ export async function cmdUpgrade(opts) {
154
167
  ? path.join(tempRoot, "bundle.tar.gz.sha256")
155
168
  : path.resolve(checksumValue);
156
169
  if (checksumIsUrl) {
170
+ await ensureApproved("upgrade downloads the bundle/checksum from the network");
157
171
  await downloadToFile(checksumValue, checksumPath);
158
172
  }
159
173
  }
@@ -162,6 +176,7 @@ export async function cmdUpgrade(opts) {
162
176
  const releaseUrl = flags.tag
163
177
  ? `https://api.github.com/repos/${owner}/${repo}/releases/tags/${flags.tag}`
164
178
  : `https://api.github.com/repos/${owner}/${repo}/releases/latest`;
179
+ await ensureApproved("upgrade fetches release metadata and downloads assets from the network");
165
180
  const release = (await fetchJson(releaseUrl));
166
181
  const assets = Array.isArray(release.assets) ? release.assets : [];
167
182
  const assetName = flags.asset ?? DEFAULT_UPGRADE_ASSET;
@@ -1,6 +1,6 @@
1
1
  export declare const IDE_SYNC_USAGE = "Usage: agentplane ide sync";
2
2
  export declare const IDE_SYNC_USAGE_EXAMPLE = "agentplane ide sync";
3
- export { TASK_NEW_USAGE, TASK_NEW_USAGE_EXAMPLE, TASK_ADD_USAGE, TASK_ADD_USAGE_EXAMPLE, TASK_SCRUB_USAGE, TASK_SCRUB_USAGE_EXAMPLE, TASK_UPDATE_USAGE, TASK_UPDATE_USAGE_EXAMPLE, TASK_SCAFFOLD_USAGE, TASK_SCAFFOLD_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, dedupeStrings, cmdTaskNew, cmdTaskAdd, cmdTaskUpdate, cmdTaskScrub, cmdTaskListWithFilters, cmdTaskNext, cmdReady, cmdTaskSearch, cmdTaskScaffold, cmdTaskNormalize, cmdTaskMigrate, cmdTaskComment, cmdTaskSetStatus, cmdTaskShow, cmdTaskList, cmdTaskExport, cmdTaskLint, cmdTaskDocSet, cmdTaskDocShow, cmdStart, cmdBlock, cmdFinish, cmdVerify, } from "./task/index.js";
3
+ export { TASK_NEW_USAGE, TASK_NEW_USAGE_EXAMPLE, TASK_ADD_USAGE, TASK_ADD_USAGE_EXAMPLE, TASK_SCRUB_USAGE, TASK_SCRUB_USAGE_EXAMPLE, TASK_UPDATE_USAGE, TASK_UPDATE_USAGE_EXAMPLE, TASK_SCAFFOLD_USAGE, TASK_SCAFFOLD_USAGE_EXAMPLE, TASK_MIGRATE_DOC_USAGE, TASK_MIGRATE_DOC_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, TASK_PLAN_USAGE, TASK_PLAN_USAGE_EXAMPLE, TASK_PLAN_SET_USAGE, TASK_PLAN_SET_USAGE_EXAMPLE, TASK_PLAN_APPROVE_USAGE, TASK_PLAN_APPROVE_USAGE_EXAMPLE, TASK_PLAN_REJECT_USAGE, TASK_PLAN_REJECT_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, TASK_VERIFY_USAGE, TASK_VERIFY_USAGE_EXAMPLE, dedupeStrings, cmdTaskNew, cmdTaskAdd, cmdTaskUpdate, cmdTaskScrub, cmdTaskListWithFilters, cmdTaskNext, cmdReady, cmdTaskSearch, cmdTaskScaffold, cmdTaskNormalize, cmdTaskMigrate, cmdTaskMigrateDoc, cmdTaskPlan, cmdTaskComment, cmdTaskSetStatus, cmdTaskShow, cmdTaskList, cmdTaskExport, cmdTaskLint, cmdTaskDocSet, cmdTaskDocShow, cmdStart, cmdBlock, cmdFinish, cmdVerify, cmdTaskVerify, } from "./task/index.js";
4
4
  export { BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE, BRANCH_STATUS_USAGE, BRANCH_STATUS_USAGE_EXAMPLE, BRANCH_REMOVE_USAGE, BRANCH_REMOVE_USAGE_EXAMPLE, WORK_START_USAGE, WORK_START_USAGE_EXAMPLE, CLEANUP_MERGED_USAGE, CLEANUP_MERGED_USAGE_EXAMPLE, gitInitRepo, resolveInitBaseBranch, promptInitBaseBranch, ensureInitCommit, cmdWorkStart, cmdCleanupMerged, cmdBranchBaseGet, cmdBranchBaseSet, cmdBranchBaseClear, cmdBranchBaseExplain, cmdBranchStatus, cmdBranchRemove, } from "./branch/index.js";
5
5
  export { PR_OPEN_USAGE, PR_OPEN_USAGE_EXAMPLE, PR_UPDATE_USAGE, PR_UPDATE_USAGE_EXAMPLE, PR_CHECK_USAGE, PR_CHECK_USAGE_EXAMPLE, PR_NOTE_USAGE, PR_NOTE_USAGE_EXAMPLE, INTEGRATE_USAGE, INTEGRATE_USAGE_EXAMPLE, cmdPrOpen, cmdPrUpdate, cmdPrCheck, cmdPrNote, cmdIntegrate, } from "./pr/index.js";
6
6
  export { GUARD_COMMIT_USAGE, GUARD_COMMIT_USAGE_EXAMPLE, COMMIT_USAGE, COMMIT_USAGE_EXAMPLE, suggestAllowPrefixes, cmdGuardClean, cmdGuardSuggestAllow, cmdGuardCommit, cmdCommit, } from "./guard/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAC3D,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAC3D,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACvB,+BAA+B,EAC/B,sBAAsB,EACtB,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // Thin public re-export layer: keep CLI imports stable while command implementations live by domain.
2
2
  export const IDE_SYNC_USAGE = "Usage: agentplane ide sync";
3
3
  export const IDE_SYNC_USAGE_EXAMPLE = "agentplane ide sync";
4
- export { TASK_NEW_USAGE, TASK_NEW_USAGE_EXAMPLE, TASK_ADD_USAGE, TASK_ADD_USAGE_EXAMPLE, TASK_SCRUB_USAGE, TASK_SCRUB_USAGE_EXAMPLE, TASK_UPDATE_USAGE, TASK_UPDATE_USAGE_EXAMPLE, TASK_SCAFFOLD_USAGE, TASK_SCAFFOLD_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, dedupeStrings, cmdTaskNew, cmdTaskAdd, cmdTaskUpdate, cmdTaskScrub, cmdTaskListWithFilters, cmdTaskNext, cmdReady, cmdTaskSearch, cmdTaskScaffold, cmdTaskNormalize, cmdTaskMigrate, cmdTaskComment, cmdTaskSetStatus, cmdTaskShow, cmdTaskList, cmdTaskExport, cmdTaskLint, cmdTaskDocSet, cmdTaskDocShow, cmdStart, cmdBlock, cmdFinish, cmdVerify, } from "./task/index.js";
4
+ export { TASK_NEW_USAGE, TASK_NEW_USAGE_EXAMPLE, TASK_ADD_USAGE, TASK_ADD_USAGE_EXAMPLE, TASK_SCRUB_USAGE, TASK_SCRUB_USAGE_EXAMPLE, TASK_UPDATE_USAGE, TASK_UPDATE_USAGE_EXAMPLE, TASK_SCAFFOLD_USAGE, TASK_SCAFFOLD_USAGE_EXAMPLE, TASK_MIGRATE_DOC_USAGE, TASK_MIGRATE_DOC_USAGE_EXAMPLE, TASK_DOC_SET_USAGE, TASK_DOC_SET_USAGE_EXAMPLE, TASK_DOC_SHOW_USAGE, TASK_DOC_SHOW_USAGE_EXAMPLE, TASK_PLAN_USAGE, TASK_PLAN_USAGE_EXAMPLE, TASK_PLAN_SET_USAGE, TASK_PLAN_SET_USAGE_EXAMPLE, TASK_PLAN_APPROVE_USAGE, TASK_PLAN_APPROVE_USAGE_EXAMPLE, TASK_PLAN_REJECT_USAGE, TASK_PLAN_REJECT_USAGE_EXAMPLE, START_USAGE, START_USAGE_EXAMPLE, BLOCK_USAGE, BLOCK_USAGE_EXAMPLE, FINISH_USAGE, FINISH_USAGE_EXAMPLE, VERIFY_USAGE, VERIFY_USAGE_EXAMPLE, TASK_VERIFY_USAGE, TASK_VERIFY_USAGE_EXAMPLE, dedupeStrings, cmdTaskNew, cmdTaskAdd, cmdTaskUpdate, cmdTaskScrub, cmdTaskListWithFilters, cmdTaskNext, cmdReady, cmdTaskSearch, cmdTaskScaffold, cmdTaskNormalize, cmdTaskMigrate, cmdTaskMigrateDoc, cmdTaskPlan, cmdTaskComment, cmdTaskSetStatus, cmdTaskShow, cmdTaskList, cmdTaskExport, cmdTaskLint, cmdTaskDocSet, cmdTaskDocShow, cmdStart, cmdBlock, cmdFinish, cmdVerify, cmdTaskVerify, } from "./task/index.js";
5
5
  export { BRANCH_BASE_USAGE, BRANCH_BASE_USAGE_EXAMPLE, BRANCH_STATUS_USAGE, BRANCH_STATUS_USAGE_EXAMPLE, BRANCH_REMOVE_USAGE, BRANCH_REMOVE_USAGE_EXAMPLE, WORK_START_USAGE, WORK_START_USAGE_EXAMPLE, CLEANUP_MERGED_USAGE, CLEANUP_MERGED_USAGE_EXAMPLE, gitInitRepo, resolveInitBaseBranch, promptInitBaseBranch, ensureInitCommit, cmdWorkStart, cmdCleanupMerged, cmdBranchBaseGet, cmdBranchBaseSet, cmdBranchBaseClear, cmdBranchBaseExplain, cmdBranchStatus, cmdBranchRemove, } from "./branch/index.js";
6
6
  export { PR_OPEN_USAGE, PR_OPEN_USAGE_EXAMPLE, PR_UPDATE_USAGE, PR_UPDATE_USAGE_EXAMPLE, PR_CHECK_USAGE, PR_CHECK_USAGE_EXAMPLE, PR_NOTE_USAGE, PR_NOTE_USAGE_EXAMPLE, INTEGRATE_USAGE, INTEGRATE_USAGE_EXAMPLE, cmdPrOpen, cmdPrUpdate, cmdPrCheck, cmdPrNote, cmdIntegrate, } from "./pr/index.js";
7
7
  export { GUARD_COMMIT_USAGE, GUARD_COMMIT_USAGE_EXAMPLE, COMMIT_USAGE, COMMIT_USAGE_EXAMPLE, suggestAllowPrefixes, cmdGuardClean, cmdGuardSuggestAllow, cmdGuardCommit, cmdCommit, } from "./guard/index.js";
@@ -0,0 +1,5 @@
1
+ export declare function parseGitLogHashSubject(stdout: string): {
2
+ hash: string;
3
+ subject: string;
4
+ };
5
+ //# sourceMappingURL=git-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/shared/git-log.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAYxF"}
@@ -0,0 +1,14 @@
1
+ export function parseGitLogHashSubject(stdout) {
2
+ const trimmed = stdout.trimEnd();
3
+ const idx = trimmed.indexOf("\0");
4
+ if (idx === -1) {
5
+ throw new Error("Unexpected git log output (missing NUL separator)");
6
+ }
7
+ const hash = trimmed.slice(0, idx).trim();
8
+ const subject = trimmed.slice(idx + 1);
9
+ if (!hash)
10
+ throw new Error("Unexpected git log output (missing hash)");
11
+ if (!subject)
12
+ throw new Error("Unexpected git log output (missing subject)");
13
+ return { hash, subject };
14
+ }
@@ -0,0 +1,3 @@
1
+ export declare function normalizeGitPathPrefix(prefix: string): string;
2
+ export declare function gitPathIsUnderPrefix(candidate: string, prefix: string): boolean;
3
+ //# sourceMappingURL=git-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-path.d.ts","sourceRoot":"","sources":["../../src/shared/git-path.ts"],"names":[],"mappings":"AAgBA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAS/E"}
@@ -0,0 +1,30 @@
1
+ import path from "node:path";
2
+ function normalizeGitPath(raw) {
3
+ let p = (raw ?? "").trim();
4
+ if (!p)
5
+ return "";
6
+ // Git reports repo-relative POSIX paths. Allow user-provided prefixes to be Windows-y.
7
+ p = p.replaceAll("\\", "/");
8
+ while (p.startsWith("./"))
9
+ p = p.slice(2);
10
+ p = p.replaceAll(/\/{2,}/g, "/");
11
+ p = p.replaceAll(/\/+$/g, "");
12
+ p = p.replaceAll(/^\/+/g, "");
13
+ return p;
14
+ }
15
+ export function normalizeGitPathPrefix(prefix) {
16
+ const raw = (prefix ?? "").trim();
17
+ if (raw === "." || raw === "./" || raw === ".\\")
18
+ return ".";
19
+ return normalizeGitPath(raw);
20
+ }
21
+ export function gitPathIsUnderPrefix(candidate, prefix) {
22
+ const c = normalizeGitPath(candidate);
23
+ const p = normalizeGitPathPrefix(prefix);
24
+ if (p === "." || p === "")
25
+ return true;
26
+ if (c === p)
27
+ return true;
28
+ const rel = path.posix.relative(p, c);
29
+ return rel === "" || (!rel.startsWith("..") && !path.posix.isAbsolute(rel));
30
+ }
@@ -0,0 +1,2 @@
1
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/shared/guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
@@ -0,0 +1,3 @@
1
+ export function isRecord(value) {
2
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
3
+ }
@@ -0,0 +1,12 @@
1
+ export type ProtectedPathKind = "tasks" | "policy" | "config" | "hooks" | "ci";
2
+ export type ProtectedPathOverride = {
3
+ kind: ProtectedPathKind;
4
+ cliFlag: string;
5
+ envVar: string;
6
+ };
7
+ export declare function getProtectedPathOverride(kind: ProtectedPathKind): ProtectedPathOverride;
8
+ export declare function protectedPathKindForFile(opts: {
9
+ filePath: string;
10
+ tasksPath: string;
11
+ }): ProtectedPathKind | null;
12
+ //# sourceMappingURL=protected-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-paths.d.ts","sourceRoot":"","sources":["../../src/shared/protected-paths.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAQF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,CAkBvF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,iBAAiB,GAAG,IAAI,CA6B3B"}
@@ -0,0 +1,51 @@
1
+ function pathIsUnder(candidate, prefix) {
2
+ if (prefix === "." || prefix === "")
3
+ return true;
4
+ if (candidate === prefix)
5
+ return true;
6
+ return candidate.startsWith(`${prefix}/`);
7
+ }
8
+ export function getProtectedPathOverride(kind) {
9
+ switch (kind) {
10
+ case "tasks": {
11
+ return { kind, cliFlag: "--allow-tasks", envVar: "AGENTPLANE_ALLOW_TASKS" };
12
+ }
13
+ case "policy": {
14
+ return { kind, cliFlag: "--allow-policy", envVar: "AGENTPLANE_ALLOW_POLICY" };
15
+ }
16
+ case "config": {
17
+ return { kind, cliFlag: "--allow-config", envVar: "AGENTPLANE_ALLOW_CONFIG" };
18
+ }
19
+ case "hooks": {
20
+ return { kind, cliFlag: "--allow-hooks", envVar: "AGENTPLANE_ALLOW_HOOKS" };
21
+ }
22
+ case "ci": {
23
+ return { kind, cliFlag: "--allow-ci", envVar: "AGENTPLANE_ALLOW_CI" };
24
+ }
25
+ }
26
+ }
27
+ export function protectedPathKindForFile(opts) {
28
+ const p = opts.filePath;
29
+ if (!p)
30
+ return null;
31
+ if (p === opts.tasksPath)
32
+ return "tasks";
33
+ // "Rules of the game": authoring/agent policies and registry.
34
+ if (p === "AGENTS.md" ||
35
+ p === "packages/agentplane/assets/AGENTS.md" ||
36
+ pathIsUnder(p, ".agentplane/agents")) {
37
+ return "policy";
38
+ }
39
+ // Framework config and task backend config determine enforcement behavior.
40
+ if (p === ".agentplane/config.json" || pathIsUnder(p, ".agentplane/backends")) {
41
+ return "config";
42
+ }
43
+ // Local hook orchestrator is a quality gate for commits.
44
+ if (p === "lefthook.yml")
45
+ return "hooks";
46
+ // CI workflows are "remote hooks" for quality gates.
47
+ if (pathIsUnder(p, ".github/workflows") || pathIsUnder(p, ".github/actions")) {
48
+ return "ci";
49
+ }
50
+ return null;
51
+ }
@@ -0,0 +1,2 @@
1
+ export declare function dedupeStrings(items: string[]): string[];
2
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/shared/strings.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWvD"}
@@ -0,0 +1,14 @@
1
+ export function dedupeStrings(items) {
2
+ const seen = new Set();
3
+ const out = [];
4
+ for (const item of items) {
5
+ const trimmed = item.trim();
6
+ if (!trimmed)
7
+ continue;
8
+ if (seen.has(trimmed))
9
+ continue;
10
+ seen.add(trimmed);
11
+ out.push(trimmed);
12
+ }
13
+ return out;
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentplane",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Agent Plane CLI for task workflows, recipes, and project automation.",
5
5
  "keywords": [
6
6
  "agentplane",
@@ -54,7 +54,7 @@
54
54
  "prepublishOnly": "npm run prepack"
55
55
  },
56
56
  "dependencies": {
57
- "@agentplaneorg/core": "0.1.7",
57
+ "@agentplaneorg/core": "0.1.9",
58
58
  "yauzl": "^2.10.0"
59
59
  },
60
60
  "devDependencies": {