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
|
@@ -34,23 +34,38 @@ export const guardCommitSpec = {
|
|
|
34
34
|
kind: "boolean",
|
|
35
35
|
name: "allow-tasks",
|
|
36
36
|
default: false,
|
|
37
|
-
description: "Allow the tasks export snapshot plus artifacts under the active task subtree.",
|
|
37
|
+
description: "Allow the tasks export snapshot plus artifacts under the active task subtree; standalone path scope.",
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
kind: "boolean",
|
|
41
41
|
name: "allow-base",
|
|
42
42
|
default: false,
|
|
43
|
-
description: "Allow base branch edits.",
|
|
43
|
+
description: "Allow base branch edits; branch override only, not a path allowlist.",
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
kind: "boolean",
|
|
47
47
|
name: "allow-policy",
|
|
48
48
|
default: false,
|
|
49
|
-
description: "Allow policy edits (e.g. AGENTS.md).",
|
|
49
|
+
description: "Allow policy edits (e.g. AGENTS.md); standalone path scope.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
kind: "boolean",
|
|
53
|
+
name: "allow-config",
|
|
54
|
+
default: false,
|
|
55
|
+
description: "Allow config edits; standalone path scope.",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
kind: "boolean",
|
|
59
|
+
name: "allow-hooks",
|
|
60
|
+
default: false,
|
|
61
|
+
description: "Allow hooks edits; standalone path scope.",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
kind: "boolean",
|
|
65
|
+
name: "allow-ci",
|
|
66
|
+
default: false,
|
|
67
|
+
description: "Allow CI workflow edits; standalone path scope.",
|
|
50
68
|
},
|
|
51
|
-
{ kind: "boolean", name: "allow-config", default: false, description: "Allow config edits." },
|
|
52
|
-
{ kind: "boolean", name: "allow-hooks", default: false, description: "Allow hooks edits." },
|
|
53
|
-
{ kind: "boolean", name: "allow-ci", default: false, description: "Allow CI workflow edits." },
|
|
54
69
|
{
|
|
55
70
|
kind: "boolean",
|
|
56
71
|
name: "require-clean",
|
|
@@ -64,6 +79,15 @@ export const guardCommitSpec = {
|
|
|
64
79
|
cmd: 'agentplane guard commit 202602030608-F1Q8AB -m "✨ F1Q8AB task: implement allowlist guard" --allow packages/agentplane',
|
|
65
80
|
why: "Validate staged changes are covered by allowlist and policy.",
|
|
66
81
|
},
|
|
82
|
+
{
|
|
83
|
+
cmd: 'agentplane guard commit 202602030608-F1Q8AB -m "✨ F1Q8AB task: update publish workflow" --allow-ci',
|
|
84
|
+
why: "Validate already staged CI-only changes without a redundant explicit workflow path prefix.",
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
notes: [
|
|
88
|
+
"Protected path-scoped overrides can stand alone without a duplicate explicit prefix: `--allow-tasks`, `--allow-policy`, `--allow-config`, `--allow-hooks`, and `--allow-ci` each admit their own path family.",
|
|
89
|
+
"`agentplane guard commit` remains staged-only: it validates the current index and never auto-stages files for you.",
|
|
90
|
+
"`--allow-base` is different: it only overrides base-branch protection and never selects file paths by itself.",
|
|
67
91
|
],
|
|
68
92
|
validateRaw: (raw) => {
|
|
69
93
|
const msg = typeof raw.opts.message === "string" ? raw.opts.message.trim() : "";
|
|
@@ -13,6 +13,10 @@ export declare function stageAllowlist(opts: {
|
|
|
13
13
|
ctx: CommandContext;
|
|
14
14
|
allow: string[];
|
|
15
15
|
allowTasks: boolean;
|
|
16
|
+
allowPolicy?: boolean;
|
|
17
|
+
allowConfig?: boolean;
|
|
18
|
+
allowHooks?: boolean;
|
|
19
|
+
allowCI?: boolean;
|
|
16
20
|
tasksPath: string;
|
|
17
21
|
workflowDir?: string;
|
|
18
22
|
taskId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"allow.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/allow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"allow.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/allow.ts"],"names":[],"mappings":"AAUA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAkBvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAe9D;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOpB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBhB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoEpB"}
|
|
@@ -2,7 +2,7 @@ import { resolveProject } from "@agentplaneorg/core";
|
|
|
2
2
|
import { exitCodeForError } from "../../../cli/exit-codes.js";
|
|
3
3
|
import { gitPathIsUnderPrefix, normalizeGitPathPrefix } from "../../../shared/git-path.js";
|
|
4
4
|
import { CliError } from "../../../shared/errors.js";
|
|
5
|
-
import { taskArtifactPrefixes } from "../../../shared/protected-paths.js";
|
|
5
|
+
import { protectedPathAllowPrefixes, taskArtifactPrefixes, } from "../../../shared/protected-paths.js";
|
|
6
6
|
import { GitContext } from "../../shared/git-context.js";
|
|
7
7
|
import { loadCommandContext } from "../../shared/task-backend.js";
|
|
8
8
|
function normalizeAllowPrefixes(prefixes) {
|
|
@@ -88,8 +88,19 @@ export async function stageAllowlist(opts) {
|
|
|
88
88
|
workflowDir: opts.workflowDir,
|
|
89
89
|
taskId: opts.taskId,
|
|
90
90
|
});
|
|
91
|
-
const
|
|
92
|
-
|
|
91
|
+
const protectedAllow = protectedPathAllowPrefixes({
|
|
92
|
+
tasksPath: opts.tasksPath,
|
|
93
|
+
workflowDir: opts.workflowDir,
|
|
94
|
+
taskId: opts.taskId,
|
|
95
|
+
allowTasks: opts.allowTasks,
|
|
96
|
+
allowPolicy: opts.allowPolicy,
|
|
97
|
+
allowConfig: opts.allowConfig,
|
|
98
|
+
allowHooks: opts.allowHooks,
|
|
99
|
+
allowCI: opts.allowCI,
|
|
100
|
+
});
|
|
101
|
+
const effectiveAllow = normalizeAllowPrefixes([...allow, ...protectedAllow]);
|
|
102
|
+
if (effectiveAllow.length === 0 ||
|
|
103
|
+
(allow.length === 0 && protectedAllow.length === 0 && opts.allowTaskOnly !== true)) {
|
|
93
104
|
throw new CliError({
|
|
94
105
|
exitCode: 2,
|
|
95
106
|
code: "E_USAGE",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQvF,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQvF,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAuMxE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlB;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9E;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuMlB"}
|
|
@@ -130,7 +130,12 @@ function commitFailureDiagnostic(phase, output) {
|
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
132
|
function hasExplicitCommitScope(opts) {
|
|
133
|
-
return opts.allow.some((prefix) => prefix.trim().length > 0) ||
|
|
133
|
+
return (opts.allow.some((prefix) => prefix.trim().length > 0) ||
|
|
134
|
+
opts.allowTasks ||
|
|
135
|
+
opts.allowPolicy ||
|
|
136
|
+
opts.allowConfig ||
|
|
137
|
+
opts.allowHooks ||
|
|
138
|
+
opts.allowCI);
|
|
134
139
|
}
|
|
135
140
|
function asCommitFailure(err, phase) {
|
|
136
141
|
if (err instanceof Error) {
|
|
@@ -343,12 +348,16 @@ export async function cmdCommit(opts) {
|
|
|
343
348
|
ctx,
|
|
344
349
|
allow: opts.allow,
|
|
345
350
|
allowTasks: opts.allowTasks,
|
|
351
|
+
allowPolicy: opts.allowPolicy,
|
|
352
|
+
allowConfig: opts.allowConfig,
|
|
353
|
+
allowHooks: opts.allowHooks,
|
|
354
|
+
allowCI: opts.allowCI,
|
|
346
355
|
tasksPath: ctx.config.paths.tasks_path,
|
|
347
356
|
workflowDir: ctx.config.paths.workflow_dir,
|
|
348
357
|
taskId: opts.taskId,
|
|
349
358
|
allowTaskOnly: true,
|
|
350
359
|
emptyAllowMessage: "No staged files and no commit allowlist. Pass --allow <path-prefix>, use --allow-tasks for active task artifacts, or stage files manually.",
|
|
351
|
-
noMatchMessage: "No changed files matched the commit allowlist (adjust --allow
|
|
360
|
+
noMatchMessage: "No changed files matched the commit allowlist (adjust --allow, protected allow flags, or --allow-tasks; otherwise stage files manually).",
|
|
352
361
|
});
|
|
353
362
|
if (!opts.quiet) {
|
|
354
363
|
process.stdout.write(`${infoMessage(`commit auto-staged ${autoStaged.length} path(s) from allowlist`)}\n`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AgentplaneConfig, type ResolvedProject } from "@agentplaneorg/core";
|
|
2
2
|
import { loadTaskBackend, type TaskData } from "../../backends/task-backend.js";
|
|
3
3
|
import { GitContext } from "./git-context.js";
|
|
4
4
|
export type CommandMemo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/task-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/task-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import { taskDocToSectionMap, } from "@agentplaneorg/core";
|
|
2
3
|
import { CliError } from "../../shared/errors.js";
|
|
3
4
|
import { loadTaskBackend } from "../../backends/task-backend.js";
|
|
4
5
|
import { GitContext } from "./git-context.js";
|
|
@@ -24,6 +25,12 @@ export function taskDataToFrontmatter(task) {
|
|
|
24
25
|
{ state: "pending", updated_at: null, updated_by: null, note: null };
|
|
25
26
|
const verification = task.verification ??
|
|
26
27
|
{ state: "pending", updated_at: null, updated_by: null, note: null };
|
|
28
|
+
const revision = Number.isInteger(task.revision) && Number(task.revision) > 0 ? Number(task.revision) : 1;
|
|
29
|
+
const sections = task.doc === undefined
|
|
30
|
+
? task.sections && Object.keys(task.sections).length > 0
|
|
31
|
+
? task.sections
|
|
32
|
+
: undefined
|
|
33
|
+
: taskDocToSectionMap(task.doc);
|
|
27
34
|
return {
|
|
28
35
|
id: task.id,
|
|
29
36
|
title: task.title,
|
|
@@ -33,6 +40,7 @@ export function taskDataToFrontmatter(task) {
|
|
|
33
40
|
status: task.status,
|
|
34
41
|
priority: task.priority,
|
|
35
42
|
owner: task.owner,
|
|
43
|
+
revision,
|
|
36
44
|
depends_on: task.depends_on ?? [],
|
|
37
45
|
tags: task.tags ?? [],
|
|
38
46
|
verify: task.verify ?? [],
|
|
@@ -45,6 +53,7 @@ export function taskDataToFrontmatter(task) {
|
|
|
45
53
|
doc_updated_at: task.doc_updated_at,
|
|
46
54
|
doc_updated_by: task.doc_updated_by,
|
|
47
55
|
description: task.description ?? "",
|
|
56
|
+
sections,
|
|
48
57
|
id_source: task.id_source,
|
|
49
58
|
dirty: task.dirty,
|
|
50
59
|
};
|
|
@@ -24,17 +24,76 @@ export type TaskStorePatch = {
|
|
|
24
24
|
version?: 2 | 3;
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
|
+
export type TaskStoreIntent = {
|
|
28
|
+
kind: "set-task-fields";
|
|
29
|
+
task: TaskStoreTaskPatch;
|
|
30
|
+
} | {
|
|
31
|
+
kind: "append-comments";
|
|
32
|
+
comments: TaskComment[];
|
|
33
|
+
} | {
|
|
34
|
+
kind: "append-events";
|
|
35
|
+
events: TaskEvent[];
|
|
36
|
+
} | {
|
|
37
|
+
kind: "replace-doc";
|
|
38
|
+
doc: string;
|
|
39
|
+
expectedCurrentDoc?: string | null;
|
|
40
|
+
} | {
|
|
41
|
+
kind: "set-section";
|
|
42
|
+
section: string;
|
|
43
|
+
text: string;
|
|
44
|
+
requiredSections: string[];
|
|
45
|
+
expectedCurrentText?: string | null;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "touch-doc-meta";
|
|
48
|
+
updatedBy?: string;
|
|
49
|
+
version?: 2 | 3;
|
|
50
|
+
};
|
|
51
|
+
type TaskStoreIntentResult = TaskStoreIntent | readonly TaskStoreIntent[] | null | undefined;
|
|
52
|
+
export type TaskStoreMutationOptions = {
|
|
53
|
+
expectedRevision?: number;
|
|
54
|
+
};
|
|
55
|
+
export type TaskStoreLike = Pick<TaskStore, "patch"> & {
|
|
56
|
+
mutate?: TaskStore["mutate"];
|
|
57
|
+
};
|
|
58
|
+
export declare function setTaskFieldsIntent(task: TaskStoreTaskPatch): TaskStoreIntent;
|
|
59
|
+
export declare function appendTaskCommentsIntent(comments: TaskComment[]): TaskStoreIntent;
|
|
60
|
+
export declare function appendTaskCommentIntent(comment: TaskComment): TaskStoreIntent;
|
|
61
|
+
export declare function appendTaskEventsIntent(events: TaskEvent[]): TaskStoreIntent;
|
|
62
|
+
export declare function appendTaskEventIntent(event: TaskEvent): TaskStoreIntent;
|
|
63
|
+
export declare function replaceTaskDocIntent(opts: {
|
|
64
|
+
doc: string;
|
|
65
|
+
expectedCurrentDoc?: string | null;
|
|
66
|
+
}): TaskStoreIntent;
|
|
67
|
+
export declare function setTaskSectionIntent(opts: {
|
|
68
|
+
section: string;
|
|
69
|
+
text: string;
|
|
70
|
+
requiredSections: string[];
|
|
71
|
+
expectedCurrentText?: string | null;
|
|
72
|
+
}): TaskStoreIntent;
|
|
73
|
+
export declare function touchTaskDocMetaIntent(opts?: {
|
|
74
|
+
updatedBy?: string;
|
|
75
|
+
version?: 2 | 3;
|
|
76
|
+
}): TaskStoreIntent;
|
|
77
|
+
export declare function taskStorePatchFromIntents(intents: TaskStoreIntentResult): TaskStorePatch | null | undefined;
|
|
78
|
+
export declare function mutateTaskStore(store: TaskStoreLike, taskId: string, builder: (current: TaskData) => Promise<TaskStoreIntentResult> | TaskStoreIntentResult, opts?: TaskStoreMutationOptions): Promise<{
|
|
79
|
+
changed: boolean;
|
|
80
|
+
task: TaskData;
|
|
81
|
+
}>;
|
|
27
82
|
export declare class TaskStore {
|
|
28
83
|
private ctx;
|
|
29
84
|
private cache;
|
|
30
85
|
constructor(ctx: CommandContext);
|
|
31
86
|
get(taskId: string): Promise<TaskData>;
|
|
32
87
|
private getCached;
|
|
33
|
-
update(taskId: string, updater: (current: TaskData) => Promise<TaskData> | TaskData): Promise<{
|
|
88
|
+
update(taskId: string, updater: (current: TaskData) => Promise<TaskData> | TaskData, opts?: TaskStoreMutationOptions): Promise<{
|
|
89
|
+
changed: boolean;
|
|
90
|
+
task: TaskData;
|
|
91
|
+
}>;
|
|
92
|
+
patch(taskId: string, builder: (current: TaskData) => Promise<TaskStorePatch | null | undefined> | TaskStorePatch | null | undefined, opts?: TaskStoreMutationOptions): Promise<{
|
|
34
93
|
changed: boolean;
|
|
35
94
|
task: TaskData;
|
|
36
95
|
}>;
|
|
37
|
-
|
|
96
|
+
mutate(taskId: string, builder: (current: TaskData) => Promise<TaskStoreIntentResult> | TaskStoreIntentResult, opts?: TaskStoreMutationOptions): Promise<{
|
|
38
97
|
changed: boolean;
|
|
39
98
|
task: TaskData;
|
|
40
99
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/task-store.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEf,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/task-store.ts"],"names":[],"mappings":"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"}
|