agentplane 0.2.24 → 0.2.26
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/bin/agentplane.js +91 -54
- package/dist/.build-manifest.json +11 -0
- package/dist/backends/task-backend/local-backend.d.ts +2 -0
- package/dist/backends/task-backend/local-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/local-backend.js +12 -1
- package/dist/backends/task-backend/redmine/mapping.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine/mapping.js +26 -1
- package/dist/backends/task-backend/redmine-backend.d.ts +4 -0
- package/dist/backends/task-backend/redmine-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine-backend.js +92 -9
- package/dist/backends/task-backend/shared/types.d.ts +1 -0
- package/dist/backends/task-backend/shared/types.d.ts.map +1 -1
- package/dist/backends/task-index.d.ts.map +1 -1
- package/dist/backends/task-index.js +8 -1
- package/dist/cli/command-guide.d.ts.map +1 -1
- package/dist/cli/command-guide.js +21 -8
- package/dist/cli/command-snippets.d.ts +24 -0
- package/dist/cli/command-snippets.d.ts.map +1 -0
- package/dist/cli/command-snippets.js +23 -0
- package/dist/cli/reason-codes.d.ts +9 -0
- package/dist/cli/reason-codes.d.ts.map +1 -0
- package/dist/cli/reason-codes.js +79 -0
- package/dist/cli/recipes-bundled.d.ts +1 -0
- package/dist/cli/recipes-bundled.d.ts.map +1 -1
- package/dist/cli/recipes-bundled.js +4 -1
- package/dist/cli/run-cli/command-catalog.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog.js +40 -1
- package/dist/cli/run-cli/commands/config.d.ts +5 -0
- package/dist/cli/run-cli/commands/config.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/config.js +86 -1
- package/dist/cli/run-cli/commands/core.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/core.js +55 -0
- package/dist/cli/run-cli/commands/init/recipes.d.ts +5 -1
- package/dist/cli/run-cli/commands/init/recipes.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init/recipes.js +24 -4
- package/dist/cli/run-cli/commands/init/write-workflow.d.ts +7 -0
- package/dist/cli/run-cli/commands/init/write-workflow.d.ts.map +1 -0
- package/dist/cli/run-cli/commands/init/write-workflow.js +52 -0
- package/dist/cli/run-cli/commands/init.d.ts +2 -1
- package/dist/cli/run-cli/commands/init.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init.js +104 -54
- package/dist/cli/run-cli.d.ts.map +1 -1
- package/dist/cli/run-cli.js +70 -1
- package/dist/commands/backend/sync.command.d.ts.map +1 -1
- package/dist/commands/backend/sync.command.js +7 -6
- package/dist/commands/backend.d.ts.map +1 -1
- package/dist/commands/backend.js +2 -0
- package/dist/commands/block.spec.d.ts.map +1 -1
- package/dist/commands/block.spec.js +23 -2
- package/dist/commands/commit.spec.d.ts.map +1 -1
- package/dist/commands/commit.spec.js +18 -6
- package/dist/commands/doctor.run.d.ts.map +1 -1
- package/dist/commands/doctor.run.js +96 -10
- package/dist/commands/finish.spec.d.ts.map +1 -1
- package/dist/commands/finish.spec.js +53 -4
- package/dist/commands/guard/commit.command.d.ts.map +1 -1
- package/dist/commands/guard/commit.command.js +26 -20
- package/dist/commands/guard/impl/allow.d.ts.map +1 -1
- package/dist/commands/guard/impl/allow.js +8 -1
- package/dist/commands/guard/impl/commands.d.ts.map +1 -1
- package/dist/commands/guard/impl/commands.js +19 -21
- package/dist/commands/guard/impl/comment-commit.d.ts.map +1 -1
- package/dist/commands/guard/impl/comment-commit.js +8 -17
- package/dist/commands/recipes/impl/commands/install.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/install.js +36 -13
- package/dist/commands/recipes/impl/scenario.d.ts.map +1 -1
- package/dist/commands/recipes/impl/scenario.js +25 -0
- package/dist/commands/recipes/impl/types.d.ts +4 -0
- package/dist/commands/recipes/impl/types.d.ts.map +1 -1
- package/dist/commands/scenario/impl/commands.d.ts.map +1 -1
- package/dist/commands/scenario/impl/commands.js +74 -3
- package/dist/commands/scenario/impl/report.d.ts +8 -0
- package/dist/commands/scenario/impl/report.d.ts.map +1 -1
- package/dist/commands/scenario/impl/report.js +1 -0
- package/dist/commands/shared/reconcile-check.d.ts +7 -0
- package/dist/commands/shared/reconcile-check.d.ts.map +1 -0
- package/dist/commands/shared/reconcile-check.js +60 -0
- package/dist/commands/start.spec.d.ts.map +1 -1
- package/dist/commands/start.spec.js +23 -2
- package/dist/commands/sync.command.d.ts.map +1 -1
- package/dist/commands/sync.command.js +9 -2
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +34 -10
- package/dist/commands/task/list.d.ts.map +1 -1
- package/dist/commands/task/list.js +2 -1
- package/dist/commands/task/list.spec.d.ts.map +1 -1
- package/dist/commands/task/list.spec.js +7 -0
- package/dist/commands/task/next.d.ts.map +1 -1
- package/dist/commands/task/next.js +2 -1
- package/dist/commands/task/next.spec.d.ts.map +1 -1
- package/dist/commands/task/next.spec.js +7 -0
- package/dist/commands/task/search.d.ts.map +1 -1
- package/dist/commands/task/search.js +2 -1
- package/dist/commands/task/search.spec.d.ts.map +1 -1
- package/dist/commands/task/search.spec.js +7 -0
- package/dist/commands/task/set-status.command.d.ts.map +1 -1
- package/dist/commands/task/set-status.command.js +22 -2
- package/dist/commands/task/shared.d.ts +7 -0
- package/dist/commands/task/shared.d.ts.map +1 -1
- package/dist/commands/task/shared.js +21 -1
- package/dist/commands/task/verify-record.d.ts.map +1 -1
- package/dist/commands/task/verify-record.js +2 -0
- package/dist/commands/workflow-build.command.d.ts +8 -0
- package/dist/commands/workflow-build.command.d.ts.map +1 -0
- package/dist/commands/workflow-build.command.js +96 -0
- package/dist/commands/workflow-playbook.command.d.ts +10 -0
- package/dist/commands/workflow-playbook.command.d.ts.map +1 -0
- package/dist/commands/workflow-playbook.command.js +174 -0
- package/dist/commands/workflow-restore.command.d.ts +5 -0
- package/dist/commands/workflow-restore.command.d.ts.map +1 -0
- package/dist/commands/workflow-restore.command.js +30 -0
- package/dist/commands/workflow.command.d.ts +6 -0
- package/dist/commands/workflow.command.d.ts.map +1 -0
- package/dist/commands/workflow.command.js +36 -0
- package/dist/harness/dynamic-tool-contract.d.ts +29 -0
- package/dist/harness/dynamic-tool-contract.d.ts.map +1 -0
- package/dist/harness/dynamic-tool-contract.js +86 -0
- package/dist/harness/hooks-lifecycle.d.ts +27 -0
- package/dist/harness/hooks-lifecycle.d.ts.map +1 -0
- package/dist/harness/hooks-lifecycle.js +67 -0
- package/dist/harness/index.d.ts +9 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +8 -0
- package/dist/harness/reconcile.d.ts +37 -0
- package/dist/harness/reconcile.d.ts.map +1 -0
- package/dist/harness/reconcile.js +42 -0
- package/dist/harness/retry-policy.d.ts +31 -0
- package/dist/harness/retry-policy.d.ts.map +1 -0
- package/dist/harness/retry-policy.js +33 -0
- package/dist/harness/scheduler.d.ts +18 -0
- package/dist/harness/scheduler.d.ts.map +1 -0
- package/dist/harness/scheduler.js +55 -0
- package/dist/harness/state-machine.d.ts +17 -0
- package/dist/harness/state-machine.d.ts.map +1 -0
- package/dist/harness/state-machine.js +70 -0
- package/dist/harness/token-accounting.d.ts +19 -0
- package/dist/harness/token-accounting.d.ts.map +1 -0
- package/dist/harness/token-accounting.js +77 -0
- package/dist/harness/workspace-safety.d.ts +14 -0
- package/dist/harness/workspace-safety.d.ts.map +1 -0
- package/dist/harness/workspace-safety.js +62 -0
- package/dist/policy/rules/allowlist.d.ts.map +1 -1
- package/dist/policy/rules/allowlist.js +9 -0
- package/dist/recipes/bundled-recipes.d.ts +4 -0
- package/dist/recipes/bundled-recipes.d.ts.map +1 -1
- package/dist/recipes/bundled-recipes.js +11 -0
- package/dist/shared/allow-prefix-policy.d.ts +3 -0
- package/dist/shared/allow-prefix-policy.d.ts.map +1 -0
- package/dist/shared/allow-prefix-policy.js +8 -0
- package/dist/shared/errors.d.ts +6 -0
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/errors.js +1 -0
- package/dist/workflow-runtime/build.d.ts +4 -0
- package/dist/workflow-runtime/build.d.ts.map +1 -0
- package/dist/workflow-runtime/build.js +114 -0
- package/dist/workflow-runtime/enforcement.d.ts +3 -0
- package/dist/workflow-runtime/enforcement.d.ts.map +1 -0
- package/dist/workflow-runtime/enforcement.js +10 -0
- package/dist/workflow-runtime/file-ops.d.ts +11 -0
- package/dist/workflow-runtime/file-ops.d.ts.map +1 -0
- package/dist/workflow-runtime/file-ops.js +248 -0
- package/dist/workflow-runtime/fix.d.ts +9 -0
- package/dist/workflow-runtime/fix.d.ts.map +1 -0
- package/dist/workflow-runtime/fix.js +107 -0
- package/dist/workflow-runtime/index.d.ts +11 -0
- package/dist/workflow-runtime/index.d.ts.map +1 -0
- package/dist/workflow-runtime/index.js +10 -0
- package/dist/workflow-runtime/markdown.d.ts +10 -0
- package/dist/workflow-runtime/markdown.d.ts.map +1 -0
- package/dist/workflow-runtime/markdown.js +147 -0
- package/dist/workflow-runtime/observability.d.ts +12 -0
- package/dist/workflow-runtime/observability.d.ts.map +1 -0
- package/dist/workflow-runtime/observability.js +14 -0
- package/dist/workflow-runtime/paths.d.ts +3 -0
- package/dist/workflow-runtime/paths.d.ts.map +1 -0
- package/dist/workflow-runtime/paths.js +11 -0
- package/dist/workflow-runtime/template.d.ts +7 -0
- package/dist/workflow-runtime/template.d.ts.map +1 -0
- package/dist/workflow-runtime/template.js +94 -0
- package/dist/workflow-runtime/types.d.ts +68 -0
- package/dist/workflow-runtime/types.d.ts.map +1 -0
- package/dist/workflow-runtime/types.js +1 -0
- package/dist/workflow-runtime/validate.d.ts +8 -0
- package/dist/workflow-runtime/validate.d.ts.map +1 -0
- package/dist/workflow-runtime/validate.js +331 -0
- package/package.json +3 -3
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { mapBackendError } from "../../cli/error-map.js";
|
|
2
2
|
import { listTasksMemo, loadCommandContext } from "../shared/task-backend.js";
|
|
3
|
-
import { buildDependencyState, dedupeStrings, formatTaskLine, toStringArray, } from "./shared.js";
|
|
3
|
+
import { buildDependencyState, dedupeStrings, formatTaskLine, handleTaskListWarnings, toStringArray, } from "./shared.js";
|
|
4
4
|
export async function cmdTaskListWithFilters(opts) {
|
|
5
5
|
try {
|
|
6
6
|
const ctx = opts.ctx ??
|
|
7
7
|
(await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
|
|
8
8
|
const tasks = await listTasksMemo(ctx);
|
|
9
|
+
handleTaskListWarnings({ backend: ctx.taskBackend, strictRead: opts.filters.strictRead });
|
|
9
10
|
const depState = buildDependencyState(tasks);
|
|
10
11
|
let filtered = tasks;
|
|
11
12
|
if (opts.filters.status.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/list.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"list.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/list.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,cAAc,CAuDpD,CAAC"}
|
|
@@ -26,6 +26,12 @@ export const taskListSpec = {
|
|
|
26
26
|
repeatable: true,
|
|
27
27
|
description: "Repeatable. Filter by tag.",
|
|
28
28
|
},
|
|
29
|
+
{
|
|
30
|
+
kind: "boolean",
|
|
31
|
+
name: "strict-read",
|
|
32
|
+
default: false,
|
|
33
|
+
description: "Fail if task scan skips malformed/unreadable task files.",
|
|
34
|
+
},
|
|
29
35
|
{ kind: "boolean", name: "quiet", default: false, description: "Suppress summary output." },
|
|
30
36
|
],
|
|
31
37
|
examples: [
|
|
@@ -46,6 +52,7 @@ export const taskListSpec = {
|
|
|
46
52
|
owner: toStringList(raw.opts.owner),
|
|
47
53
|
tag: toStringList(raw.opts.tag),
|
|
48
54
|
quiet: raw.opts.quiet === true,
|
|
55
|
+
strictRead: raw.opts["strict-read"] === true,
|
|
49
56
|
},
|
|
50
57
|
}),
|
|
51
58
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/commands/task/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/commands/task/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,eAAe,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { mapBackendError } from "../../cli/error-map.js";
|
|
2
2
|
import { loadCommandContext } from "../shared/task-backend.js";
|
|
3
|
-
import { buildDependencyState, dedupeStrings, formatTaskLine, toStringArray, } from "./shared.js";
|
|
3
|
+
import { buildDependencyState, dedupeStrings, formatTaskLine, handleTaskListWarnings, toStringArray, } from "./shared.js";
|
|
4
4
|
export async function cmdTaskNext(opts) {
|
|
5
5
|
try {
|
|
6
6
|
const ctx = opts.ctx ??
|
|
7
7
|
(await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
|
|
8
8
|
const tasks = await ctx.taskBackend.listTasks();
|
|
9
|
+
handleTaskListWarnings({ backend: ctx.taskBackend, strictRead: opts.filters.strictRead });
|
|
9
10
|
const depState = buildDependencyState(tasks);
|
|
10
11
|
const statuses = opts.filters.status.length > 0
|
|
11
12
|
? new Set(opts.filters.status.map((s) => s.trim().toUpperCase()))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/next.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"next.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/next.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,cAAc,CAyEpD,CAAC"}
|
|
@@ -26,6 +26,12 @@ export const taskNextSpec = {
|
|
|
26
26
|
repeatable: true,
|
|
27
27
|
description: "Repeatable. Filter by tag.",
|
|
28
28
|
},
|
|
29
|
+
{
|
|
30
|
+
kind: "boolean",
|
|
31
|
+
name: "strict-read",
|
|
32
|
+
default: false,
|
|
33
|
+
description: "Fail if task scan skips malformed/unreadable task files.",
|
|
34
|
+
},
|
|
29
35
|
{ kind: "string", name: "limit", valueHint: "<n>", description: "Max rows to print." },
|
|
30
36
|
{ kind: "boolean", name: "quiet", default: false, description: "Suppress summary output." },
|
|
31
37
|
],
|
|
@@ -64,6 +70,7 @@ export const taskNextSpec = {
|
|
|
64
70
|
tag: toStringList(raw.opts.tag),
|
|
65
71
|
limit: typeof raw.opts.limit === "string" ? Number.parseInt(raw.opts.limit, 10) : undefined,
|
|
66
72
|
quiet: raw.opts.quiet === true,
|
|
73
|
+
strictRead: raw.opts["strict-read"] === true,
|
|
67
74
|
},
|
|
68
75
|
}),
|
|
69
76
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/task/search.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/task/search.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DlB"}
|
|
@@ -2,7 +2,7 @@ import { mapBackendError } from "../../cli/error-map.js";
|
|
|
2
2
|
import { invalidValueMessage } from "../../cli/output.js";
|
|
3
3
|
import { CliError } from "../../shared/errors.js";
|
|
4
4
|
import { loadCommandContext } from "../shared/task-backend.js";
|
|
5
|
-
import { buildDependencyState, dedupeStrings, formatTaskLine, taskTextBlob, toStringArray, } from "./shared.js";
|
|
5
|
+
import { buildDependencyState, dedupeStrings, formatTaskLine, handleTaskListWarnings, taskTextBlob, toStringArray, } from "./shared.js";
|
|
6
6
|
export async function cmdTaskSearch(opts) {
|
|
7
7
|
const query = opts.query.trim();
|
|
8
8
|
if (!query) {
|
|
@@ -16,6 +16,7 @@ export async function cmdTaskSearch(opts) {
|
|
|
16
16
|
const ctx = opts.ctx ??
|
|
17
17
|
(await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
|
|
18
18
|
const tasks = await ctx.taskBackend.listTasks();
|
|
19
|
+
handleTaskListWarnings({ backend: ctx.taskBackend, strictRead: opts.filters.strictRead });
|
|
19
20
|
const depState = buildDependencyState(tasks);
|
|
20
21
|
let filtered = tasks;
|
|
21
22
|
if (opts.filters.status.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/search.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"search.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/task/search.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,gBAAgB,CAmFxD,CAAC"}
|
|
@@ -28,6 +28,12 @@ export const taskSearchSpec = {
|
|
|
28
28
|
repeatable: true,
|
|
29
29
|
description: "Repeatable. Filter by tag.",
|
|
30
30
|
},
|
|
31
|
+
{
|
|
32
|
+
kind: "boolean",
|
|
33
|
+
name: "strict-read",
|
|
34
|
+
default: false,
|
|
35
|
+
description: "Fail if task scan skips malformed/unreadable task files.",
|
|
36
|
+
},
|
|
31
37
|
{ kind: "string", name: "limit", valueHint: "<n>", description: "Max rows to print." },
|
|
32
38
|
],
|
|
33
39
|
examples: [
|
|
@@ -74,6 +80,7 @@ export const taskSearchSpec = {
|
|
|
74
80
|
tag: toStringList(raw.opts.tag),
|
|
75
81
|
limit: typeof raw.opts.limit === "string" ? Number.parseInt(raw.opts.limit, 10) : undefined,
|
|
76
82
|
quiet: true,
|
|
83
|
+
strictRead: raw.opts["strict-read"] === true,
|
|
77
84
|
},
|
|
78
85
|
}),
|
|
79
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-status.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/set-status.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"set-status.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/set-status.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAOtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,mBAAmB,CAyK9D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC5E,KAAK,UAAU,EAAE,GAAG,mBAAmB,KAAG,OAAO,CAAC,MAAM,CAAC,CAsBxE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { usageError } from "../../cli/spec/errors.js";
|
|
2
2
|
import { toStringList } from "../../cli/spec/parse-utils.js";
|
|
3
|
+
import { findRepoWideAllowPrefixes, repoWideAllowPrefixMessage, } from "../../shared/allow-prefix-policy.js";
|
|
3
4
|
import { cmdTaskSetStatus } from "./set-status.js";
|
|
4
5
|
export const taskSetStatusSpec = {
|
|
5
6
|
id: ["task", "set-status"],
|
|
@@ -57,13 +58,14 @@ export const taskSetStatusSpec = {
|
|
|
57
58
|
name: "commit-allow",
|
|
58
59
|
valueHint: "<path-prefix>",
|
|
59
60
|
repeatable: true,
|
|
60
|
-
description: "Repeatable. Allowlist prefix for commit-from-comment staging.",
|
|
61
|
+
description: "Repeatable. Allowlist prefix for commit-from-comment staging. Use minimal prefixes; '.' is rejected.",
|
|
61
62
|
},
|
|
62
63
|
{
|
|
63
64
|
kind: "boolean",
|
|
64
65
|
name: "commit-auto-allow",
|
|
65
66
|
default: false,
|
|
66
|
-
description: "
|
|
67
|
+
description: "Deprecated. Disabled for safety; pass explicit --commit-allow prefixes.",
|
|
68
|
+
deprecated: "disabled",
|
|
67
69
|
},
|
|
68
70
|
{
|
|
69
71
|
kind: "boolean",
|
|
@@ -125,6 +127,24 @@ export const taskSetStatusSpec = {
|
|
|
125
127
|
message: "Invalid value for --commit-allow: empty.",
|
|
126
128
|
});
|
|
127
129
|
}
|
|
130
|
+
if (findRepoWideAllowPrefixes(allow).length > 0) {
|
|
131
|
+
throw usageError({
|
|
132
|
+
spec: taskSetStatusSpec,
|
|
133
|
+
message: repoWideAllowPrefixMessage("--commit-allow"),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (raw.opts["commit-auto-allow"] === true) {
|
|
137
|
+
throw usageError({
|
|
138
|
+
spec: taskSetStatusSpec,
|
|
139
|
+
message: "--commit-auto-allow is disabled; pass explicit --commit-allow <path-prefix>.",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (raw.opts["commit-from-comment"] === true && allow.length === 0) {
|
|
143
|
+
throw usageError({
|
|
144
|
+
spec: taskSetStatusSpec,
|
|
145
|
+
message: "--commit-from-comment requires --commit-allow <path-prefix> (tip: `agentplane guard suggest-allow --format args`).",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
128
148
|
},
|
|
129
149
|
parse: (raw) => {
|
|
130
150
|
const commitAllow = toStringList(raw.opts["commit-allow"]);
|
|
@@ -86,9 +86,16 @@ export type TaskListFilters = {
|
|
|
86
86
|
tag: string[];
|
|
87
87
|
limit?: number;
|
|
88
88
|
quiet: boolean;
|
|
89
|
+
strictRead?: boolean;
|
|
89
90
|
};
|
|
90
91
|
export declare function parseTaskListFilters(args: string[], opts?: {
|
|
91
92
|
allowLimit?: boolean;
|
|
92
93
|
}): TaskListFilters;
|
|
94
|
+
export declare function handleTaskListWarnings(opts: {
|
|
95
|
+
backend: {
|
|
96
|
+
getLastListWarnings?: () => string[];
|
|
97
|
+
};
|
|
98
|
+
strictRead?: boolean;
|
|
99
|
+
}): void;
|
|
93
100
|
export declare function taskTextBlob(task: TaskData): string;
|
|
94
101
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -521,7 +521,7 @@ export async function defaultCommitEmojiForAgentId(ctx, agentId) {
|
|
|
521
521
|
return await resolveCommitEmojiForAgent({ agentsDirAbs: agentsDir, agentId });
|
|
522
522
|
}
|
|
523
523
|
export function parseTaskListFilters(args, opts) {
|
|
524
|
-
const out = { status: [], owner: [], tag: [], quiet: false };
|
|
524
|
+
const out = { status: [], owner: [], tag: [], quiet: false, strictRead: false };
|
|
525
525
|
for (let i = 0; i < args.length; i++) {
|
|
526
526
|
const arg = args[i];
|
|
527
527
|
if (!arg)
|
|
@@ -530,6 +530,10 @@ export function parseTaskListFilters(args, opts) {
|
|
|
530
530
|
out.quiet = true;
|
|
531
531
|
continue;
|
|
532
532
|
}
|
|
533
|
+
if (arg === "--strict-read") {
|
|
534
|
+
out.strictRead = true;
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
533
537
|
if (arg === "--status") {
|
|
534
538
|
const next = args[i + 1];
|
|
535
539
|
if (!next) {
|
|
@@ -600,6 +604,22 @@ export function parseTaskListFilters(args, opts) {
|
|
|
600
604
|
}
|
|
601
605
|
return out;
|
|
602
606
|
}
|
|
607
|
+
export function handleTaskListWarnings(opts) {
|
|
608
|
+
const warnings = opts.backend.getLastListWarnings?.() ?? [];
|
|
609
|
+
if (warnings.length === 0)
|
|
610
|
+
return;
|
|
611
|
+
const preview = warnings.slice(0, 3).join("; ");
|
|
612
|
+
const suffix = warnings.length > 3 ? `; +${warnings.length - 3} more` : "";
|
|
613
|
+
const message = `skipped ${warnings.length} task files during scan (${preview}${suffix})`;
|
|
614
|
+
if (opts.strictRead) {
|
|
615
|
+
throw new CliError({
|
|
616
|
+
exitCode: exitCodeForError("E_VALIDATION"),
|
|
617
|
+
code: "E_VALIDATION",
|
|
618
|
+
message: `task scan strict mode failed: ${message}`,
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
process.stderr.write(`${warnMessage(message)}\n`);
|
|
622
|
+
}
|
|
603
623
|
export function taskTextBlob(task) {
|
|
604
624
|
const parts = [];
|
|
605
625
|
for (const key of ["id", "title", "description", "status", "priority", "owner"]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-record.d.ts","sourceRoot":"","sources":["../../../src/commands/task/verify-record.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-record.d.ts","sourceRoot":"","sources":["../../../src/commands/task/verify-record.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAKnC,KAAK,WAAW,GAAG,IAAI,GAAG,cAAc,CAAC;AAkKzC,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ClB;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ClB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ClB"}
|
|
@@ -5,6 +5,7 @@ import { ensureDocSections, setMarkdownSection } from "@agentplaneorg/core";
|
|
|
5
5
|
import { mapBackendError, mapCoreError } from "../../cli/error-map.js";
|
|
6
6
|
import { backendNotSupportedMessage } from "../../cli/output.js";
|
|
7
7
|
import { CliError } from "../../shared/errors.js";
|
|
8
|
+
import { ensureReconciledBeforeMutation } from "../shared/reconcile-check.js";
|
|
8
9
|
import { loadCommandContext, loadTaskFromContext, } from "../shared/task-backend.js";
|
|
9
10
|
import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
|
|
10
11
|
import { appendTaskEvent, extractDocSection, nowIso } from "./shared.js";
|
|
@@ -68,6 +69,7 @@ function sha256Hex(text) {
|
|
|
68
69
|
async function recordVerificationResult(opts) {
|
|
69
70
|
const ctx = opts.ctx ??
|
|
70
71
|
(await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
|
|
72
|
+
await ensureReconciledBeforeMutation({ ctx, command: "verify" });
|
|
71
73
|
const backend = ctx.taskBackend;
|
|
72
74
|
const config = ctx.config;
|
|
73
75
|
const resolved = ctx.resolvedProject;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CommandHandler, CommandSpec } from "../cli/spec/spec.js";
|
|
2
|
+
export type WorkflowBuildParsed = {
|
|
3
|
+
validate: boolean;
|
|
4
|
+
dryRun: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const workflowBuildSpec: CommandSpec<WorkflowBuildParsed>;
|
|
7
|
+
export declare const runWorkflowBuild: CommandHandler<WorkflowBuildParsed>;
|
|
8
|
+
//# sourceMappingURL=workflow-build.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-build.command.d.ts","sourceRoot":"","sources":["../../src/commands/workflow-build.command.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,mBAAmB,CAgC9D,CAAC;AAWF,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,mBAAmB,CAoEhE,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { loadConfig, resolveProject } from "@agentplaneorg/core";
|
|
4
|
+
import { successMessage, warnMessage } from "../cli/output.js";
|
|
5
|
+
import { DEFAULT_WORKFLOW_TEMPLATE, buildWorkflowFromTemplates, diagnosticsSummary, publishWorkflowCandidate, resolveWorkflowPaths, validateWorkflowText, } from "../workflow-runtime/index.js";
|
|
6
|
+
export const workflowBuildSpec = {
|
|
7
|
+
id: ["workflow", "build"],
|
|
8
|
+
group: "Workflow",
|
|
9
|
+
summary: "Build WORKFLOW.md from template layers with strict rendering checks.",
|
|
10
|
+
options: [
|
|
11
|
+
{
|
|
12
|
+
kind: "boolean",
|
|
13
|
+
name: "validate",
|
|
14
|
+
default: false,
|
|
15
|
+
description: "Validate built workflow and fail on errors.",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
kind: "boolean",
|
|
19
|
+
name: "dry-run",
|
|
20
|
+
default: false,
|
|
21
|
+
description: "Do not publish; print candidate and diagnostics only.",
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
examples: [
|
|
25
|
+
{
|
|
26
|
+
cmd: "agentplane workflow build --validate --dry-run",
|
|
27
|
+
why: "Build and validate candidate workflow without publishing.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
cmd: "agentplane workflow build --validate",
|
|
31
|
+
why: "Build, validate, and atomically publish workflow.",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
parse: (raw) => ({
|
|
35
|
+
validate: raw.opts.validate === true,
|
|
36
|
+
dryRun: raw.opts["dry-run"] === true,
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
async function maybeReadOverride(paths) {
|
|
40
|
+
const overridePath = path.join(paths.workflowDir, "template.override.md");
|
|
41
|
+
try {
|
|
42
|
+
return await fs.readFile(overridePath, "utf8");
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export const runWorkflowBuild = async (ctx, flags) => {
|
|
49
|
+
const resolved = await resolveProject({ cwd: ctx.cwd, rootOverride: ctx.rootOverride ?? null });
|
|
50
|
+
const configLoaded = await loadConfig(resolved.agentplaneDir);
|
|
51
|
+
const workflowPaths = resolveWorkflowPaths(resolved.gitRoot);
|
|
52
|
+
const runtimeContext = {
|
|
53
|
+
workflow: {
|
|
54
|
+
mode: configLoaded.config.workflow_mode,
|
|
55
|
+
version: 1,
|
|
56
|
+
},
|
|
57
|
+
runtime: {
|
|
58
|
+
repo_root: resolved.gitRoot,
|
|
59
|
+
timestamp: new Date().toISOString(),
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const overrideTemplate = await maybeReadOverride(workflowPaths);
|
|
63
|
+
const built = buildWorkflowFromTemplates({
|
|
64
|
+
baseTemplate: DEFAULT_WORKFLOW_TEMPLATE,
|
|
65
|
+
projectOverrideTemplate: overrideTemplate,
|
|
66
|
+
runtimeContext,
|
|
67
|
+
});
|
|
68
|
+
if (flags.dryRun) {
|
|
69
|
+
process.stdout.write(`${built.text}\n`);
|
|
70
|
+
}
|
|
71
|
+
let diagnostics = [...built.diagnostics];
|
|
72
|
+
if (flags.validate || flags.dryRun) {
|
|
73
|
+
const validation = await validateWorkflowText(resolved.gitRoot, built.text);
|
|
74
|
+
diagnostics = [...diagnostics, ...validation.diagnostics];
|
|
75
|
+
}
|
|
76
|
+
const hasError = diagnostics.some((d) => d.severity === "ERROR");
|
|
77
|
+
if (diagnostics.length > 0) {
|
|
78
|
+
process.stderr.write(`${warnMessage(`workflow diagnostics: ${diagnosticsSummary(diagnostics)}`)}\n`);
|
|
79
|
+
for (const diagnostic of diagnostics) {
|
|
80
|
+
process.stderr.write(`- [${diagnostic.severity}] ${diagnostic.code} ${diagnostic.path}: ${diagnostic.message}\n`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (flags.dryRun) {
|
|
84
|
+
return hasError ? 1 : 0;
|
|
85
|
+
}
|
|
86
|
+
const publish = await publishWorkflowCandidate(resolved.gitRoot, built.text);
|
|
87
|
+
if (!publish.ok) {
|
|
88
|
+
process.stderr.write(warnMessage("workflow publish failed") + "\n");
|
|
89
|
+
for (const diagnostic of publish.diagnostics) {
|
|
90
|
+
process.stderr.write(`- [${diagnostic.severity}] ${diagnostic.code} ${diagnostic.path}: ${diagnostic.message}\n`);
|
|
91
|
+
}
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
process.stdout.write(successMessage("workflow build", undefined, `Published ${path.relative(resolved.gitRoot, workflowPaths.workflowPath)}`) + "\n");
|
|
95
|
+
return hasError && flags.validate ? 1 : 0;
|
|
96
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CommandHandler, type CommandSpec } from "../cli/spec/spec.js";
|
|
2
|
+
type WorkflowPlaybookParsed = Record<string, never>;
|
|
3
|
+
export declare const workflowDebugSpec: CommandSpec<WorkflowPlaybookParsed>;
|
|
4
|
+
export declare const workflowSyncSpec: CommandSpec<WorkflowPlaybookParsed>;
|
|
5
|
+
export declare const workflowLandSpec: CommandSpec<WorkflowPlaybookParsed>;
|
|
6
|
+
export declare const runWorkflowDebug: CommandHandler<WorkflowPlaybookParsed>;
|
|
7
|
+
export declare const runWorkflowSync: CommandHandler<WorkflowPlaybookParsed>;
|
|
8
|
+
export declare const runWorkflowLand: CommandHandler<WorkflowPlaybookParsed>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=workflow-playbook.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-playbook.command.d.ts","sourceRoot":"","sources":["../../src/commands/workflow-playbook.command.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoC5E,KAAK,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AA2JpD,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,sBAAsB,CAMjE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,sBAAsB,CAMhE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,sBAAsB,CAMhE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,sBAAsB,CAEnE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,sBAAsB,CAElE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,sBAAsB,CAElE,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { atomicWriteFile, resolveProject } from "@agentplaneorg/core";
|
|
7
|
+
import { mapCoreError } from "../cli/error-map.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const AGENTPLANE_BIN = fileURLToPath(new URL("../../bin/agentplane.js", import.meta.url));
|
|
10
|
+
const MAX_LOG_CHARS = 8000;
|
|
11
|
+
function truncate(text) {
|
|
12
|
+
if (text.length <= MAX_LOG_CHARS)
|
|
13
|
+
return text;
|
|
14
|
+
const rest = text.length - MAX_LOG_CHARS;
|
|
15
|
+
return `${text.slice(0, MAX_LOG_CHARS)}\n...[truncated ${rest} chars]`;
|
|
16
|
+
}
|
|
17
|
+
function toSafeToken(value) {
|
|
18
|
+
return value.replaceAll(/[^a-zA-Z0-9._-]/g, "_");
|
|
19
|
+
}
|
|
20
|
+
function buildEvidencePath(repoRoot, mode, startedAt) {
|
|
21
|
+
const token = toSafeToken(startedAt);
|
|
22
|
+
return path.join(repoRoot, ".agentplane", "workflows", "evidence", `${mode}-${token}.json`);
|
|
23
|
+
}
|
|
24
|
+
function buildPlaybookCommands(opts) {
|
|
25
|
+
const ap = (...args) => ({
|
|
26
|
+
kind: "agentplane",
|
|
27
|
+
args: [...args, "--root", opts.repoRoot],
|
|
28
|
+
});
|
|
29
|
+
if (opts.mode === "debug") {
|
|
30
|
+
return [
|
|
31
|
+
ap("preflight", "--json", "--mode", "quick"),
|
|
32
|
+
ap("doctor"),
|
|
33
|
+
{ kind: "git", args: ["status", "--short", "--untracked-files=no"] },
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
if (opts.mode === "sync") {
|
|
37
|
+
return [
|
|
38
|
+
ap("task", "list"),
|
|
39
|
+
ap("task", "export"),
|
|
40
|
+
{ kind: "git", args: ["status", "--short", "--untracked-files=no"] },
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
return [
|
|
44
|
+
ap("preflight", "--json", "--mode", "full"),
|
|
45
|
+
ap("doctor"),
|
|
46
|
+
{ kind: "git", args: ["status", "--short", "--untracked-files=no"] },
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
async function runWorkflowPlaybookCommand(opts) {
|
|
50
|
+
const startedMs = Date.now();
|
|
51
|
+
const startedAt = new Date(startedMs).toISOString();
|
|
52
|
+
let command = "";
|
|
53
|
+
let args = [];
|
|
54
|
+
if (opts.command.kind === "agentplane") {
|
|
55
|
+
command = process.execPath;
|
|
56
|
+
args = [AGENTPLANE_BIN, ...opts.command.args];
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
command = "git";
|
|
60
|
+
args = [...opts.command.args];
|
|
61
|
+
}
|
|
62
|
+
let exitCode = 0;
|
|
63
|
+
let stdout = "";
|
|
64
|
+
let stderr = "";
|
|
65
|
+
try {
|
|
66
|
+
const result = await execFileAsync(command, args, {
|
|
67
|
+
cwd: opts.repoRoot,
|
|
68
|
+
env: {
|
|
69
|
+
...process.env,
|
|
70
|
+
AGENTPLANE_NO_UPDATE_CHECK: process.env.AGENTPLANE_NO_UPDATE_CHECK ?? "1",
|
|
71
|
+
AGENTPLANE_DEV_ALLOW_STALE_DIST: process.env.AGENTPLANE_DEV_ALLOW_STALE_DIST ?? "1",
|
|
72
|
+
},
|
|
73
|
+
encoding: "utf8",
|
|
74
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
75
|
+
});
|
|
76
|
+
stdout = String(result.stdout ?? "");
|
|
77
|
+
stderr = String(result.stderr ?? "");
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const failed = err;
|
|
81
|
+
exitCode = typeof failed.code === "number" ? failed.code : 1;
|
|
82
|
+
stdout = typeof failed.stdout === "string" ? failed.stdout : "";
|
|
83
|
+
stderr = typeof failed.stderr === "string" ? failed.stderr : "";
|
|
84
|
+
if (!stderr && typeof failed.code === "string") {
|
|
85
|
+
stderr = failed.code;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const endedMs = Date.now();
|
|
89
|
+
return {
|
|
90
|
+
display: `${command} ${args.join(" ")}`.trim(),
|
|
91
|
+
started_at: startedAt,
|
|
92
|
+
ended_at: new Date(endedMs).toISOString(),
|
|
93
|
+
duration_ms: Math.max(0, endedMs - startedMs),
|
|
94
|
+
exit_code: exitCode,
|
|
95
|
+
stdout_tail: truncate(stdout),
|
|
96
|
+
stderr_tail: truncate(stderr),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function runWorkflowPlaybook(opts) {
|
|
100
|
+
try {
|
|
101
|
+
const resolved = await resolveProject({
|
|
102
|
+
cwd: opts.cwd,
|
|
103
|
+
rootOverride: opts.rootOverride ?? null,
|
|
104
|
+
});
|
|
105
|
+
const startedAt = new Date().toISOString();
|
|
106
|
+
const evidencePath = buildEvidencePath(resolved.gitRoot, opts.mode, startedAt);
|
|
107
|
+
const commands = buildPlaybookCommands({ mode: opts.mode, repoRoot: resolved.gitRoot });
|
|
108
|
+
const results = [];
|
|
109
|
+
let failed = false;
|
|
110
|
+
for (const command of commands) {
|
|
111
|
+
const result = await runWorkflowPlaybookCommand({
|
|
112
|
+
command,
|
|
113
|
+
repoRoot: resolved.gitRoot,
|
|
114
|
+
});
|
|
115
|
+
results.push(result);
|
|
116
|
+
if (result.stdout_tail)
|
|
117
|
+
process.stdout.write(`${result.stdout_tail}\n`);
|
|
118
|
+
if (result.stderr_tail)
|
|
119
|
+
process.stderr.write(`${result.stderr_tail}\n`);
|
|
120
|
+
if (result.exit_code !== 0)
|
|
121
|
+
failed = true;
|
|
122
|
+
}
|
|
123
|
+
await mkdir(path.dirname(evidencePath), { recursive: true });
|
|
124
|
+
const evidence = {
|
|
125
|
+
schema_version: 1,
|
|
126
|
+
mode: opts.mode,
|
|
127
|
+
status: failed ? "failed" : "success",
|
|
128
|
+
started_at: startedAt,
|
|
129
|
+
ended_at: new Date().toISOString(),
|
|
130
|
+
repo_root: resolved.gitRoot,
|
|
131
|
+
evidence_path: evidencePath,
|
|
132
|
+
commands: results,
|
|
133
|
+
};
|
|
134
|
+
await atomicWriteFile(evidencePath, `${JSON.stringify(evidence, null, 2)}\n`);
|
|
135
|
+
process.stdout.write(`Evidence: ${path.relative(resolved.gitRoot, evidencePath)}\n`);
|
|
136
|
+
return failed ? 1 : 0;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
throw mapCoreError(err, {
|
|
140
|
+
command: `workflow ${opts.mode}`,
|
|
141
|
+
root: opts.rootOverride ?? null,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export const workflowDebugSpec = {
|
|
146
|
+
id: ["workflow", "debug"],
|
|
147
|
+
group: "Workflow",
|
|
148
|
+
summary: "Run built-in debug checks and capture workflow evidence.",
|
|
149
|
+
parse: () => ({}),
|
|
150
|
+
examples: [{ cmd: "agentplane workflow debug", why: "Collect debug readiness evidence." }],
|
|
151
|
+
};
|
|
152
|
+
export const workflowSyncSpec = {
|
|
153
|
+
id: ["workflow", "sync"],
|
|
154
|
+
group: "Workflow",
|
|
155
|
+
summary: "Run built-in sync checks and capture workflow evidence.",
|
|
156
|
+
parse: () => ({}),
|
|
157
|
+
examples: [{ cmd: "agentplane workflow sync", why: "Collect sync-state evidence." }],
|
|
158
|
+
};
|
|
159
|
+
export const workflowLandSpec = {
|
|
160
|
+
id: ["workflow", "land"],
|
|
161
|
+
group: "Workflow",
|
|
162
|
+
summary: "Run built-in pre-land checks and capture workflow evidence.",
|
|
163
|
+
parse: () => ({}),
|
|
164
|
+
examples: [{ cmd: "agentplane workflow land", why: "Collect land-readiness evidence." }],
|
|
165
|
+
};
|
|
166
|
+
export const runWorkflowDebug = async (ctx) => {
|
|
167
|
+
return await runWorkflowPlaybook({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, mode: "debug" });
|
|
168
|
+
};
|
|
169
|
+
export const runWorkflowSync = async (ctx) => {
|
|
170
|
+
return await runWorkflowPlaybook({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, mode: "sync" });
|
|
171
|
+
};
|
|
172
|
+
export const runWorkflowLand = async (ctx) => {
|
|
173
|
+
return await runWorkflowPlaybook({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, mode: "land" });
|
|
174
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CommandHandler, CommandSpec } from "../cli/spec/spec.js";
|
|
2
|
+
export type WorkflowRestoreParsed = Record<string, never>;
|
|
3
|
+
export declare const workflowRestoreSpec: CommandSpec<WorkflowRestoreParsed>;
|
|
4
|
+
export declare const runWorkflowRestore: CommandHandler<WorkflowRestoreParsed>;
|
|
5
|
+
//# sourceMappingURL=workflow-restore.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-restore.command.d.ts","sourceRoot":"","sources":["../../src/commands/workflow-restore.command.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,qBAAqB,CAWlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,qBAAqB,CAuBpE,CAAC"}
|