agentplane 0.3.4 → 0.3.6
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/README.md +103 -75
- package/assets/AGENTS.md +4 -2
- package/bin/dist-guard.js +13 -3
- package/bin/runtime-watch.d.ts +1 -0
- package/bin/runtime-watch.js +22 -5
- package/bin/stale-dist-policy.js +9 -2
- package/dist/.build-manifest.json +220 -790
- package/dist/adapters/task-backend/task-backend-adapter.d.ts +1 -1
- package/dist/adapters/task-backend/task-backend-adapter.d.ts.map +1 -1
- package/dist/adapters/task-backend/task-backend-adapter.js +5 -2
- package/dist/backends/task-backend/local-backend.d.ts +13 -0
- package/dist/backends/task-backend/local-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/local-backend.js +17 -0
- package/dist/backends/task-backend/redmine-backend.d.ts +18 -0
- package/dist/backends/task-backend/redmine-backend.d.ts.map +1 -1
- package/dist/backends/task-backend/redmine-backend.js +35 -25
- package/dist/backends/task-backend/shared/types.d.ts +20 -0
- 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-backend.test-helpers.d.ts +4 -0
- package/dist/backends/task-backend.test-helpers.d.ts.map +1 -0
- package/dist/backends/task-backend.test-helpers.js +33 -0
- package/dist/cli/bootstrap-guide.d.ts.map +1 -1
- package/dist/cli/bootstrap-guide.js +1 -0
- package/dist/cli/command-guide.d.ts.map +1 -1
- package/dist/cli/command-guide.js +3 -2
- package/dist/cli/reason-codes.d.ts.map +1 -1
- package/dist/cli/reason-codes.js +30 -0
- package/dist/cli/run-cli/command-catalog/core.d.ts +3 -0
- package/dist/cli/run-cli/command-catalog/core.d.ts.map +1 -0
- package/dist/cli/run-cli/command-catalog/core.js +137 -0
- package/dist/cli/run-cli/command-catalog/lifecycle.d.ts +3 -0
- package/dist/cli/run-cli/command-catalog/lifecycle.d.ts.map +1 -0
- package/dist/cli/run-cli/command-catalog/lifecycle.js +52 -0
- package/dist/cli/run-cli/command-catalog/project.d.ts +3 -0
- package/dist/cli/run-cli/command-catalog/project.d.ts.map +1 -0
- package/dist/cli/run-cli/command-catalog/project.js +78 -0
- package/dist/cli/run-cli/command-catalog/shared.d.ts +19 -0
- package/dist/cli/run-cli/command-catalog/shared.d.ts.map +1 -0
- package/dist/cli/run-cli/command-catalog/shared.js +9 -0
- package/dist/cli/run-cli/command-catalog/task.d.ts +3 -0
- package/dist/cli/run-cli/command-catalog/task.d.ts.map +1 -0
- package/dist/cli/run-cli/command-catalog/task.js +85 -0
- package/dist/cli/run-cli/command-catalog.d.ts +3 -18
- package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog.js +8 -337
- package/dist/cli/run-cli/commands/ide.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/ide.js +64 -2
- package/dist/cli/run-cli/commands/init/ui.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init/ui.js +33 -13
- package/dist/cli/run-cli.core.pr-flow.test-helpers.d.ts +3 -0
- package/dist/cli/run-cli.core.pr-flow.test-helpers.d.ts.map +1 -0
- package/dist/cli/run-cli.core.pr-flow.test-helpers.js +41 -0
- package/dist/cli/run-cli.core.tasks.test-helpers.d.ts +2 -0
- package/dist/cli/run-cli.core.tasks.test-helpers.d.ts.map +1 -0
- package/dist/cli/run-cli.core.tasks.test-helpers.js +6 -0
- package/dist/cli/run-cli.test-helpers.d.ts +3 -0
- package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
- package/dist/cli/run-cli.test-helpers.js +138 -6
- package/dist/commands/commit.spec.d.ts.map +1 -1
- package/dist/commands/commit.spec.js +2 -2
- package/dist/commands/doctor/runtime.d.ts.map +1 -1
- package/dist/commands/doctor/runtime.js +3 -6
- package/dist/commands/doctor/workspace.d.ts +4 -1
- package/dist/commands/doctor/workspace.d.ts.map +1 -1
- package/dist/commands/doctor/workspace.js +87 -4
- package/dist/commands/doctor.run.d.ts.map +1 -1
- package/dist/commands/doctor.run.js +8 -1
- package/dist/commands/guard/commit.command.js +1 -1
- package/dist/commands/guard/impl/allow.d.ts +5 -0
- package/dist/commands/guard/impl/allow.d.ts.map +1 -1
- package/dist/commands/guard/impl/allow.js +15 -10
- package/dist/commands/guard/impl/commands.d.ts.map +1 -1
- package/dist/commands/guard/impl/commands.js +137 -18
- package/dist/commands/guard/impl/comment-commit.d.ts.map +1 -1
- package/dist/commands/guard/impl/comment-commit.js +2 -0
- package/dist/commands/hooks/index.d.ts.map +1 -1
- package/dist/commands/hooks/index.js +8 -35
- package/dist/commands/recipes/impl/apply.d.ts +4 -0
- package/dist/commands/recipes/impl/apply.d.ts.map +1 -1
- package/dist/commands/recipes/impl/apply.js +34 -0
- package/dist/commands/recipes/impl/commands/explain.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/explain.js +70 -11
- package/dist/commands/recipes/impl/commands/info.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/info.js +24 -12
- package/dist/commands/recipes/impl/commands/install.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/install.js +32 -36
- package/dist/commands/recipes/impl/commands/list.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/list.js +7 -4
- package/dist/commands/recipes/impl/commands/remove.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/remove.js +9 -11
- package/dist/commands/recipes/impl/constants.d.ts +2 -0
- package/dist/commands/recipes/impl/constants.d.ts.map +1 -1
- package/dist/commands/recipes/impl/constants.js +2 -0
- package/dist/commands/recipes/impl/manifest.d.ts.map +1 -1
- package/dist/commands/recipes/impl/manifest.js +219 -23
- package/dist/commands/recipes/impl/normalize.d.ts +3 -0
- package/dist/commands/recipes/impl/normalize.d.ts.map +1 -1
- package/dist/commands/recipes/impl/normalize.js +28 -24
- package/dist/commands/recipes/impl/paths.d.ts +9 -0
- package/dist/commands/recipes/impl/paths.d.ts.map +1 -1
- package/dist/commands/recipes/impl/paths.js +10 -1
- package/dist/commands/recipes/impl/project-installed-recipes.d.ts +7 -0
- package/dist/commands/recipes/impl/project-installed-recipes.d.ts.map +1 -0
- package/dist/commands/recipes/impl/project-installed-recipes.js +102 -0
- package/dist/commands/recipes/impl/resolver.d.ts +20 -0
- package/dist/commands/recipes/impl/resolver.d.ts.map +1 -0
- package/dist/commands/recipes/impl/resolver.js +220 -0
- package/dist/commands/recipes/impl/scenario.d.ts.map +1 -1
- package/dist/commands/recipes/impl/scenario.js +40 -11
- package/dist/commands/recipes/impl/types.d.ts +145 -16
- package/dist/commands/recipes/impl/types.d.ts.map +1 -1
- package/dist/commands/recipes/install.spec.d.ts.map +1 -1
- package/dist/commands/recipes/install.spec.js +3 -2
- package/dist/commands/recipes.d.ts +6 -4
- package/dist/commands/recipes.d.ts.map +1 -1
- package/dist/commands/recipes.js +5 -3
- package/dist/commands/recipes.test-helpers.d.ts +185 -0
- package/dist/commands/recipes.test-helpers.d.ts.map +1 -0
- package/dist/commands/recipes.test-helpers.js +339 -0
- package/dist/commands/scenario/impl/commands.d.ts.map +1 -1
- package/dist/commands/scenario/impl/commands.js +192 -336
- package/dist/commands/scenario/info.command.d.ts.map +1 -1
- package/dist/commands/scenario/info.command.js +7 -2
- package/dist/commands/scenario/list.command.js +2 -2
- package/dist/commands/scenario/run.command.d.ts.map +1 -1
- package/dist/commands/scenario/run.command.js +7 -2
- package/dist/commands/shared/git-context.d.ts +1 -0
- package/dist/commands/shared/git-context.d.ts.map +1 -1
- package/dist/commands/shared/git-context.js +4 -0
- package/dist/commands/shared/reconcile-check.d.ts.map +1 -1
- package/dist/commands/shared/reconcile-check.js +77 -2
- package/dist/commands/shared/task-backend.d.ts +5 -0
- package/dist/commands/shared/task-backend.d.ts.map +1 -1
- package/dist/commands/shared/task-backend.js +24 -0
- package/dist/commands/shared/task-store.d.ts +32 -1
- package/dist/commands/shared/task-store.d.ts.map +1 -1
- package/dist/commands/shared/task-store.js +166 -42
- package/dist/commands/task/block.d.ts.map +1 -1
- package/dist/commands/task/block.js +46 -29
- package/dist/commands/task/close-duplicate.d.ts.map +1 -1
- package/dist/commands/task/close-duplicate.js +12 -37
- package/dist/commands/task/close-noop.d.ts.map +1 -1
- package/dist/commands/task/close-noop.js +12 -30
- package/dist/commands/task/close-shared.d.ts +14 -0
- package/dist/commands/task/close-shared.d.ts.map +1 -0
- package/dist/commands/task/close-shared.js +76 -0
- package/dist/commands/task/comment.d.ts.map +1 -1
- package/dist/commands/task/comment.js +35 -17
- package/dist/commands/task/doc-set.command.d.ts +2 -1
- package/dist/commands/task/doc-set.command.d.ts.map +1 -1
- package/dist/commands/task/doc-set.command.js +36 -4
- package/dist/commands/task/doc-template.d.ts.map +1 -1
- package/dist/commands/task/doc-template.js +2 -7
- package/dist/commands/task/doc.command.js +1 -1
- package/dist/commands/task/doc.d.ts +2 -1
- package/dist/commands/task/doc.d.ts.map +1 -1
- package/dist/commands/task/doc.js +123 -71
- package/dist/commands/task/export.d.ts.map +1 -1
- package/dist/commands/task/export.js +4 -4
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +141 -78
- package/dist/commands/task/migrate-doc.d.ts.map +1 -1
- package/dist/commands/task/migrate-doc.js +15 -11
- package/dist/commands/task/plan-set.command.js +1 -1
- package/dist/commands/task/plan.command.d.ts +8 -0
- package/dist/commands/task/plan.command.d.ts.map +1 -0
- package/dist/commands/task/plan.command.js +37 -0
- package/dist/commands/task/plan.d.ts.map +1 -1
- package/dist/commands/task/plan.js +190 -93
- package/dist/commands/task/set-status.command.d.ts.map +1 -1
- package/dist/commands/task/set-status.command.js +1 -1
- package/dist/commands/task/set-status.d.ts.map +1 -1
- package/dist/commands/task/set-status.js +40 -3
- package/dist/commands/task/shared/docs.d.ts +1 -0
- package/dist/commands/task/shared/docs.d.ts.map +1 -1
- package/dist/commands/task/shared/docs.js +7 -0
- package/dist/commands/task/shared/transitions.d.ts +0 -2
- package/dist/commands/task/shared/transitions.d.ts.map +1 -1
- package/dist/commands/task/shared/transitions.js +0 -6
- 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 +88 -63
- package/dist/commands/task/task.command.d.ts +8 -0
- package/dist/commands/task/task.command.d.ts.map +1 -0
- package/dist/commands/task/task.command.js +71 -0
- package/dist/commands/task/verify-command-shared.d.ts +16 -0
- package/dist/commands/task/verify-command-shared.d.ts.map +1 -0
- package/dist/commands/task/verify-command-shared.js +53 -0
- package/dist/commands/task/verify-ok.command.d.ts +2 -6
- package/dist/commands/task/verify-ok.command.d.ts.map +1 -1
- package/dist/commands/task/verify-ok.command.js +8 -50
- package/dist/commands/task/verify-record.d.ts.map +1 -1
- package/dist/commands/task/verify-record.js +119 -140
- package/dist/commands/task/verify-rework.command.d.ts +2 -6
- package/dist/commands/task/verify-rework.command.d.ts.map +1 -1
- package/dist/commands/task/verify-rework.command.js +8 -50
- package/dist/commands/verify.spec.d.ts.map +1 -1
- package/dist/commands/verify.spec.js +3 -12
- package/dist/policy/rules/allowlist.d.ts.map +1 -1
- package/dist/policy/rules/allowlist.js +13 -4
- package/dist/policy/rules/protected-paths.d.ts.map +1 -1
- package/dist/policy/rules/protected-paths.js +6 -1
- package/dist/ports/task-backend-port.d.ts +1 -1
- package/dist/ports/task-backend-port.d.ts.map +1 -1
- package/dist/shared/agent-emoji.d.ts.map +1 -1
- package/dist/shared/protected-paths.d.ts +7 -0
- package/dist/shared/protected-paths.d.ts.map +1 -1
- package/dist/shared/protected-paths.js +26 -10
- package/dist/shared/repo-cli-version.d.ts.map +1 -1
- package/dist/shared/repo-cli-version.js +9 -3
- package/package.json +2 -2
|
@@ -7,6 +7,6 @@ export declare class TaskBackendAdapter implements TaskBackendPort {
|
|
|
7
7
|
listTasks(): Promise<TaskData[]>;
|
|
8
8
|
getTask(id: string): Promise<TaskData | null>;
|
|
9
9
|
writeTask(task: TaskData): Promise<void>;
|
|
10
|
-
|
|
10
|
+
exportProjectionSnapshot(path: string): Promise<void>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=task-backend-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-backend-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/task-backend/task-backend-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;gBAEzB,GAAG,EAAE,cAAc;IAI/B,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIhC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI7C,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,
|
|
1
|
+
{"version":3,"file":"task-backend-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/task-backend/task-backend-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;gBAEzB,GAAG,EAAE,cAAc;IAI/B,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIhC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI7C,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUtD"}
|
|
@@ -12,10 +12,13 @@ export class TaskBackendAdapter {
|
|
|
12
12
|
writeTask(task) {
|
|
13
13
|
return this.ctx.taskBackend.writeTask(task);
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
exportProjectionSnapshot(path) {
|
|
16
16
|
const backend = this.ctx.taskBackend;
|
|
17
|
+
if (backend.exportProjectionSnapshot) {
|
|
18
|
+
return backend.exportProjectionSnapshot(path);
|
|
19
|
+
}
|
|
17
20
|
if (!backend.exportTasksJson) {
|
|
18
|
-
throw new Error("Backend does not support
|
|
21
|
+
throw new Error("Backend does not support exportProjectionSnapshot");
|
|
19
22
|
}
|
|
20
23
|
return backend.exportTasksJson(path);
|
|
21
24
|
}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { type TaskBackend, type TaskData } from "./shared.js";
|
|
2
2
|
export declare class LocalBackend implements TaskBackend {
|
|
3
3
|
id: string;
|
|
4
|
+
capabilities: {
|
|
5
|
+
readonly canonical_source: "local";
|
|
6
|
+
readonly projection: "canonical";
|
|
7
|
+
readonly reads_from_projection_by_default: true;
|
|
8
|
+
readonly writes_task_readmes: true;
|
|
9
|
+
readonly may_access_network_on_read: false;
|
|
10
|
+
readonly may_access_network_on_write: false;
|
|
11
|
+
readonly supports_projection_refresh: false;
|
|
12
|
+
readonly supports_push_sync: false;
|
|
13
|
+
readonly supports_snapshot_export: true;
|
|
14
|
+
};
|
|
4
15
|
root: string;
|
|
5
16
|
updatedBy: string;
|
|
6
17
|
private lastListWarnings;
|
|
@@ -13,6 +24,7 @@ export declare class LocalBackend implements TaskBackend {
|
|
|
13
24
|
attempts: number;
|
|
14
25
|
}): Promise<string>;
|
|
15
26
|
listTasks(): Promise<TaskData[]>;
|
|
27
|
+
listProjectionTasks(): Promise<TaskData[]>;
|
|
16
28
|
getLastListWarnings(): string[];
|
|
17
29
|
getTask(taskId: string): Promise<TaskData | null>;
|
|
18
30
|
getTasks(taskIds: string[]): Promise<(TaskData | null)[]>;
|
|
@@ -26,5 +38,6 @@ export declare class LocalBackend implements TaskBackend {
|
|
|
26
38
|
changed: number;
|
|
27
39
|
}>;
|
|
28
40
|
exportTasksJson(outputPath: string): Promise<void>;
|
|
41
|
+
exportProjectionSnapshot(outputPath: string): Promise<void>;
|
|
29
42
|
}
|
|
30
43
|
//# sourceMappingURL=local-backend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-backend.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/local-backend.ts"],"names":[],"mappings":"AAqBA,OAAO,EAiBL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAa,YAAW,WAAW;IAC9C,EAAE,SAAW;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,gBAAgB,CAAgB;gBAE5B,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAKrD,cAAc,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB3E,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"local-backend.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/local-backend.ts"],"names":[],"mappings":"AAqBA,OAAO,EAiBL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAErB,qBAAa,YAAa,YAAW,WAAW;IAC9C,EAAE,SAAW;IACb,YAAY;;;;;;;;;;MAUD;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,gBAAgB,CAAgB;gBAE5B,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAKrD,cAAc,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB3E,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwHhC,mBAAmB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIhD,mBAAmB,IAAI,MAAM,EAAE;IAIzB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAoBjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;IAKzD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO3C,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyExC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1E,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAuF/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlE"}
|
|
@@ -7,6 +7,17 @@ import { buildTaskIndexEntry, loadTaskIndex, resolveTaskIndexPath, saveTaskIndex
|
|
|
7
7
|
import { DEFAULT_DOC_UPDATED_BY, defaultPlanApproval, defaultVerificationResult, extractTaskDoc, generateTaskId, invalidLengthMessage, mapLimit, mergeTaskDoc, missingTaskIdMessage, normalizeDocVersion, nowIso, resolveDocUpdatedByFromFrontmatter, resolveDocUpdatedByFromTask, taskRecordToData, validateTaskId, writeTasksExportFromTasks, } from "./shared.js";
|
|
8
8
|
export class LocalBackend {
|
|
9
9
|
id = "local";
|
|
10
|
+
capabilities = {
|
|
11
|
+
canonical_source: "local",
|
|
12
|
+
projection: "canonical",
|
|
13
|
+
reads_from_projection_by_default: true,
|
|
14
|
+
writes_task_readmes: true,
|
|
15
|
+
may_access_network_on_read: false,
|
|
16
|
+
may_access_network_on_write: false,
|
|
17
|
+
supports_projection_refresh: false,
|
|
18
|
+
supports_push_sync: false,
|
|
19
|
+
supports_snapshot_export: true,
|
|
20
|
+
};
|
|
10
21
|
root;
|
|
11
22
|
updatedBy;
|
|
12
23
|
lastListWarnings = [];
|
|
@@ -151,6 +162,9 @@ export class LocalBackend {
|
|
|
151
162
|
this.lastListWarnings = warnings;
|
|
152
163
|
return tasks;
|
|
153
164
|
}
|
|
165
|
+
async listProjectionTasks() {
|
|
166
|
+
return await this.listTasks();
|
|
167
|
+
}
|
|
154
168
|
getLastListWarnings() {
|
|
155
169
|
return [...this.lastListWarnings];
|
|
156
170
|
}
|
|
@@ -365,4 +379,7 @@ export class LocalBackend {
|
|
|
365
379
|
const tasks = await this.listTasks();
|
|
366
380
|
await writeTasksExportFromTasks({ outputPath, tasks });
|
|
367
381
|
}
|
|
382
|
+
async exportProjectionSnapshot(outputPath) {
|
|
383
|
+
await this.exportTasksJson(outputPath);
|
|
384
|
+
}
|
|
368
385
|
}
|
|
@@ -13,6 +13,17 @@ export type RedmineSettings = {
|
|
|
13
13
|
};
|
|
14
14
|
export declare class RedmineBackend implements TaskBackend {
|
|
15
15
|
id: string;
|
|
16
|
+
capabilities: {
|
|
17
|
+
readonly canonical_source: "remote";
|
|
18
|
+
readonly projection: "cache";
|
|
19
|
+
readonly reads_from_projection_by_default: true;
|
|
20
|
+
readonly writes_task_readmes: true;
|
|
21
|
+
readonly may_access_network_on_read: false;
|
|
22
|
+
readonly may_access_network_on_write: true;
|
|
23
|
+
readonly supports_projection_refresh: true;
|
|
24
|
+
readonly supports_push_sync: true;
|
|
25
|
+
readonly supports_snapshot_export: true;
|
|
26
|
+
};
|
|
16
27
|
baseUrl: string;
|
|
17
28
|
apiKey: string;
|
|
18
29
|
projectId: string;
|
|
@@ -34,7 +45,14 @@ export declare class RedmineBackend implements TaskBackend {
|
|
|
34
45
|
attempts: number;
|
|
35
46
|
}): Promise<string>;
|
|
36
47
|
listTasks(): Promise<TaskData[]>;
|
|
48
|
+
listProjectionTasks(): Promise<TaskData[]>;
|
|
37
49
|
exportTasksJson(outputPath: string): Promise<void>;
|
|
50
|
+
exportProjectionSnapshot(outputPath: string): Promise<void>;
|
|
51
|
+
refreshProjection(opts: {
|
|
52
|
+
allowNetwork: boolean;
|
|
53
|
+
quiet?: boolean;
|
|
54
|
+
conflict?: "diff" | "prefer-local" | "prefer-remote" | "fail";
|
|
55
|
+
}): Promise<void>;
|
|
38
56
|
normalizeTasks(): Promise<{
|
|
39
57
|
scanned: number;
|
|
40
58
|
changed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redmine-backend.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/redmine-backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA2BvD,OAAO,EAmBL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,cAAe,YAAW,WAAW;IAChD,EAAE,SAAa;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,UAAU,uCAA8C;IACxD,aAAa,sBAA6B;IAC1C,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAQ;gBAElD,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE;IA8CtE,cAAc,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB3E,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"redmine-backend.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/redmine-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,17 @@ import { readRedmineEnv } from "./redmine/env.js";
|
|
|
10
10
|
import { BackendError, DEFAULT_DOC_UPDATED_BY, DOC_VERSION, RedmineUnavailable, ensureDocMetadata, firstNonEmptyString, generateTaskId, mapLimit, missingTaskIdMessage, normalizeDocVersion, nowIso, redmineConfigMissingEnvMessage, redmineIssueIdMissingMessage, sleep, toStringSafe, unknownTaskIdMessage, validateTaskId, writeTasksExportFromTasks, } from "./shared.js";
|
|
11
11
|
export class RedmineBackend {
|
|
12
12
|
id = "redmine";
|
|
13
|
+
capabilities = {
|
|
14
|
+
canonical_source: "remote",
|
|
15
|
+
projection: "cache",
|
|
16
|
+
reads_from_projection_by_default: true,
|
|
17
|
+
writes_task_readmes: true,
|
|
18
|
+
may_access_network_on_read: false,
|
|
19
|
+
may_access_network_on_write: true,
|
|
20
|
+
supports_projection_refresh: true,
|
|
21
|
+
supports_push_sync: true,
|
|
22
|
+
supports_snapshot_export: true,
|
|
23
|
+
};
|
|
13
24
|
baseUrl;
|
|
14
25
|
apiKey;
|
|
15
26
|
projectId;
|
|
@@ -89,23 +100,34 @@ export class RedmineBackend {
|
|
|
89
100
|
});
|
|
90
101
|
}
|
|
91
102
|
async listTasks() {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return await this.listTasksRemote();
|
|
103
|
+
if (!this.cache) {
|
|
104
|
+
throw new BackendError("Redmine cache is disabled; projection reads are unavailable", "E_BACKEND");
|
|
95
105
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
throw err;
|
|
106
|
+
return await this.cache.listTasks();
|
|
107
|
+
}
|
|
108
|
+
async listProjectionTasks() {
|
|
109
|
+
if (!this.cache) {
|
|
110
|
+
throw new BackendError("Redmine cache is disabled; projection reads are unavailable", "E_BACKEND");
|
|
103
111
|
}
|
|
112
|
+
return await this.cache.listTasks();
|
|
104
113
|
}
|
|
105
114
|
async exportTasksJson(outputPath) {
|
|
106
115
|
const tasks = await this.listTasks();
|
|
107
116
|
await writeTasksExportFromTasks({ outputPath, tasks });
|
|
108
117
|
}
|
|
118
|
+
async exportProjectionSnapshot(outputPath) {
|
|
119
|
+
if (!this.cache) {
|
|
120
|
+
throw new BackendError("Redmine cache is disabled; projection snapshot export is unavailable", "E_BACKEND");
|
|
121
|
+
}
|
|
122
|
+
const tasks = await this.cache.listTasks();
|
|
123
|
+
await writeTasksExportFromTasks({ outputPath, tasks });
|
|
124
|
+
}
|
|
125
|
+
async refreshProjection(opts) {
|
|
126
|
+
if (!opts.allowNetwork) {
|
|
127
|
+
throw new BackendError("Projection refresh requires network access approval", "E_BACKEND");
|
|
128
|
+
}
|
|
129
|
+
await this.syncPull(opts.conflict ?? "prefer-remote", opts.quiet ?? true);
|
|
130
|
+
}
|
|
109
131
|
async normalizeTasks() {
|
|
110
132
|
// Remote backends should avoid expensive downloads; best-effort normalize the local cache if present.
|
|
111
133
|
if (this.cache?.normalizeTasks)
|
|
@@ -113,22 +135,10 @@ export class RedmineBackend {
|
|
|
113
135
|
return { scanned: 0, changed: 0 };
|
|
114
136
|
}
|
|
115
137
|
async getTask(taskId) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (!issue)
|
|
119
|
-
return null;
|
|
120
|
-
// Read-only fetch must not rewrite local task READMEs through cache updates.
|
|
121
|
-
return this.issueToTask(issue, taskId);
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
if (err instanceof RedmineUnavailable) {
|
|
125
|
-
if (!this.cache)
|
|
126
|
-
throw err;
|
|
127
|
-
const cached = await this.cache.getTask(taskId);
|
|
128
|
-
return cached ?? null;
|
|
129
|
-
}
|
|
130
|
-
throw err;
|
|
138
|
+
if (!this.cache) {
|
|
139
|
+
throw new BackendError("Redmine cache is disabled; projection reads are unavailable", "E_BACKEND");
|
|
131
140
|
}
|
|
141
|
+
return (await this.cache.getTask(taskId)) ?? null;
|
|
132
142
|
}
|
|
133
143
|
async getTasks(taskIds) {
|
|
134
144
|
// Use limited parallelism to avoid hammering the Redmine API.
|
|
@@ -55,9 +55,27 @@ export type TaskData = {
|
|
|
55
55
|
id_source?: string;
|
|
56
56
|
};
|
|
57
57
|
export type TaskDocMeta = Pick<TaskData, "doc" | "doc_version" | "doc_updated_at" | "doc_updated_by">;
|
|
58
|
+
export type TaskBackendCapabilities = {
|
|
59
|
+
canonical_source: "local" | "remote";
|
|
60
|
+
projection: "canonical" | "cache";
|
|
61
|
+
reads_from_projection_by_default: boolean;
|
|
62
|
+
writes_task_readmes?: boolean;
|
|
63
|
+
may_access_network_on_read: boolean;
|
|
64
|
+
may_access_network_on_write: boolean;
|
|
65
|
+
supports_projection_refresh: boolean;
|
|
66
|
+
supports_push_sync: boolean;
|
|
67
|
+
supports_snapshot_export: boolean;
|
|
68
|
+
};
|
|
69
|
+
export type TaskProjectionRefreshOptions = {
|
|
70
|
+
allowNetwork: boolean;
|
|
71
|
+
quiet?: boolean;
|
|
72
|
+
conflict?: "diff" | "prefer-local" | "prefer-remote" | "fail";
|
|
73
|
+
};
|
|
58
74
|
export type TaskBackend = {
|
|
59
75
|
id: string;
|
|
76
|
+
capabilities: TaskBackendCapabilities;
|
|
60
77
|
listTasks(): Promise<TaskData[]>;
|
|
78
|
+
listProjectionTasks?(): Promise<TaskData[]>;
|
|
61
79
|
getLastListWarnings?(): string[];
|
|
62
80
|
getTask(taskId: string): Promise<TaskData | null>;
|
|
63
81
|
getTasks?(taskIds: string[]): Promise<(TaskData | null)[]>;
|
|
@@ -67,6 +85,8 @@ export type TaskBackend = {
|
|
|
67
85
|
scanned: number;
|
|
68
86
|
changed: number;
|
|
69
87
|
}>;
|
|
88
|
+
refreshProjection?(opts: TaskProjectionRefreshOptions): Promise<void>;
|
|
89
|
+
exportProjectionSnapshot?(outputPath: string): Promise<void>;
|
|
70
90
|
exportTasksJson?(outputPath: string): Promise<void>;
|
|
71
91
|
getTaskDoc?(taskId: string): Promise<string>;
|
|
72
92
|
setTaskDoc?(taskId: string, doc: string, updatedBy?: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/backends/task-backend/shared/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/backends/task-backend/shared/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { DEFAULT_DOC_UPDATED_BY, DOC_VERSION, TASK_ID_RE } from "./shared/constants.js";
|
|
2
|
-
export type { PlanApproval, PlanApprovalState, TaskBackend, TaskData, TaskDocMeta, TaskEvent, TaskEventType, VerificationResult, VerificationState, } from "./shared/types.js";
|
|
2
|
+
export type { PlanApproval, PlanApprovalState, TaskBackend, TaskBackendCapabilities, TaskData, TaskDocMeta, TaskEvent, TaskEventType, TaskProjectionRefreshOptions, VerificationResult, VerificationState, } from "./shared/types.js";
|
|
3
3
|
export * from "./shared/concurrency.js";
|
|
4
4
|
export * from "./shared/doc.js";
|
|
5
5
|
export * from "./shared/errors.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExF,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/backends/task-backend/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExF,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,EACb,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { BackendError, RedmineUnavailable, buildTasksExportSnapshotFromTasks, extractTaskDoc, mergeTaskDoc, taskRecordToData, writeTasksExportFromTasks, type PlanApproval, type PlanApprovalState, type TaskBackend, type TaskData, type TaskEvent, type TaskEventType, type VerificationResult, type VerificationState, } from "./task-backend/shared.js";
|
|
1
|
+
export { BackendError, RedmineUnavailable, buildTasksExportSnapshotFromTasks, extractTaskDoc, mergeTaskDoc, taskRecordToData, writeTasksExportFromTasks, type PlanApproval, type PlanApprovalState, type TaskBackend, type TaskBackendCapabilities, type TaskData, type TaskEvent, type TaskEventType, type TaskProjectionRefreshOptions, type VerificationResult, type VerificationState, } from "./task-backend/shared.js";
|
|
2
2
|
export { LocalBackend } from "./task-backend/local-backend.js";
|
|
3
3
|
export { RedmineBackend } from "./task-backend/redmine-backend.js";
|
|
4
4
|
export { loadTaskBackend } from "./task-backend/load.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iCAAiC,EACjC,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"task-backend.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iCAAiC,EACjC,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-backend.test-helpers.d.ts","sourceRoot":"","sources":["../../src/backends/task-backend.test-helpers.ts"],"names":[],"mappings":"AAUA,wBAAgB,6BAA6B,IAAI,IAAI,CAWpD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnD;AAED,eAAO,MAAM,SAAS,GAAI,eAAe,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAatE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mkdtemp } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { afterEach, beforeEach } from "vitest";
|
|
5
|
+
import { silenceStdIO } from "../cli/run-cli.test-helpers.js";
|
|
6
|
+
const TMP_PREFIX = "agentplane-task-backend-";
|
|
7
|
+
export function installTaskBackendTestHarness() {
|
|
8
|
+
let restoreStdIO = null;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
restoreStdIO = silenceStdIO();
|
|
11
|
+
});
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
restoreStdIO?.();
|
|
14
|
+
restoreStdIO = null;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function makeTempDir() {
|
|
18
|
+
return await mkdtemp(path.join(os.tmpdir(), TMP_PREFIX));
|
|
19
|
+
}
|
|
20
|
+
export const makeIssue = (priorityName) => ({
|
|
21
|
+
id: 1,
|
|
22
|
+
subject: "Subject",
|
|
23
|
+
description: "Desc",
|
|
24
|
+
status: { id: 1 },
|
|
25
|
+
priority: priorityName ? { name: priorityName } : undefined,
|
|
26
|
+
custom_fields: [
|
|
27
|
+
{ id: 2, value: '["echo ok"]' },
|
|
28
|
+
{ id: 3, value: '{"hash":"h","message":"m"}' },
|
|
29
|
+
{ id: 4, value: "note" },
|
|
30
|
+
{ id: 5, value: "2" },
|
|
31
|
+
],
|
|
32
|
+
updated_on: "2026-01-30T00:00:00Z",
|
|
33
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-guide.d.ts","sourceRoot":"","sources":["../../src/cli/bootstrap-guide.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAClF,eAAO,MAAM,+BAA+B,0BAA0B,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,4BAA4B,oKAM/B,CAAC;AAEX,eAAO,MAAM,4BAA4B,UAIxC,CAAC;AAEF,eAAO,MAAM,oCAAoC,oUAMvC,CAAC;AAEX,eAAO,MAAM,2BAA2B,sFAI9B,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,
|
|
1
|
+
{"version":3,"file":"bootstrap-guide.d.ts","sourceRoot":"","sources":["../../src/cli/bootstrap-guide.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAClF,eAAO,MAAM,+BAA+B,0BAA0B,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,4BAA4B,oKAM/B,CAAC;AAEX,eAAO,MAAM,4BAA4B,UAIxC,CAAC;AAEF,eAAO,MAAM,oCAAoC,oUAMvC,CAAC;AAEX,eAAO,MAAM,2BAA2B,sFAI9B,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,EAoChD,CAAC;AAEX,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAiB3F;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,CA2B3C"}
|
|
@@ -40,6 +40,7 @@ export const BOOTSTRAP_SECTIONS = [
|
|
|
40
40
|
summary: "Use one short direct-mode route: create the task, approve it, start it, verify it, and finish it.",
|
|
41
41
|
commands: BOOTSTRAP_DIRECT_HAPPY_PATH_COMMANDS,
|
|
42
42
|
notes: [
|
|
43
|
+
"Use `agentplane role ORCHESTRATOR` during planning, then switch to `agentplane role <OWNER>` before owner-scoped execution.",
|
|
43
44
|
"Use `task doc set` to fill required README sections before approval.",
|
|
44
45
|
"For dependent tasks, wait until upstream tasks are DONE before `task start-ready`.",
|
|
45
46
|
"`task plan approve` and `task start-ready` must run sequentially, never in parallel.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-guide.d.ts","sourceRoot":"","sources":["../../src/cli/command-guide.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,CAAC;
|
|
1
|
+
{"version":3,"file":"command-guide.d.ts","sourceRoot":"","sources":["../../src/cli/command-guide.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,CAAC;AAmGF,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAMvE;AAMD,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAO,GAC/C,MAAM,GAAG,IAAI,CA6Bf;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAoCzC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { COMMAND_SNIPPETS } from "./command-snippets.js";
|
|
2
2
|
import { BOOTSTRAP_PREFLIGHT_COMMANDS, BOOTSTRAP_TASK_PREP_COMMANDS } from "./bootstrap-guide.js";
|
|
3
|
-
const SHARED_STARTUP_NOTE = `- Shared startup path: \`${COMMAND_SNIPPETS.core.quickstart}\` is the canonical installed bootstrap; use \`${COMMAND_SNIPPETS.core.role}\`
|
|
3
|
+
const SHARED_STARTUP_NOTE = `- Shared startup path: \`${COMMAND_SNIPPETS.core.quickstart}\` is the canonical installed bootstrap; use \`${COMMAND_SNIPPETS.core.role}\` to activate the current role before role-scoped planning or execution.`;
|
|
4
4
|
function renderQuickstartCommandBlock(commands) {
|
|
5
5
|
return ["```bash", ...commands, "```"];
|
|
6
6
|
}
|
|
@@ -10,6 +10,7 @@ const ROLE_GUIDES = [
|
|
|
10
10
|
lines: [
|
|
11
11
|
SHARED_STARTUP_NOTE,
|
|
12
12
|
"- Owns preflight, plan summaries, approvals, and scope checkpoints.",
|
|
13
|
+
"- Hand off implementation, verification, and other owner-scoped execution to the task owner role as soon as the owner is known.",
|
|
13
14
|
"- Does not create non-executable tasks or bypass lifecycle guardrails.",
|
|
14
15
|
],
|
|
15
16
|
},
|
|
@@ -162,7 +163,7 @@ export function renderQuickstart() {
|
|
|
162
163
|
"",
|
|
163
164
|
"## Go deeper",
|
|
164
165
|
"",
|
|
165
|
-
`- \`${COMMAND_SNIPPETS.core.role}\` for role
|
|
166
|
+
`- \`${COMMAND_SNIPPETS.core.role}\` to activate ORCHESTRATOR for planning and the task owner role before owner-scoped execution.`,
|
|
166
167
|
"- `agentplane help <command>` for flags, examples, and exceptional/manual flows.",
|
|
167
168
|
"- Keep installed runtime guidance self-contained; do not depend on repo-only docs files.",
|
|
168
169
|
"- If you need the docs site, treat it as a public reference surface rather than a required local file.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reason-codes.d.ts","sourceRoot":"","sources":["../../src/cli/reason-codes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,WAAW,GACX,KAAK,GACL,SAAS,GACT,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"reason-codes.d.ts","sourceRoot":"","sources":["../../src/cli/reason-codes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,WAAW,GACX,KAAK,GACL,SAAS,GACT,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA2GF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAGtF"}
|
package/dist/cli/reason-codes.js
CHANGED
|
@@ -47,6 +47,36 @@ const REASON_CODE_MAP = {
|
|
|
47
47
|
summary: "command requires valid git repository context",
|
|
48
48
|
action: "confirm repository root and tracked changes",
|
|
49
49
|
},
|
|
50
|
+
git_task_commit_blocked: {
|
|
51
|
+
code: "git_task_commit_blocked",
|
|
52
|
+
category: "git",
|
|
53
|
+
summary: "task-scoped commit was blocked after guard validation passed",
|
|
54
|
+
action: "inspect the staged payload and fix the blocking hook or policy failure",
|
|
55
|
+
},
|
|
56
|
+
git_close_commit_blocked: {
|
|
57
|
+
code: "git_close_commit_blocked",
|
|
58
|
+
category: "git",
|
|
59
|
+
summary: "deterministic close commit was blocked after staging the task README",
|
|
60
|
+
action: "inspect the staged close payload and fix the blocking hook or policy failure",
|
|
61
|
+
},
|
|
62
|
+
git_close_commit_dirty_index: {
|
|
63
|
+
code: "git_close_commit_dirty_index",
|
|
64
|
+
category: "git",
|
|
65
|
+
summary: "close commit cannot proceed while unrelated paths are already staged",
|
|
66
|
+
action: "clear the git index and rerun the close commit flow",
|
|
67
|
+
},
|
|
68
|
+
git_pre_commit_format: {
|
|
69
|
+
code: "git_pre_commit_format",
|
|
70
|
+
category: "git",
|
|
71
|
+
summary: "a formatting check in the pre-commit path blocked the commit",
|
|
72
|
+
action: "run the formatter, stage the resulting changes, and retry the commit",
|
|
73
|
+
},
|
|
74
|
+
git_pre_commit_lint: {
|
|
75
|
+
code: "git_pre_commit_lint",
|
|
76
|
+
category: "git",
|
|
77
|
+
summary: "a lint check in the pre-commit path blocked the commit",
|
|
78
|
+
action: "run lint, fix the reported errors, and retry the commit",
|
|
79
|
+
},
|
|
50
80
|
network_gate: {
|
|
51
81
|
code: "network_gate",
|
|
52
82
|
category: "network",
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type CommandEntry } from "./shared.js";
|
|
2
|
+
export declare const CORE_COMMANDS: readonly [CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry];
|
|
3
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/command-catalog/core.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,aAAa,2VAqMkB,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { doctorSpec } from "../../../commands/doctor.spec.js";
|
|
2
|
+
import { runtimeExplainSpec, runtimeSpec } from "../../../commands/runtime.command.js";
|
|
3
|
+
import { upgradeSpec } from "../../../commands/upgrade.command.js";
|
|
4
|
+
import { workflowBuildSpec } from "../../../commands/workflow-build.command.js";
|
|
5
|
+
import { workflowSpec } from "../../../commands/workflow.command.js";
|
|
6
|
+
import { workflowDebugSpec, workflowLandSpec, workflowSyncSpec, } from "../../../commands/workflow-playbook.command.js";
|
|
7
|
+
import { workflowRestoreSpec } from "../../../commands/workflow-restore.command.js";
|
|
8
|
+
import { releaseApplySpec } from "../../../commands/release/apply.command.js";
|
|
9
|
+
import { releasePlanSpec } from "../../../commands/release/plan.command.js";
|
|
10
|
+
import { releaseSpec } from "../../../commands/release/release.command.js";
|
|
11
|
+
import { configSetSpec, configShowSpec, modeGetSpec, modeSetSpec, profileSetSpec, } from "../commands/config.js";
|
|
12
|
+
import { agentsSpec, preflightSpec, quickstartSpec, roleSpec } from "../commands/core.js";
|
|
13
|
+
import { ideSyncSpec } from "../commands/ide.js";
|
|
14
|
+
import { initSpec } from "../commands/init.js";
|
|
15
|
+
import { entry } from "./shared.js";
|
|
16
|
+
export const CORE_COMMANDS = [
|
|
17
|
+
entry(initSpec, () => import("../commands/init.js").then((m) => m.runInit), {
|
|
18
|
+
needsProject: false,
|
|
19
|
+
needsConfig: false,
|
|
20
|
+
needsTaskContext: false,
|
|
21
|
+
}),
|
|
22
|
+
entry(upgradeSpec, () => import("../../../commands/upgrade.command.js").then((m) => m.runUpgrade), {
|
|
23
|
+
needsProject: false,
|
|
24
|
+
needsConfig: false,
|
|
25
|
+
needsTaskContext: false,
|
|
26
|
+
}),
|
|
27
|
+
entry(releaseSpec, () => import("../../../commands/release/release.command.js").then((m) => m.runRelease), {
|
|
28
|
+
needsProject: false,
|
|
29
|
+
needsConfig: false,
|
|
30
|
+
needsTaskContext: false,
|
|
31
|
+
}),
|
|
32
|
+
entry(releasePlanSpec, () => import("../../../commands/release/plan.command.js").then((m) => m.runReleasePlan), {
|
|
33
|
+
needsProject: true,
|
|
34
|
+
needsConfig: false,
|
|
35
|
+
needsTaskContext: false,
|
|
36
|
+
}),
|
|
37
|
+
entry(releaseApplySpec, () => import("../../../commands/release/apply.command.js").then((m) => m.runReleaseApply), {
|
|
38
|
+
needsProject: true,
|
|
39
|
+
needsConfig: false,
|
|
40
|
+
needsTaskContext: false,
|
|
41
|
+
}),
|
|
42
|
+
entry(quickstartSpec, () => import("../commands/core.js").then((m) => m.runQuickstart), {
|
|
43
|
+
needsProject: false,
|
|
44
|
+
needsConfig: false,
|
|
45
|
+
needsTaskContext: false,
|
|
46
|
+
}),
|
|
47
|
+
entry(preflightSpec, () => import("../commands/core.js").then((m) => m.runPreflight), {
|
|
48
|
+
needsProject: false,
|
|
49
|
+
needsConfig: false,
|
|
50
|
+
needsTaskContext: false,
|
|
51
|
+
}),
|
|
52
|
+
entry(runtimeSpec, () => import("../../../commands/runtime.command.js").then((m) => m.runRuntime), {
|
|
53
|
+
needsProject: false,
|
|
54
|
+
needsConfig: false,
|
|
55
|
+
needsTaskContext: false,
|
|
56
|
+
}),
|
|
57
|
+
entry(runtimeExplainSpec, () => import("../../../commands/runtime.command.js").then((m) => m.runRuntimeExplain), {
|
|
58
|
+
needsProject: false,
|
|
59
|
+
needsConfig: false,
|
|
60
|
+
needsTaskContext: false,
|
|
61
|
+
}),
|
|
62
|
+
entry(roleSpec, () => import("../commands/core.js").then((m) => m.runRole), {
|
|
63
|
+
needsProject: false,
|
|
64
|
+
needsConfig: false,
|
|
65
|
+
needsTaskContext: false,
|
|
66
|
+
}),
|
|
67
|
+
entry(agentsSpec, (deps) => import("../commands/core.js").then((m) => m.makeRunAgentsHandler(deps)), {
|
|
68
|
+
needsProject: true,
|
|
69
|
+
needsConfig: false,
|
|
70
|
+
needsTaskContext: false,
|
|
71
|
+
}),
|
|
72
|
+
entry(configShowSpec, (deps) => import("../commands/config.js").then((m) => m.makeRunConfigShowHandler(deps)), {
|
|
73
|
+
needsProject: true,
|
|
74
|
+
needsConfig: true,
|
|
75
|
+
needsTaskContext: false,
|
|
76
|
+
}),
|
|
77
|
+
entry(configSetSpec, (deps) => import("../commands/config.js").then((m) => m.makeRunConfigSetHandler(deps)), {
|
|
78
|
+
needsProject: true,
|
|
79
|
+
needsConfig: true,
|
|
80
|
+
needsTaskContext: false,
|
|
81
|
+
}),
|
|
82
|
+
entry(modeGetSpec, (deps) => import("../commands/config.js").then((m) => m.makeRunModeGetHandler(deps)), {
|
|
83
|
+
needsProject: true,
|
|
84
|
+
needsConfig: true,
|
|
85
|
+
needsTaskContext: false,
|
|
86
|
+
}),
|
|
87
|
+
entry(modeSetSpec, (deps) => import("../commands/config.js").then((m) => m.makeRunModeSetHandler(deps)), {
|
|
88
|
+
needsProject: true,
|
|
89
|
+
needsConfig: true,
|
|
90
|
+
needsTaskContext: false,
|
|
91
|
+
}),
|
|
92
|
+
entry(profileSetSpec, (deps) => import("../commands/config.js").then((m) => m.makeRunProfileSetHandler(deps)), {
|
|
93
|
+
needsProject: true,
|
|
94
|
+
needsConfig: true,
|
|
95
|
+
needsTaskContext: false,
|
|
96
|
+
}),
|
|
97
|
+
entry(ideSyncSpec, (deps) => import("../commands/ide.js").then((m) => m.makeRunIdeSyncHandler(deps)), {
|
|
98
|
+
needsProject: true,
|
|
99
|
+
needsConfig: true,
|
|
100
|
+
needsTaskContext: false,
|
|
101
|
+
}),
|
|
102
|
+
entry(doctorSpec, () => import("../../../commands/doctor.run.js").then((m) => m.runDoctor), {
|
|
103
|
+
needsProject: true,
|
|
104
|
+
needsConfig: false,
|
|
105
|
+
needsTaskContext: false,
|
|
106
|
+
}),
|
|
107
|
+
entry(workflowSpec, () => import("../../../commands/workflow.command.js").then((m) => m.runWorkflow), {
|
|
108
|
+
needsProject: false,
|
|
109
|
+
needsConfig: false,
|
|
110
|
+
needsTaskContext: false,
|
|
111
|
+
}),
|
|
112
|
+
entry(workflowBuildSpec, () => import("../../../commands/workflow-build.command.js").then((m) => m.runWorkflowBuild), {
|
|
113
|
+
needsProject: true,
|
|
114
|
+
needsConfig: false,
|
|
115
|
+
needsTaskContext: false,
|
|
116
|
+
}),
|
|
117
|
+
entry(workflowRestoreSpec, () => import("../../../commands/workflow-restore.command.js").then((m) => m.runWorkflowRestore), {
|
|
118
|
+
needsProject: true,
|
|
119
|
+
needsConfig: false,
|
|
120
|
+
needsTaskContext: false,
|
|
121
|
+
}),
|
|
122
|
+
entry(workflowDebugSpec, () => import("../../../commands/workflow-playbook.command.js").then((m) => m.runWorkflowDebug), {
|
|
123
|
+
needsProject: true,
|
|
124
|
+
needsConfig: false,
|
|
125
|
+
needsTaskContext: false,
|
|
126
|
+
}),
|
|
127
|
+
entry(workflowSyncSpec, () => import("../../../commands/workflow-playbook.command.js").then((m) => m.runWorkflowSync), {
|
|
128
|
+
needsProject: true,
|
|
129
|
+
needsConfig: false,
|
|
130
|
+
needsTaskContext: false,
|
|
131
|
+
}),
|
|
132
|
+
entry(workflowLandSpec, () => import("../../../commands/workflow-playbook.command.js").then((m) => m.runWorkflowLand), {
|
|
133
|
+
needsProject: true,
|
|
134
|
+
needsConfig: false,
|
|
135
|
+
needsTaskContext: false,
|
|
136
|
+
}),
|
|
137
|
+
];
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type CommandEntry } from "./shared.js";
|
|
2
|
+
export declare const LIFECYCLE_COMMANDS: readonly [CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry];
|
|
3
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/command-catalog/lifecycle.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,yPAmFa,CAAC"}
|