agentplane 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-manifest.json +106 -96
- package/dist/adapters/task-backend/task-backend-adapter.d.ts +2 -2
- package/dist/adapters/task-backend/task-backend-adapter.d.ts.map +1 -1
- package/dist/adapters/task-backend/task-backend-adapter.js +2 -2
- package/dist/backends/task-backend/local-backend.d.ts +7 -5
- package/dist/backends/task-backend/local-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/local-backend.js +79 -7
- package/dist/backends/task-backend/redmine/env.d.ts +1 -1
- package/dist/backends/task-backend/redmine/env.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine/env.js +3 -0
- package/dist/backends/task-backend/redmine/inspect.d.ts +11 -0
- package/dist/backends/task-backend/redmine/inspect.d.ts.map +1 -0
- package/dist/backends/task-backend/redmine/inspect.js +75 -0
- package/dist/backends/task-backend/redmine/mapping.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine/mapping.js +21 -2
- package/dist/backends/task-backend/redmine/state.d.ts +17 -0
- package/dist/backends/task-backend/redmine/state.d.ts.map +1 -0
- package/dist/backends/task-backend/redmine/state.js +95 -0
- package/dist/backends/task-backend/redmine-backend.d.ts +10 -16
- package/dist/backends/task-backend/redmine-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine-backend.js +205 -15
- package/dist/backends/task-backend/shared/constants.d.ts +1 -1
- package/dist/backends/task-backend/shared/constants.js +1 -1
- package/dist/backends/task-backend/shared/record.d.ts.map +1 -1
- package/dist/backends/task-backend/shared/record.js +20 -1
- package/dist/backends/task-backend/shared/types.d.ts +42 -4
- package/dist/backends/task-backend/shared/types.d.ts.map +1 -1
- package/dist/backends/task-backend/shared.d.ts +1 -1
- package/dist/backends/task-backend/shared.d.ts.map +1 -1
- package/dist/backends/task-backend.d.ts +1 -1
- package/dist/backends/task-backend.d.ts.map +1 -1
- package/dist/backends/task-index.d.ts.map +1 -1
- package/dist/backends/task-index.js +1 -0
- package/dist/cli/run-cli/command-catalog/project.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/project.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/project.js +3 -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/commands/init/write-env.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init/write-env.js +12 -0
- package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
- package/dist/cli/run-cli.test-helpers.js +2 -0
- package/dist/commands/backend/sync.command.d.ts +5 -1
- package/dist/commands/backend/sync.command.d.ts.map +1 -1
- package/dist/commands/backend/sync.command.js +67 -3
- package/dist/commands/backend.d.ts +22 -0
- package/dist/commands/backend.d.ts.map +1 -1
- package/dist/commands/backend.js +110 -1
- package/dist/commands/commit.spec.d.ts.map +1 -1
- package/dist/commands/commit.spec.js +30 -6
- package/dist/commands/doctor/workspace.d.ts +8 -0
- package/dist/commands/doctor/workspace.d.ts.map +1 -1
- package/dist/commands/doctor/workspace.js +127 -3
- package/dist/commands/guard/commit.command.d.ts.map +1 -1
- package/dist/commands/guard/commit.command.js +30 -6
- package/dist/commands/guard/impl/allow.d.ts +4 -0
- package/dist/commands/guard/impl/allow.d.ts.map +1 -1
- package/dist/commands/guard/impl/allow.js +14 -3
- package/dist/commands/guard/impl/commands.d.ts.map +1 -1
- package/dist/commands/guard/impl/commands.js +11 -2
- package/dist/commands/shared/task-backend.d.ts +1 -1
- package/dist/commands/shared/task-backend.d.ts.map +1 -1
- package/dist/commands/shared/task-backend.js +9 -0
- package/dist/commands/shared/task-store.d.ts +61 -2
- package/dist/commands/shared/task-store.d.ts.map +1 -1
- package/dist/commands/shared/task-store.js +298 -60
- package/dist/commands/task/block.d.ts.map +1 -1
- package/dist/commands/task/block.js +58 -37
- package/dist/commands/task/close-shared.d.ts.map +1 -1
- package/dist/commands/task/close-shared.js +17 -20
- package/dist/commands/task/comment.d.ts.map +1 -1
- package/dist/commands/task/comment.js +14 -19
- package/dist/commands/task/derive.command.d.ts +1 -0
- package/dist/commands/task/derive.command.d.ts.map +1 -1
- package/dist/commands/task/derive.command.js +15 -2
- package/dist/commands/task/derive.d.ts +1 -0
- package/dist/commands/task/derive.d.ts.map +1 -1
- package/dist/commands/task/derive.js +27 -4
- package/dist/commands/task/doc.d.ts.map +1 -1
- package/dist/commands/task/doc.js +16 -5
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +41 -41
- package/dist/commands/task/migrate-doc.d.ts +15 -0
- package/dist/commands/task/migrate-doc.d.ts.map +1 -1
- package/dist/commands/task/migrate-doc.js +126 -35
- package/dist/commands/task/new.d.ts.map +1 -1
- package/dist/commands/task/new.js +3 -1
- package/dist/commands/task/plan.js +28 -28
- package/dist/commands/task/set-status.d.ts.map +1 -1
- package/dist/commands/task/set-status.js +104 -61
- package/dist/commands/task/shared/dependencies.d.ts +1 -0
- package/dist/commands/task/shared/dependencies.d.ts.map +1 -1
- package/dist/commands/task/shared/dependencies.js +10 -0
- package/dist/commands/task/shared/docs.js +1 -1
- package/dist/commands/task/shared/transitions.d.ts +17 -0
- package/dist/commands/task/shared/transitions.d.ts.map +1 -1
- package/dist/commands/task/shared/transitions.js +20 -7
- package/dist/commands/task/shared.d.ts +2 -2
- package/dist/commands/task/shared.d.ts.map +1 -1
- package/dist/commands/task/shared.js +2 -2
- package/dist/commands/task/start.d.ts.map +1 -1
- package/dist/commands/task/start.js +33 -28
- package/dist/commands/task/verify-record.d.ts.map +1 -1
- package/dist/commands/task/verify-record.js +32 -32
- package/dist/commands/upgrade/apply.d.ts +2 -0
- package/dist/commands/upgrade/apply.d.ts.map +1 -1
- package/dist/commands/upgrade/apply.js +33 -1
- package/dist/commands/upgrade.command.d.ts.map +1 -1
- package/dist/commands/upgrade.command.js +25 -0
- package/dist/commands/upgrade.d.ts +1 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +34 -0
- package/dist/policy/rules/allowlist.d.ts.map +1 -1
- package/dist/policy/rules/allowlist.js +12 -9
- package/dist/ports/task-backend-port.d.ts +2 -2
- package/dist/ports/task-backend-port.d.ts.map +1 -1
- package/dist/shared/protected-paths.d.ts +10 -0
- package/dist/shared/protected-paths.d.ts.map +1 -1
- package/dist/shared/protected-paths.js +33 -0
- package/package.json +2 -2
|
@@ -234,11 +234,6 @@ export async function cmdTaskPlanApprove(opts) {
|
|
|
234
234
|
});
|
|
235
235
|
}
|
|
236
236
|
const note = typeof opts.note === "string" ? opts.note.trim() : "";
|
|
237
|
-
const existingDoc = useStore
|
|
238
|
-
? String(task.doc ?? "")
|
|
239
|
-
: (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
|
|
240
|
-
const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
|
|
241
|
-
assertPlanCanBeApproved({ task, config, doc: baseDoc });
|
|
242
237
|
const approvedAt = nowIso();
|
|
243
238
|
await (useStore
|
|
244
239
|
? store.patch(opts.taskId, (current) => {
|
|
@@ -255,15 +250,20 @@ export async function cmdTaskPlanApprove(opts) {
|
|
|
255
250
|
},
|
|
256
251
|
};
|
|
257
252
|
})
|
|
258
|
-
:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
253
|
+
: (async () => {
|
|
254
|
+
const existingDoc = (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
|
|
255
|
+
const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
|
|
256
|
+
assertPlanCanBeApproved({ task, config, doc: baseDoc });
|
|
257
|
+
await backend.writeTask({
|
|
258
|
+
...task,
|
|
259
|
+
plan_approval: {
|
|
260
|
+
state: "approved",
|
|
261
|
+
updated_at: approvedAt,
|
|
262
|
+
updated_by: by,
|
|
263
|
+
note: note || null,
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
})());
|
|
267
267
|
return 0;
|
|
268
268
|
}
|
|
269
269
|
catch (err) {
|
|
@@ -297,11 +297,6 @@ export async function cmdTaskPlanReject(opts) {
|
|
|
297
297
|
message: "Invalid value for --note: empty.",
|
|
298
298
|
});
|
|
299
299
|
}
|
|
300
|
-
const existingDoc = useStore
|
|
301
|
-
? String(task.doc ?? "")
|
|
302
|
-
: (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
|
|
303
|
-
const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
|
|
304
|
-
assertPlanSectionPresent(task.id, baseDoc, "reject");
|
|
305
300
|
const rejectedAt = nowIso();
|
|
306
301
|
await (useStore
|
|
307
302
|
? store.patch(opts.taskId, (current) => {
|
|
@@ -318,15 +313,20 @@ export async function cmdTaskPlanReject(opts) {
|
|
|
318
313
|
},
|
|
319
314
|
};
|
|
320
315
|
})
|
|
321
|
-
:
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
316
|
+
: (async () => {
|
|
317
|
+
const existingDoc = (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
|
|
318
|
+
const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
|
|
319
|
+
assertPlanSectionPresent(task.id, baseDoc, "reject");
|
|
320
|
+
await backend.writeTask({
|
|
321
|
+
...task,
|
|
322
|
+
plan_approval: {
|
|
323
|
+
state: "rejected",
|
|
324
|
+
updated_at: rejectedAt,
|
|
325
|
+
updated_by: by,
|
|
326
|
+
note: note || null,
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
})());
|
|
330
330
|
return 0;
|
|
331
331
|
}
|
|
332
332
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-status.d.ts","sourceRoot":"","sources":["../../../src/commands/task/set-status.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"set-status.d.ts","sourceRoot":"","sources":["../../../src/commands/task/set-status.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AA2BnC,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;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,GAAG,OAAO,CAAC,MAAM,CAAC,CA2OlB"}
|
|
@@ -5,8 +5,8 @@ import { CliError } from "../../shared/errors.js";
|
|
|
5
5
|
import { commitFromComment } from "../guard/index.js";
|
|
6
6
|
import { ensureActionApproved } from "../shared/approval-requirements.js";
|
|
7
7
|
import { loadCommandContext, loadTaskFromContext, resolveDocUpdatedBy, } from "../shared/task-backend.js";
|
|
8
|
-
import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
|
|
9
|
-
import { appendTaskEvent, defaultCommitEmojiForStatus, ensureCommentCommitAllowed, ensureStatusTransitionAllowed, normalizeTaskDocVersion, normalizeTaskStatus, nowIso, readCommitInfo, resolveTaskDependencyState, resolvePrimaryTag, toStringArray, } from "./shared.js";
|
|
8
|
+
import { appendTaskCommentIntent, appendTaskEventIntent, backendIsLocalFileBackend, getTaskStore, mutateTaskStore, setTaskFieldsIntent, touchTaskDocMetaIntent, } from "../shared/task-store.js";
|
|
9
|
+
import { appendTaskEvent, dependencyWarningMessages, defaultCommitEmojiForStatus, ensureCommentCommitAllowed, resolveCommentCommitWarning, ensureStatusTransitionAllowed, normalizeTaskDocVersion, normalizeTaskStatus, nowIso, readCommitInfo, resolveTaskDependencyState, resolvePrimaryTag, toStringArray, } from "./shared.js";
|
|
10
10
|
export async function cmdTaskSetStatus(opts) {
|
|
11
11
|
const nextStatus = normalizeTaskStatus(opts.status);
|
|
12
12
|
if (nextStatus === "DONE" && !opts.force) {
|
|
@@ -42,38 +42,40 @@ export async function cmdTaskSetStatus(opts) {
|
|
|
42
42
|
? await store.get(opts.taskId)
|
|
43
43
|
: await loadTaskFromContext({ ctx, taskId: opts.taskId });
|
|
44
44
|
const currentStatus = String(task.status || "TODO").toUpperCase();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
45
|
+
if (!useStore) {
|
|
46
|
+
ensureStatusTransitionAllowed({
|
|
47
|
+
currentStatus,
|
|
48
|
+
nextStatus,
|
|
49
|
+
force: opts.force,
|
|
50
|
+
});
|
|
51
|
+
if (!opts.force && (nextStatus === "DOING" || nextStatus === "DONE")) {
|
|
52
|
+
const dep = await resolveTaskDependencyState(task, ctx.taskBackend);
|
|
53
|
+
if (dep.missing.length > 0 || dep.incomplete.length > 0) {
|
|
54
|
+
if (!opts.quiet) {
|
|
55
|
+
if (dep.missing.length > 0) {
|
|
56
|
+
process.stderr.write(`${warnMessage(`missing deps: ${dep.missing.join(", ")}`)}\n`);
|
|
57
|
+
}
|
|
58
|
+
if (dep.incomplete.length > 0) {
|
|
59
|
+
process.stderr.write(`${warnMessage(`incomplete deps: ${dep.incomplete.join(", ")}`)}\n`);
|
|
60
|
+
}
|
|
59
61
|
}
|
|
62
|
+
throw new CliError({
|
|
63
|
+
exitCode: 2,
|
|
64
|
+
code: "E_USAGE",
|
|
65
|
+
message: `Task is not ready: ${task.id} (use --force to override)`,
|
|
66
|
+
});
|
|
60
67
|
}
|
|
61
|
-
throw new CliError({
|
|
62
|
-
exitCode: 2,
|
|
63
|
-
code: "E_USAGE",
|
|
64
|
-
message: `Task is not ready: ${task.id} (use --force to override)`,
|
|
65
|
-
});
|
|
66
68
|
}
|
|
69
|
+
ensureCommentCommitAllowed({
|
|
70
|
+
enabled: opts.commitFromComment,
|
|
71
|
+
config,
|
|
72
|
+
action: "task set-status",
|
|
73
|
+
confirmed: opts.confirmStatusCommit,
|
|
74
|
+
quiet: opts.quiet,
|
|
75
|
+
statusFrom: currentStatus,
|
|
76
|
+
statusTo: nextStatus,
|
|
77
|
+
});
|
|
67
78
|
}
|
|
68
|
-
ensureCommentCommitAllowed({
|
|
69
|
-
enabled: opts.commitFromComment,
|
|
70
|
-
config,
|
|
71
|
-
action: "task set-status",
|
|
72
|
-
confirmed: opts.confirmStatusCommit,
|
|
73
|
-
quiet: opts.quiet,
|
|
74
|
-
statusFrom: currentStatus,
|
|
75
|
-
statusTo: nextStatus,
|
|
76
|
-
});
|
|
77
79
|
const existingComments = Array.isArray(task.comments)
|
|
78
80
|
? task.comments.filter((item) => !!item && typeof item.author === "string" && typeof item.body === "string")
|
|
79
81
|
: [];
|
|
@@ -91,6 +93,9 @@ export async function cmdTaskSetStatus(opts) {
|
|
|
91
93
|
const nextCommit = opts.commit
|
|
92
94
|
? { hash: commitInfo.hash, message: commitInfo.message }
|
|
93
95
|
: undefined;
|
|
96
|
+
let currentStatusForCommit = currentStatus;
|
|
97
|
+
let primaryTagForCommit = resolvePrimaryTag(toStringArray(task.tags), ctx).primary;
|
|
98
|
+
let deferredWarnings = [];
|
|
94
99
|
const next = {
|
|
95
100
|
...task,
|
|
96
101
|
status: nextStatus,
|
|
@@ -110,41 +115,79 @@ export async function cmdTaskSetStatus(opts) {
|
|
|
110
115
|
if (opts.commit) {
|
|
111
116
|
next.commit = nextCommit;
|
|
112
117
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
currentStatus
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
try {
|
|
119
|
+
await (useStore
|
|
120
|
+
? mutateTaskStore(store, opts.taskId, async (current) => {
|
|
121
|
+
deferredWarnings = [];
|
|
122
|
+
const currentStatus = String(current.status || "TODO").toUpperCase();
|
|
123
|
+
currentStatusForCommit = currentStatus;
|
|
124
|
+
primaryTagForCommit = resolvePrimaryTag(toStringArray(current.tags), ctx).primary;
|
|
125
|
+
ensureStatusTransitionAllowed({
|
|
126
|
+
currentStatus,
|
|
127
|
+
nextStatus,
|
|
128
|
+
force: opts.force,
|
|
129
|
+
});
|
|
130
|
+
if (!opts.force && (nextStatus === "DOING" || nextStatus === "DONE")) {
|
|
131
|
+
const dep = await resolveTaskDependencyState(current, ctx.taskBackend);
|
|
132
|
+
deferredWarnings = [...deferredWarnings, ...dependencyWarningMessages(dep)];
|
|
133
|
+
if (dep.missing.length > 0 || dep.incomplete.length > 0) {
|
|
134
|
+
throw new CliError({
|
|
135
|
+
exitCode: 2,
|
|
136
|
+
code: "E_USAGE",
|
|
137
|
+
message: `Task is not ready: ${current.id} (use --force to override)`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const commitWarning = resolveCommentCommitWarning({
|
|
142
|
+
enabled: opts.commitFromComment,
|
|
143
|
+
config,
|
|
144
|
+
action: "task set-status",
|
|
145
|
+
confirmed: opts.confirmStatusCommit,
|
|
146
|
+
quiet: opts.quiet,
|
|
147
|
+
statusFrom: currentStatus,
|
|
148
|
+
statusTo: nextStatus,
|
|
149
|
+
});
|
|
150
|
+
if (commitWarning)
|
|
151
|
+
deferredWarnings.push(commitWarning);
|
|
152
|
+
const currentEventAuthor = resolveDocUpdatedBy(current, opts.author);
|
|
153
|
+
const intents = [
|
|
154
|
+
setTaskFieldsIntent({
|
|
155
|
+
status: nextStatus,
|
|
156
|
+
...(nextCommit ? { commit: nextCommit } : {}),
|
|
157
|
+
}),
|
|
158
|
+
appendTaskEventIntent({
|
|
132
159
|
type: "status",
|
|
133
160
|
at,
|
|
134
161
|
author: currentEventAuthor,
|
|
135
162
|
from: currentStatus,
|
|
136
163
|
to: nextStatus,
|
|
137
164
|
note: commentBody,
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
165
|
+
}),
|
|
166
|
+
touchTaskDocMetaIntent({
|
|
167
|
+
updatedBy: currentEventAuthor,
|
|
168
|
+
version: normalizeTaskDocVersion(current.doc_version),
|
|
169
|
+
}),
|
|
170
|
+
];
|
|
171
|
+
if (commentBody) {
|
|
172
|
+
intents.splice(1, 0, appendTaskCommentIntent({ author: opts.author, body: commentBody }));
|
|
173
|
+
}
|
|
174
|
+
return intents;
|
|
175
|
+
})
|
|
176
|
+
: ctx.taskBackend.writeTask(next));
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
if (err instanceof CliError && !opts.quiet) {
|
|
180
|
+
for (const warning of new Set(deferredWarnings)) {
|
|
181
|
+
process.stderr.write(`${warnMessage(warning)}\n`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
if (!opts.quiet) {
|
|
187
|
+
for (const warning of new Set(deferredWarnings)) {
|
|
188
|
+
process.stderr.write(`${warnMessage(warning)}\n`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
148
191
|
// tasks.json is export-only; generated via `agentplane task export`.
|
|
149
192
|
if (opts.commitFromComment) {
|
|
150
193
|
if (!opts.body) {
|
|
@@ -159,9 +202,9 @@ export async function cmdTaskSetStatus(opts) {
|
|
|
159
202
|
cwd: opts.cwd,
|
|
160
203
|
rootOverride: opts.rootOverride,
|
|
161
204
|
taskId: opts.taskId,
|
|
162
|
-
primaryTag:
|
|
205
|
+
primaryTag: primaryTagForCommit,
|
|
163
206
|
author: opts.author,
|
|
164
|
-
statusFrom:
|
|
207
|
+
statusFrom: currentStatusForCommit,
|
|
165
208
|
statusTo: nextStatus,
|
|
166
209
|
commentBody: opts.body,
|
|
167
210
|
formattedComment: formatCommentBodyForCommit(opts.body, config),
|
|
@@ -10,6 +10,7 @@ export declare function ensureTaskDependsOnGraphIsAcyclic(opts: {
|
|
|
10
10
|
dependsOn: string[];
|
|
11
11
|
}): Promise<void>;
|
|
12
12
|
export declare function resolveTaskDependencyState(task: TaskData, backend: Pick<TaskBackend, "getTask" | "getTasks">): Promise<DependencyState>;
|
|
13
|
+
export declare function dependencyWarningMessages(dep: DependencyState): string[];
|
|
13
14
|
export declare function buildDependencyState(tasks: TaskData[]): Map<string, DependencyState>;
|
|
14
15
|
export declare function formatTaskLine(task: TaskData, depState?: DependencyState): string;
|
|
15
16
|
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../../src/commands/task/shared/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAK/E,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAkCF,wBAAsB,iCAAiC,CAAC,IAAI,EAAE;IAC5D,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhB;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,GACjD,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAqBpF;AAgBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAejF"}
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../../src/commands/task/shared/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAK/E,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAkCF,wBAAsB,iCAAiC,CAAC,IAAI,EAAE;IAC5D,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhB;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,GACjD,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CASxE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAqBpF;AAgBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAejF"}
|
|
@@ -83,6 +83,16 @@ export async function resolveTaskDependencyState(task, backend) {
|
|
|
83
83
|
}
|
|
84
84
|
return { dependsOn, missing, incomplete };
|
|
85
85
|
}
|
|
86
|
+
export function dependencyWarningMessages(dep) {
|
|
87
|
+
const warnings = [];
|
|
88
|
+
if (dep.missing.length > 0) {
|
|
89
|
+
warnings.push(`missing deps: ${dep.missing.join(", ")}`);
|
|
90
|
+
}
|
|
91
|
+
if (dep.incomplete.length > 0) {
|
|
92
|
+
warnings.push(`incomplete deps: ${dep.incomplete.join(", ")}`);
|
|
93
|
+
}
|
|
94
|
+
return warnings;
|
|
95
|
+
}
|
|
86
96
|
export function buildDependencyState(tasks) {
|
|
87
97
|
const byId = new Map(tasks.map((task) => [task.id, task]));
|
|
88
98
|
const state = new Map();
|
|
@@ -40,7 +40,7 @@ export function isVerifyStepsFilled(sectionText) {
|
|
|
40
40
|
return false;
|
|
41
41
|
return true;
|
|
42
42
|
}
|
|
43
|
-
export function normalizeTaskDocVersion(value, fallback =
|
|
43
|
+
export function normalizeTaskDocVersion(value, fallback = 3) {
|
|
44
44
|
return value === 3 ? 3 : value === 2 ? 2 : fallback;
|
|
45
45
|
}
|
|
46
46
|
export function normalizeVerificationSectionLayout(sectionText, version) {
|
|
@@ -18,6 +18,15 @@ export declare function ensureCommentCommitAllowed(opts: {
|
|
|
18
18
|
statusFrom: string;
|
|
19
19
|
statusTo: string;
|
|
20
20
|
}): void;
|
|
21
|
+
export declare function resolveCommentCommitWarning(opts: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
config: AgentplaneConfig;
|
|
24
|
+
action: string;
|
|
25
|
+
confirmed: boolean;
|
|
26
|
+
quiet: boolean;
|
|
27
|
+
statusFrom: string;
|
|
28
|
+
statusTo: string;
|
|
29
|
+
}): string | null;
|
|
21
30
|
export declare function requireStructuredComment(body: string, prefix: string, minChars: number): void;
|
|
22
31
|
export declare function readHeadCommit(cwd: string): Promise<{
|
|
23
32
|
hash: string;
|
|
@@ -31,6 +40,14 @@ export declare function enforceStatusCommitPolicy(opts: {
|
|
|
31
40
|
statusFrom: string;
|
|
32
41
|
statusTo: string;
|
|
33
42
|
}): void;
|
|
43
|
+
export declare function resolveStatusCommitPolicyWarning(opts: {
|
|
44
|
+
policy: AgentplaneConfig["status_commit_policy"];
|
|
45
|
+
action: string;
|
|
46
|
+
confirmed: boolean;
|
|
47
|
+
quiet: boolean;
|
|
48
|
+
statusFrom: string;
|
|
49
|
+
statusTo: string;
|
|
50
|
+
}): string | null;
|
|
34
51
|
export declare function isMajorStatusCommitTransition(statusFrom: string, statusTo: string): boolean;
|
|
35
52
|
export declare function readCommitInfo(cwd: string, rev: string): Promise<{
|
|
36
53
|
hash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../../../src/commands/task/shared/transitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAK7E,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,CAW7E;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAc3F;AAED,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,gBAAgB,GACvB,IAAI,CAkBN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO1E;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,IAAI,CAUP;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../../../src/commands/task/shared/transitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAK7E,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,CAW7E;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAc3F;AAED,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,gBAAgB,GACvB,IAAI,CAkBN;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO1E;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,IAAI,CAUP;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAKP;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,GAAG,IAAI,CAmBhB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgB7F;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAI5F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAKP;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,MAAM,EAAE,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,GAAG,IAAI,CA2BhB;AAUD,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK3F;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAI5C;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlE"}
|
|
@@ -71,8 +71,14 @@ export function ensureStatusTransitionAllowed(opts) {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
export function ensureCommentCommitAllowed(opts) {
|
|
74
|
+
const warning = resolveCommentCommitWarning(opts);
|
|
75
|
+
if (warning) {
|
|
76
|
+
process.stderr.write(`${warnMessage(warning)}\n`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export function resolveCommentCommitWarning(opts) {
|
|
74
80
|
if (!opts.enabled)
|
|
75
|
-
return;
|
|
81
|
+
return null;
|
|
76
82
|
if (opts.config.commit_automation === "finish_only") {
|
|
77
83
|
throw new CliError({
|
|
78
84
|
exitCode: 2,
|
|
@@ -81,7 +87,7 @@ export function ensureCommentCommitAllowed(opts) {
|
|
|
81
87
|
"(allowed only in finish).",
|
|
82
88
|
});
|
|
83
89
|
}
|
|
84
|
-
|
|
90
|
+
return resolveStatusCommitPolicyWarning({
|
|
85
91
|
policy: opts.config.status_commit_policy,
|
|
86
92
|
action: opts.action,
|
|
87
93
|
confirmed: opts.confirmed,
|
|
@@ -113,6 +119,12 @@ export async function readHeadCommit(cwd) {
|
|
|
113
119
|
return { hash, message: subject };
|
|
114
120
|
}
|
|
115
121
|
export function enforceStatusCommitPolicy(opts) {
|
|
122
|
+
const warning = resolveStatusCommitPolicyWarning(opts);
|
|
123
|
+
if (warning) {
|
|
124
|
+
process.stderr.write(`${warnMessage(warning)}\n`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function resolveStatusCommitPolicyWarning(opts) {
|
|
116
128
|
if (!isMajorStatusCommitTransition(opts.statusFrom, opts.statusTo)) {
|
|
117
129
|
throw new CliError({
|
|
118
130
|
exitCode: 2,
|
|
@@ -122,12 +134,12 @@ export function enforceStatusCommitPolicy(opts) {
|
|
|
122
134
|
});
|
|
123
135
|
}
|
|
124
136
|
if (opts.policy === "off")
|
|
125
|
-
return;
|
|
137
|
+
return null;
|
|
126
138
|
if (opts.policy === "warn") {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
139
|
+
return opts.quiet || opts.confirmed
|
|
140
|
+
? null
|
|
141
|
+
: `${opts.action}: status/comment-driven commit requested; policy=warn ` +
|
|
142
|
+
"(pass --confirm-status-commit to acknowledge)";
|
|
131
143
|
}
|
|
132
144
|
if (opts.policy === "confirm" && !opts.confirmed) {
|
|
133
145
|
throw new CliError({
|
|
@@ -137,6 +149,7 @@ export function enforceStatusCommitPolicy(opts) {
|
|
|
137
149
|
"(pass --confirm-status-commit to proceed)",
|
|
138
150
|
});
|
|
139
151
|
}
|
|
152
|
+
return null;
|
|
140
153
|
}
|
|
141
154
|
const MAJOR_STATUS_COMMIT_TRANSITIONS = new Set([
|
|
142
155
|
"READY->DOING",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { dedupeStrings } from "../../shared/strings.js";
|
|
2
2
|
export { decodeEscapedTaskTextNewlines, nowIso, normalizeTaskDocVersion, taskObservationSectionName, extractTaskObservationSection, VERIFY_STEPS_PLACEHOLDER, VERIFICATION_RESULTS_BEGIN, VERIFICATION_RESULTS_END, extractDocSection, isVerifyStepsFilled, isDocSectionFilled, ensureAgentFilledRequiredDocSections, normalizeVerificationSectionLayout, } from "./shared/docs.js";
|
|
3
3
|
export { normalizeDependsOnInput, normalizeTaskStatus, toStringArray, requiresVerify, type PrimaryTagResolution, type TaskTagPolicy, readTaskTagPolicy, resolvePrimaryTagFromConfig, requiresVerifyStepsByPrimary, requiresVerificationByPrimary, resolvePrimaryTag, warnIfUnknownOwner, } from "./shared/tags.js";
|
|
4
|
-
export { type DependencyState, ensureTaskDependsOnGraphIsAcyclic, resolveTaskDependencyState, buildDependencyState, formatTaskLine, } from "./shared/dependencies.js";
|
|
5
|
-
export { appendTaskEvent, ensurePlanApprovedIfRequired, ensureVerificationSatisfiedIfRequired, isTransitionAllowed, ensureStatusTransitionAllowed, ensureCommentCommitAllowed, requireStructuredComment, enforceStatusCommitPolicy, isMajorStatusCommitTransition, readHeadCommit, readCommitInfo, defaultCommitEmojiForStatus, } from "./shared/transitions.js";
|
|
4
|
+
export { type DependencyState, dependencyWarningMessages, ensureTaskDependsOnGraphIsAcyclic, resolveTaskDependencyState, buildDependencyState, formatTaskLine, } from "./shared/dependencies.js";
|
|
5
|
+
export { appendTaskEvent, ensurePlanApprovedIfRequired, ensureVerificationSatisfiedIfRequired, isTransitionAllowed, ensureStatusTransitionAllowed, ensureCommentCommitAllowed, resolveCommentCommitWarning, requireStructuredComment, enforceStatusCommitPolicy, resolveStatusCommitPolicyWarning, isMajorStatusCommitTransition, readHeadCommit, readCommitInfo, defaultCommitEmojiForStatus, } from "./shared/transitions.js";
|
|
6
6
|
export { type TaskListFilters, parseTaskListFilters, handleTaskListWarnings, taskTextBlob, } from "./shared/listing.js";
|
|
7
7
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EACL,6BAA6B,EAC7B,MAAM,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,eAAe,EACpB,iCAAiC,EACjC,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,qCAAqC,EACrC,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,cAAc,EACd,cAAc,EACd,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,eAAe,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EACL,6BAA6B,EAC7B,MAAM,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,eAAe,EACpB,yBAAyB,EACzB,iCAAiC,EACjC,0BAA0B,EAC1B,oBAAoB,EACpB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,qCAAqC,EACrC,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,6BAA6B,EAC7B,cAAc,EACd,cAAc,EACd,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,eAAe,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { dedupeStrings } from "../../shared/strings.js";
|
|
2
2
|
export { decodeEscapedTaskTextNewlines, nowIso, normalizeTaskDocVersion, taskObservationSectionName, extractTaskObservationSection, VERIFY_STEPS_PLACEHOLDER, VERIFICATION_RESULTS_BEGIN, VERIFICATION_RESULTS_END, extractDocSection, isVerifyStepsFilled, isDocSectionFilled, ensureAgentFilledRequiredDocSections, normalizeVerificationSectionLayout, } from "./shared/docs.js";
|
|
3
3
|
export { normalizeDependsOnInput, normalizeTaskStatus, toStringArray, requiresVerify, readTaskTagPolicy, resolvePrimaryTagFromConfig, requiresVerifyStepsByPrimary, requiresVerificationByPrimary, resolvePrimaryTag, warnIfUnknownOwner, } from "./shared/tags.js";
|
|
4
|
-
export { ensureTaskDependsOnGraphIsAcyclic, resolveTaskDependencyState, buildDependencyState, formatTaskLine, } from "./shared/dependencies.js";
|
|
5
|
-
export { appendTaskEvent, ensurePlanApprovedIfRequired, ensureVerificationSatisfiedIfRequired, isTransitionAllowed, ensureStatusTransitionAllowed, ensureCommentCommitAllowed, requireStructuredComment, enforceStatusCommitPolicy, isMajorStatusCommitTransition, readHeadCommit, readCommitInfo, defaultCommitEmojiForStatus, } from "./shared/transitions.js";
|
|
4
|
+
export { dependencyWarningMessages, ensureTaskDependsOnGraphIsAcyclic, resolveTaskDependencyState, buildDependencyState, formatTaskLine, } from "./shared/dependencies.js";
|
|
5
|
+
export { appendTaskEvent, ensurePlanApprovedIfRequired, ensureVerificationSatisfiedIfRequired, isTransitionAllowed, ensureStatusTransitionAllowed, ensureCommentCommitAllowed, resolveCommentCommitWarning, requireStructuredComment, enforceStatusCommitPolicy, resolveStatusCommitPolicyWarning, isMajorStatusCommitTransition, readHeadCommit, readCommitInfo, defaultCommitEmojiForStatus, } from "./shared/transitions.js";
|
|
6
6
|
export { parseTaskListFilters, handleTaskListWarnings, taskTextBlob, } from "./shared/listing.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/task/start.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/task/start.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAyEnC,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;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;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkLlB"}
|
|
@@ -5,7 +5,7 @@ import { CliError } from "../../shared/errors.js";
|
|
|
5
5
|
import { commitFromComment } from "../guard/index.js";
|
|
6
6
|
import { ensureActionApproved } from "../shared/approval-requirements.js";
|
|
7
7
|
import { loadCommandContext, loadTaskFromContext, } from "../shared/task-backend.js";
|
|
8
|
-
import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
|
|
8
|
+
import { appendTaskCommentIntent, appendTaskEventIntent, backendIsLocalFileBackend, getTaskStore, mutateTaskStore, setTaskFieldsIntent, touchTaskDocMetaIntent, } from "../shared/task-store.js";
|
|
9
9
|
import { readDirectWorkLock } from "../../shared/direct-work-lock.js";
|
|
10
10
|
import { appendTaskEvent, ensurePlanApprovedIfRequired, ensureCommentCommitAllowed, ensureStatusTransitionAllowed, extractTaskObservationSection, defaultCommitEmojiForStatus, extractDocSection, isVerifyStepsFilled, normalizeTaskDocVersion, nowIso, requiresVerifyStepsByPrimary, requireStructuredComment, resolveTaskDependencyState, resolvePrimaryTag, taskObservationSectionName, toStringArray, } from "./shared.js";
|
|
11
11
|
function assertStartDocRequirements(task, config) {
|
|
@@ -63,14 +63,18 @@ export async function cmdStart(opts) {
|
|
|
63
63
|
const task = useStore
|
|
64
64
|
? await store.get(opts.taskId)
|
|
65
65
|
: await loadTaskFromContext({ ctx, taskId: opts.taskId });
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
if (!useStore) {
|
|
67
|
+
assertStartDocRequirements(task, ctx.config);
|
|
68
|
+
ensurePlanApprovedIfRequired(task, ctx.config);
|
|
69
|
+
}
|
|
68
70
|
const currentStatus = String(task.status || "TODO").toUpperCase();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
if (!useStore) {
|
|
72
|
+
ensureStatusTransitionAllowed({
|
|
73
|
+
currentStatus,
|
|
74
|
+
nextStatus: "DOING",
|
|
75
|
+
force: opts.force,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
74
78
|
ensureCommentCommitAllowed({
|
|
75
79
|
enabled: opts.commitFromComment,
|
|
76
80
|
config: ctx.config,
|
|
@@ -110,35 +114,36 @@ export async function cmdStart(opts) {
|
|
|
110
114
|
{ author: opts.author, body: commentBody },
|
|
111
115
|
];
|
|
112
116
|
const at = nowIso();
|
|
117
|
+
let currentStatusForCommit = currentStatus;
|
|
118
|
+
let primaryTagForCommit = resolvePrimaryTag(toStringArray(task.tags), ctx).primary;
|
|
113
119
|
await (useStore
|
|
114
|
-
? store
|
|
120
|
+
? mutateTaskStore(store, opts.taskId, (current) => {
|
|
115
121
|
assertStartDocRequirements(current, ctx.config);
|
|
116
122
|
ensurePlanApprovedIfRequired(current, ctx.config);
|
|
117
123
|
const currentStatus = String(current.status || "TODO").toUpperCase();
|
|
124
|
+
currentStatusForCommit = currentStatus;
|
|
125
|
+
primaryTagForCommit = resolvePrimaryTag(toStringArray(current.tags), ctx).primary;
|
|
118
126
|
ensureStatusTransitionAllowed({
|
|
119
127
|
currentStatus,
|
|
120
128
|
nextStatus: "DOING",
|
|
121
129
|
force: opts.force,
|
|
122
130
|
});
|
|
123
|
-
return
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
],
|
|
136
|
-
docMeta: {
|
|
137
|
-
touch: true,
|
|
131
|
+
return [
|
|
132
|
+
setTaskFieldsIntent({ status: "DOING" }),
|
|
133
|
+
appendTaskCommentIntent({ author: opts.author, body: commentBody }),
|
|
134
|
+
appendTaskEventIntent({
|
|
135
|
+
type: "status",
|
|
136
|
+
at,
|
|
137
|
+
author: opts.author,
|
|
138
|
+
from: currentStatus,
|
|
139
|
+
to: "DOING",
|
|
140
|
+
note: commentBody,
|
|
141
|
+
}),
|
|
142
|
+
touchTaskDocMetaIntent({
|
|
138
143
|
updatedBy: opts.author,
|
|
139
144
|
version: normalizeTaskDocVersion(current.doc_version),
|
|
140
|
-
},
|
|
141
|
-
|
|
145
|
+
}),
|
|
146
|
+
];
|
|
142
147
|
})
|
|
143
148
|
: ctx.taskBackend.writeTask({
|
|
144
149
|
...task,
|
|
@@ -174,10 +179,10 @@ export async function cmdStart(opts) {
|
|
|
174
179
|
cwd: opts.cwd,
|
|
175
180
|
rootOverride: opts.rootOverride,
|
|
176
181
|
taskId: opts.taskId,
|
|
177
|
-
primaryTag:
|
|
182
|
+
primaryTag: primaryTagForCommit,
|
|
178
183
|
executorAgent,
|
|
179
184
|
author: opts.author,
|
|
180
|
-
statusFrom:
|
|
185
|
+
statusFrom: currentStatusForCommit,
|
|
181
186
|
statusTo: "DOING",
|
|
182
187
|
commentBody: opts.body,
|
|
183
188
|
formattedComment,
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAqBnC,KAAK,WAAW,GAAG,IAAI,GAAG,cAAc,CAAC;AA0RzC,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,CAElB;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,CAMlB;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,CAElB"}
|