maestro-flow 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/learn-decompose.md +3 -3
- package/.claude/commands/learn-follow.md +5 -5
- package/.claude/commands/learn-investigate.md +3 -3
- package/.claude/commands/learn-retro.md +6 -6
- package/.claude/commands/learn-second-opinion.md +3 -3
- package/.claude/commands/maestro-analyze.md +123 -99
- package/.claude/commands/maestro-brainstorm.md +2 -2
- package/.claude/commands/maestro-execute.md +137 -97
- package/.claude/commands/maestro-fork.md +111 -0
- package/.claude/commands/maestro-init.md +6 -6
- package/.claude/commands/maestro-merge.md +77 -0
- package/.claude/commands/maestro-milestone-audit.md +72 -60
- package/.claude/commands/maestro-milestone-complete.md +67 -59
- package/.claude/commands/maestro-milestone-release.md +6 -6
- package/.claude/commands/maestro-plan.md +151 -130
- package/.claude/commands/maestro-quick.md +4 -4
- package/.claude/commands/maestro-roadmap.md +5 -5
- package/.claude/commands/maestro-spec-generate.md +5 -5
- package/.claude/commands/maestro-ui-design.md +3 -3
- package/.claude/commands/maestro-verify.md +106 -87
- package/.claude/commands/maestro.md +10 -4
- package/.claude/commands/manage-codebase-rebuild.md +4 -4
- package/.claude/commands/manage-codebase-refresh.md +1 -1
- package/.claude/commands/manage-harvest.md +5 -5
- package/.claude/commands/manage-issue-discover.md +1 -1
- package/.claude/commands/manage-issue-execute.md +6 -6
- package/.claude/commands/manage-issue.md +6 -6
- package/.claude/commands/manage-learn.md +2 -2
- package/.claude/commands/manage-memory-capture.md +4 -4
- package/.claude/commands/manage-memory.md +2 -2
- package/.claude/commands/manage-status.md +24 -24
- package/.claude/commands/quality-business-test.md +5 -5
- package/.claude/commands/quality-debug.md +4 -4
- package/.claude/commands/quality-integration-test.md +4 -4
- package/.claude/commands/quality-refactor.md +3 -3
- package/.claude/commands/quality-retrospective.md +2 -2
- package/.claude/commands/quality-review.md +4 -4
- package/.claude/commands/quality-sync.md +3 -3
- package/.claude/commands/quality-test-gen.md +4 -4
- package/.claude/commands/quality-test.md +9 -9
- package/.claude/commands/spec-add.md +2 -2
- package/.claude/commands/spec-load.md +1 -1
- package/.claude/commands/spec-setup.md +5 -5
- package/.claude/commands/wiki-connect.md +3 -3
- package/.claude/commands/wiki-digest.md +4 -4
- package/.codex/skills/maestro-analyze/SKILL.md +52 -14
- package/.codex/skills/maestro-execute/SKILL.md +27 -26
- package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
- package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
- package/.codex/skills/maestro-plan/SKILL.md +47 -17
- package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
- package/README.md +19 -14
- package/README.zh-CN.md +16 -12
- package/bin/maestro-mcp.js +1 -1
- package/chains/_intent-map.json +21 -9
- package/chains/_router.json +30 -77
- package/chains/brainstorm-driven.json +17 -6
- package/chains/full-lifecycle.json +22 -23
- package/chains/milestone-close.json +20 -7
- package/chains/milestone-fork-merge.json +50 -0
- package/chains/roadmap-driven.json +17 -6
- package/chains/spec-driven.json +17 -6
- package/dashboard/dist/assets/{ArtifactsPage-BmPOu8sO.js → ArtifactsPage-DZNCi6tn.js} +12 -7
- package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
- package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
- package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
- package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
- package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
- package/dashboard/dist/assets/{MarkdownRenderer-BjZ43aSa.js → MarkdownRenderer-X4af_WNb.js} +1 -1
- package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
- package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
- package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
- package/dashboard/dist/assets/{RequirementBoardPage-B7yRL0s_.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
- package/dashboard/dist/assets/{RequirementPage-D8J_-b6O.js → RequirementPage-Bllxe2XI.js} +10 -5
- package/dashboard/dist/assets/{SpecsPage-6lO8v8_C.js → SpecsPage-9lwxKT27.js} +2 -2
- package/dashboard/dist/assets/{SupervisorPage-Ds5N378a.js → SupervisorPage-SusdfHFq.js} +1 -1
- package/dashboard/dist/assets/{TeamsPage-DrkKr17T.js → TeamsPage-DsuM6OwC.js} +2 -2
- package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
- package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
- package/dashboard/dist/assets/{arrow-left-CadP5YgU.js → arrow-left-Bqtb2hle.js} +1 -1
- package/dashboard/dist/assets/{check-5xufDzS8.js → check-u6fGOwQO.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-CYbpR4ev.js → chevron-right-Csu22t58.js} +1 -1
- package/dashboard/dist/assets/{circle-Bm-5Q-Yh.js → circle-CMrkbRNg.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-BqcYuT7x.js → circle-alert-c3tH1P4z.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-yyzAFysU.js → circle-check-big-TDSeWstm.js} +1 -1
- package/dashboard/dist/assets/{circle-check-DEVzW_lm.js → circle-check-gYxxSYuH.js} +1 -1
- package/dashboard/dist/assets/{code-BBdC8Wmw.js → code-CFN2uX9V.js} +1 -1
- package/dashboard/dist/assets/{columns-3-CQ9Trztr.js → columns-3-38xIDlzy.js} +1 -1
- package/dashboard/dist/assets/{download-DayuF-sn.js → download-DC7KkKyP.js} +1 -1
- package/dashboard/dist/assets/{folder-CqXeSKeC.js → folder-CWq_lAnf.js} +1 -1
- package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
- package/dashboard/dist/assets/{index-Dru5HYy0.js → index-Do71weNR.js} +1 -1
- package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
- package/dashboard/dist/assets/{list-DBOD6IUt.js → list-CgIP_2A-.js} +1 -1
- package/dashboard/dist/assets/{minus-fQI1Syn2.js → minus-DYoN5UGk.js} +1 -1
- package/dashboard/dist/assets/{pen-line-Bkbbngl5.js → pen-line-Bh_WKYHm.js} +1 -1
- package/dashboard/dist/assets/{proxy-teW12DdZ.js → proxy-BKxDAKTj.js} +1 -1
- package/dashboard/dist/assets/{search-Bq3ygFUW.js → search-SieXnOgr.js} +1 -1
- package/dashboard/dist/assets/{shallow-22ZN8sFt.js → shallow-Bme1JY57.js} +1 -1
- package/dashboard/dist/assets/{table-BEYtdWc4.js → table-llyEtj-7.js} +1 -1
- package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
- package/dashboard/dist/assets/{trash-2-DMqGBgcF.js → trash-2-C8f4vFFM.js} +1 -1
- package/dashboard/dist/assets/{zap-9DVkGVtt.js → zap-4uwlzVm0.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +43 -3
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
- package/dashboard/package.json +59 -59
- package/dist/src/cli.js +3 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/{team.d.ts → collab.d.ts} +2 -2
- package/dist/src/commands/collab.d.ts.map +1 -0
- package/dist/src/commands/{team.js → collab.js} +391 -24
- package/dist/src/commands/collab.js.map +1 -0
- package/dist/src/commands/msg.d.ts.map +1 -1
- package/dist/src/commands/msg.js +4 -3
- package/dist/src/commands/msg.js.map +1 -1
- package/dist/src/hooks/team-monitor.d.ts.map +1 -1
- package/dist/src/hooks/team-monitor.js +16 -0
- package/dist/src/hooks/team-monitor.js.map +1 -1
- package/dist/src/tools/collab-adapter.d.ts +85 -0
- package/dist/src/tools/collab-adapter.d.ts.map +1 -0
- package/dist/src/tools/collab-adapter.js +320 -0
- package/dist/src/tools/collab-adapter.js.map +1 -0
- package/dist/src/tools/namespace-guard.d.ts +2 -0
- package/dist/src/tools/namespace-guard.d.ts.map +1 -1
- package/dist/src/tools/namespace-guard.js +12 -0
- package/dist/src/tools/namespace-guard.js.map +1 -1
- package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
- package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
- package/dist/src/tools/phase-gate-evaluator.js +42 -0
- package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
- package/dist/src/tools/team-members.d.ts +18 -0
- package/dist/src/tools/team-members.d.ts.map +1 -1
- package/dist/src/tools/team-members.js +50 -0
- package/dist/src/tools/team-members.js.map +1 -1
- package/dist/src/tools/team-tasks.d.ts +120 -0
- package/dist/src/tools/team-tasks.d.ts.map +1 -0
- package/dist/src/tools/team-tasks.js +365 -0
- package/dist/src/tools/team-tasks.js.map +1 -0
- package/dist/src/tools/transition-recorder.d.ts +3 -0
- package/dist/src/tools/transition-recorder.d.ts.map +1 -1
- package/dist/src/tools/transition-recorder.js +52 -1
- package/dist/src/tools/transition-recorder.js.map +1 -1
- package/dist/src/utils/get-version.d.ts.map +1 -1
- package/dist/src/utils/get-version.js +15 -4
- package/dist/src/utils/get-version.js.map +1 -1
- package/package.json +1 -1
- package/templates/config.json +7 -0
- package/templates/worktree-scope.json +10 -0
- package/templates/worktrees.json +27 -0
- package/workflows/analyze.md +86 -36
- package/workflows/brainstorm.md +17 -37
- package/workflows/execute.md +94 -28
- package/workflows/fork.md +309 -0
- package/workflows/init.md +10 -1
- package/workflows/issue.md +66 -7
- package/workflows/maestro-coordinate.md +23 -16
- package/workflows/maestro.md +52 -35
- package/workflows/merge.md +285 -0
- package/workflows/milestone-audit.md +89 -70
- package/workflows/milestone-complete.md +89 -156
- package/workflows/plan.md +122 -17
- package/workflows/retrospective.md +3 -3
- package/workflows/roadmap.md +11 -3
- package/workflows/spec-generate.md +9 -0
- package/workflows/status.md +76 -27
- package/workflows/ui-design.md +14 -12
- package/workflows/verify.md +44 -8
- package/.claude/commands/maestro-phase-add.md +0 -63
- package/.claude/commands/maestro-phase-transition.md +0 -75
- package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
- package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
- package/chains/singles/phase-add.json +0 -31
- package/chains/singles/phase-transition.json +0 -23
- package/dashboard/dist/assets/ChatInput-CL8YDfOU.js +0 -67
- package/dashboard/dist/assets/ChatPage-CT-ozBK2.js +0 -8
- package/dashboard/dist/assets/CollabPage-C0rWMden.js +0 -1
- package/dashboard/dist/assets/KanbanPage-C6WbAlwI.js +0 -16
- package/dashboard/dist/assets/McpPage-BPIXADQi.js +0 -16
- package/dashboard/dist/assets/TreeBrowser-g_QUKemL.js +0 -11
- package/dashboard/dist/assets/WorkflowPage-X8aNkDEr.js +0 -6
- package/dashboard/dist/assets/git-branch-SqFf4Ru5.js +0 -6
- package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
- package/dashboard/dist/assets/index-nufWop4p.js +0 -231
- package/dashboard/dist/assets/wrench-B84-zdLI.js +0 -11
- package/dist/src/commands/team.d.ts.map +0 -1
- package/dist/src/commands/team.js.map +0 -1
- package/workflows/phase-add.md +0 -252
- package/workflows/phase-transition.md +0 -399
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* two concurrent `maestro team join` on different machines never collide on
|
|
12
12
|
* git merge (vs. a single `members.json` which cannot `merge=union`).
|
|
13
13
|
*/
|
|
14
|
+
export type ProjectRole = string;
|
|
14
15
|
export interface MemberRecord {
|
|
15
16
|
uid: string;
|
|
16
17
|
name: string;
|
|
@@ -18,6 +19,7 @@ export interface MemberRecord {
|
|
|
18
19
|
host: string;
|
|
19
20
|
role: 'admin' | 'member';
|
|
20
21
|
joinedAt: string;
|
|
22
|
+
projectRoles?: ProjectRole[];
|
|
21
23
|
}
|
|
22
24
|
/** Absolute path to the human-collab members directory. */
|
|
23
25
|
export declare function getMembersDir(): string;
|
|
@@ -91,4 +93,20 @@ export declare function requireRole(required: 'admin' | 'member'): MemberRecord;
|
|
|
91
93
|
export declare function joinTeam(opts?: {
|
|
92
94
|
role?: 'admin' | 'member';
|
|
93
95
|
}): MemberRecord;
|
|
96
|
+
/**
|
|
97
|
+
* Add a project role to a member's record. Idempotent — adding a role that
|
|
98
|
+
* already exists is a no-op. Returns the updated record, or null if the
|
|
99
|
+
* member was not found.
|
|
100
|
+
*/
|
|
101
|
+
export declare function addProjectRole(uid: string, role: string): MemberRecord | null;
|
|
102
|
+
/**
|
|
103
|
+
* Remove a project role from a member's record. No-op if the role is not
|
|
104
|
+
* present. Returns the updated record, or null if the member was not found.
|
|
105
|
+
*/
|
|
106
|
+
export declare function removeProjectRole(uid: string, role: string): MemberRecord | null;
|
|
107
|
+
/**
|
|
108
|
+
* List project roles. When `uid` is provided, returns that member's roles
|
|
109
|
+
* (or an empty array). When omitted, returns a Map of all members' roles.
|
|
110
|
+
*/
|
|
111
|
+
export declare function listProjectRoles(uid?: string): ProjectRole[] | Map<string, ProjectRole[]>;
|
|
94
112
|
//# sourceMappingURL=team-members.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-members.d.ts","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"team-members.d.ts","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AAMD,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAUD;;;GAGG;AACH,wBAAgB,eAAe,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKxE;AAcD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,yEAAyE;AACzE,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAkB5C;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAI/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,YAAY,GAAG,IAAI,CAQjD;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAQtE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,GAAG,YAAY,CAkC3E;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAU7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWhF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAWzF"}
|
|
@@ -202,6 +202,56 @@ export function joinTeam(opts) {
|
|
|
202
202
|
return record;
|
|
203
203
|
}
|
|
204
204
|
// ---------------------------------------------------------------------------
|
|
205
|
+
// Project roles
|
|
206
|
+
// ---------------------------------------------------------------------------
|
|
207
|
+
/**
|
|
208
|
+
* Add a project role to a member's record. Idempotent — adding a role that
|
|
209
|
+
* already exists is a no-op. Returns the updated record, or null if the
|
|
210
|
+
* member was not found.
|
|
211
|
+
*/
|
|
212
|
+
export function addProjectRole(uid, role) {
|
|
213
|
+
const member = getMemberByUid(uid);
|
|
214
|
+
if (!member)
|
|
215
|
+
return null;
|
|
216
|
+
const roles = member.projectRoles ?? [];
|
|
217
|
+
if (roles.includes(role))
|
|
218
|
+
return member; // already present
|
|
219
|
+
member.projectRoles = [...roles, role];
|
|
220
|
+
writeFileSync(getMemberFilePath(uid), JSON.stringify(member, null, 2), 'utf-8');
|
|
221
|
+
return member;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Remove a project role from a member's record. No-op if the role is not
|
|
225
|
+
* present. Returns the updated record, or null if the member was not found.
|
|
226
|
+
*/
|
|
227
|
+
export function removeProjectRole(uid, role) {
|
|
228
|
+
const member = getMemberByUid(uid);
|
|
229
|
+
if (!member)
|
|
230
|
+
return null;
|
|
231
|
+
const roles = member.projectRoles ?? [];
|
|
232
|
+
const filtered = roles.filter((r) => r !== role);
|
|
233
|
+
if (filtered.length === roles.length)
|
|
234
|
+
return member; // role was not present
|
|
235
|
+
member.projectRoles = filtered.length > 0 ? filtered : undefined;
|
|
236
|
+
writeFileSync(getMemberFilePath(uid), JSON.stringify(member, null, 2), 'utf-8');
|
|
237
|
+
return member;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* List project roles. When `uid` is provided, returns that member's roles
|
|
241
|
+
* (or an empty array). When omitted, returns a Map of all members' roles.
|
|
242
|
+
*/
|
|
243
|
+
export function listProjectRoles(uid) {
|
|
244
|
+
if (uid !== undefined) {
|
|
245
|
+
const member = getMemberByUid(uid);
|
|
246
|
+
return member?.projectRoles ?? [];
|
|
247
|
+
}
|
|
248
|
+
const map = new Map();
|
|
249
|
+
for (const m of listMembers()) {
|
|
250
|
+
map.set(m.uid, m.projectRoles ?? []);
|
|
251
|
+
}
|
|
252
|
+
return map;
|
|
253
|
+
}
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
205
255
|
// Internals
|
|
206
256
|
// ---------------------------------------------------------------------------
|
|
207
257
|
function readMemberFile(path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-members.js","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"team-members.js","sourceRoot":"","sources":["../../../src/tools/team-members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-team task management (team-lite collaboration, Wave 2).
|
|
3
|
+
*
|
|
4
|
+
* Owns `.workflow/collab/tasks/{id}.json` -- per-file task records.
|
|
5
|
+
*
|
|
6
|
+
* Strict namespace separation: this module belongs to the HUMAN collaboration
|
|
7
|
+
* domain (`.workflow/collab/`). It must NEVER touch `.workflow/.team/` which
|
|
8
|
+
* is the agent pipeline message bus owned by `src/tools/team-msg.ts`.
|
|
9
|
+
*
|
|
10
|
+
* Per-file layout is deliberate: each task is a standalone JSON file so that
|
|
11
|
+
* concurrent edits on different machines can merge cleanly via git.
|
|
12
|
+
*/
|
|
13
|
+
export type TaskStatus = 'open' | 'assigned' | 'in_progress' | 'pending_review' | 'done' | 'closed';
|
|
14
|
+
export type TaskPriority = 'low' | 'medium' | 'high' | 'critical';
|
|
15
|
+
export type CheckAction = 'confirmed' | 'rejected' | 'commented';
|
|
16
|
+
export interface CheckEntry {
|
|
17
|
+
uid: string;
|
|
18
|
+
action: CheckAction;
|
|
19
|
+
comment?: string;
|
|
20
|
+
ts: string;
|
|
21
|
+
}
|
|
22
|
+
export interface CollabTask {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
description: string;
|
|
26
|
+
status: TaskStatus;
|
|
27
|
+
priority: TaskPriority;
|
|
28
|
+
assignee?: string;
|
|
29
|
+
reporter: string;
|
|
30
|
+
check_log: CheckEntry[];
|
|
31
|
+
tags?: string[];
|
|
32
|
+
external_refs?: Array<{
|
|
33
|
+
type: string;
|
|
34
|
+
id: string;
|
|
35
|
+
url?: string;
|
|
36
|
+
}>;
|
|
37
|
+
created_at: string;
|
|
38
|
+
updated_at: string;
|
|
39
|
+
updated_by: string;
|
|
40
|
+
}
|
|
41
|
+
/** Absolute path to the human-collab tasks directory. */
|
|
42
|
+
export declare function getTasksDir(): string;
|
|
43
|
+
/** Absolute path to a specific task JSON file. */
|
|
44
|
+
export declare function getTaskFilePath(id: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Atomically read and increment the counter file, returning the next
|
|
47
|
+
* `TASK-XXX` formatted id. Creates the counter file at `1` if absent.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getNextTaskId(): string;
|
|
50
|
+
/**
|
|
51
|
+
* Read and validate a task JSON file. Returns null if the file is missing,
|
|
52
|
+
* unparseable, or does not match the CollabTask shape.
|
|
53
|
+
*/
|
|
54
|
+
export declare function readTaskFile(filePath: string): CollabTask | null;
|
|
55
|
+
/**
|
|
56
|
+
* Atomic write of a task JSON file with pretty-printing.
|
|
57
|
+
*/
|
|
58
|
+
export declare function writeTaskFile(filePath: string, task: CollabTask): void;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new task. Generates the id via auto-increment counter, sets
|
|
61
|
+
* defaults (status=open, timestamps), and writes the JSON file.
|
|
62
|
+
*/
|
|
63
|
+
export declare function createTask(opts: {
|
|
64
|
+
title: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
priority?: TaskPriority;
|
|
67
|
+
reporter: string;
|
|
68
|
+
tags?: string[];
|
|
69
|
+
external_refs?: Array<{
|
|
70
|
+
type: string;
|
|
71
|
+
id: string;
|
|
72
|
+
url?: string;
|
|
73
|
+
}>;
|
|
74
|
+
}): CollabTask;
|
|
75
|
+
/**
|
|
76
|
+
* Read a single task by id. Returns null if the task does not exist or the
|
|
77
|
+
* file is invalid.
|
|
78
|
+
*/
|
|
79
|
+
export declare function getTask(id: string): CollabTask | null;
|
|
80
|
+
/**
|
|
81
|
+
* Update a task by merging partial fields. Validates status transition if
|
|
82
|
+
* the `status` field is being changed. Throws if the task does not exist or
|
|
83
|
+
* the transition is invalid.
|
|
84
|
+
*/
|
|
85
|
+
export declare function updateTask(id: string, partial: Partial<CollabTask>): CollabTask;
|
|
86
|
+
/**
|
|
87
|
+
* List all tasks, optionally filtered by status, assignee, reporter, or
|
|
88
|
+
* priority. Returns tasks sorted by id ascending.
|
|
89
|
+
*/
|
|
90
|
+
export declare function listTasks(filters?: {
|
|
91
|
+
status?: TaskStatus;
|
|
92
|
+
assignee?: string;
|
|
93
|
+
reporter?: string;
|
|
94
|
+
priority?: TaskPriority;
|
|
95
|
+
}): CollabTask[];
|
|
96
|
+
/**
|
|
97
|
+
* Delete a task file. Throws if the task does not exist.
|
|
98
|
+
*/
|
|
99
|
+
export declare function deleteTask(id: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Assign a task to a member. If the task is currently `open`, automatically
|
|
102
|
+
* transitions to `assigned`.
|
|
103
|
+
*/
|
|
104
|
+
export declare function assignTask(id: string, uid: string): CollabTask;
|
|
105
|
+
/**
|
|
106
|
+
* Update task status with transition validation. Throws if the transition is
|
|
107
|
+
* not allowed by VALID_TRANSITIONS.
|
|
108
|
+
*/
|
|
109
|
+
export declare function updateTaskStatus(id: string, newStatus: TaskStatus, updatedBy: string): CollabTask;
|
|
110
|
+
/**
|
|
111
|
+
* Append a check entry to a task's check_log. The timestamp is auto-generated.
|
|
112
|
+
* Existing entries are never modified or removed (append-only).
|
|
113
|
+
*/
|
|
114
|
+
export declare function addCheckEntry(id: string, entry: Omit<CheckEntry, 'ts'>): CollabTask;
|
|
115
|
+
/**
|
|
116
|
+
* Validate that a status transition is allowed by VALID_TRANSITIONS.
|
|
117
|
+
* A transition from a status to itself is always allowed (no-op).
|
|
118
|
+
*/
|
|
119
|
+
export declare function validateStatusTransition(from: TaskStatus, to: TaskStatus): boolean;
|
|
120
|
+
//# sourceMappingURL=team-tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/team-tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-team task management (team-lite collaboration, Wave 2).
|
|
3
|
+
*
|
|
4
|
+
* Owns `.workflow/collab/tasks/{id}.json` -- per-file task records.
|
|
5
|
+
*
|
|
6
|
+
* Strict namespace separation: this module belongs to the HUMAN collaboration
|
|
7
|
+
* domain (`.workflow/collab/`). It must NEVER touch `.workflow/.team/` which
|
|
8
|
+
* is the agent pipeline message bus owned by `src/tools/team-msg.ts`.
|
|
9
|
+
*
|
|
10
|
+
* Per-file layout is deliberate: each task is a standalone JSON file so that
|
|
11
|
+
* concurrent edits on different machines can merge cleanly via git.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, unlinkSync, } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { getProjectRoot } from '../utils/path-validator.js';
|
|
16
|
+
import { resolveSelf } from './team-members.js';
|
|
17
|
+
import { reportActivity } from './team-activity.js';
|
|
18
|
+
import { notifyAdapters } from './collab-adapter.js';
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const VALID_TRANSITIONS = {
|
|
23
|
+
'open': ['assigned', 'closed'],
|
|
24
|
+
'assigned': ['in_progress', 'open', 'closed'],
|
|
25
|
+
'in_progress': ['pending_review', 'assigned', 'closed'],
|
|
26
|
+
'pending_review': ['done', 'in_progress', 'closed'],
|
|
27
|
+
'done': ['closed', 'pending_review'],
|
|
28
|
+
'closed': ['open'], // reopen
|
|
29
|
+
};
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Path helpers
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/** Absolute path to the human-collab tasks directory. */
|
|
34
|
+
export function getTasksDir() {
|
|
35
|
+
const dir = join(getProjectRoot(), '.workflow', 'collab', 'tasks');
|
|
36
|
+
if (!existsSync(dir))
|
|
37
|
+
mkdirSync(dir, { recursive: true });
|
|
38
|
+
return dir;
|
|
39
|
+
}
|
|
40
|
+
/** Absolute path to a specific task JSON file. */
|
|
41
|
+
export function getTaskFilePath(id) {
|
|
42
|
+
return join(getTasksDir(), `${id}.json`);
|
|
43
|
+
}
|
|
44
|
+
/** Absolute path to the auto-increment counter file. */
|
|
45
|
+
function getCounterFilePath() {
|
|
46
|
+
return join(getTasksDir(), '.counter');
|
|
47
|
+
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Counter / ID generation
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Atomically read and increment the counter file, returning the next
|
|
53
|
+
* `TASK-XXX` formatted id. Creates the counter file at `1` if absent.
|
|
54
|
+
*/
|
|
55
|
+
export function getNextTaskId() {
|
|
56
|
+
const counterPath = getCounterFilePath();
|
|
57
|
+
let next = 1;
|
|
58
|
+
if (existsSync(counterPath)) {
|
|
59
|
+
const raw = readFileSync(counterPath, 'utf-8').trim();
|
|
60
|
+
const parsed = parseInt(raw, 10);
|
|
61
|
+
if (!Number.isNaN(parsed)) {
|
|
62
|
+
next = parsed;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const id = `TASK-${String(next).padStart(3, '0')}`;
|
|
66
|
+
writeFileSync(counterPath, String(next + 1), 'utf-8');
|
|
67
|
+
return id;
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Internal read/write
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
/**
|
|
73
|
+
* Read and validate a task JSON file. Returns null if the file is missing,
|
|
74
|
+
* unparseable, or does not match the CollabTask shape.
|
|
75
|
+
*/
|
|
76
|
+
export function readTaskFile(filePath) {
|
|
77
|
+
if (!existsSync(filePath))
|
|
78
|
+
return null;
|
|
79
|
+
try {
|
|
80
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
81
|
+
const parsed = JSON.parse(raw);
|
|
82
|
+
if (typeof parsed.id === 'string' &&
|
|
83
|
+
typeof parsed.title === 'string' &&
|
|
84
|
+
typeof parsed.description === 'string' &&
|
|
85
|
+
typeof parsed.status === 'string' &&
|
|
86
|
+
typeof parsed.priority === 'string' &&
|
|
87
|
+
typeof parsed.reporter === 'string' &&
|
|
88
|
+
Array.isArray(parsed.check_log) &&
|
|
89
|
+
typeof parsed.created_at === 'string' &&
|
|
90
|
+
typeof parsed.updated_at === 'string' &&
|
|
91
|
+
typeof parsed.updated_by === 'string') {
|
|
92
|
+
return parsed;
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Atomic write of a task JSON file with pretty-printing.
|
|
102
|
+
*/
|
|
103
|
+
export function writeTaskFile(filePath, task) {
|
|
104
|
+
writeFileSync(filePath, JSON.stringify(task, null, 2), 'utf-8');
|
|
105
|
+
}
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// CRUD operations
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
/**
|
|
110
|
+
* Create a new task. Generates the id via auto-increment counter, sets
|
|
111
|
+
* defaults (status=open, timestamps), and writes the JSON file.
|
|
112
|
+
*/
|
|
113
|
+
export function createTask(opts) {
|
|
114
|
+
const id = getNextTaskId();
|
|
115
|
+
const now = new Date().toISOString();
|
|
116
|
+
const task = {
|
|
117
|
+
id,
|
|
118
|
+
title: opts.title,
|
|
119
|
+
description: opts.description ?? '',
|
|
120
|
+
status: 'open',
|
|
121
|
+
priority: opts.priority ?? 'medium',
|
|
122
|
+
reporter: opts.reporter,
|
|
123
|
+
check_log: [],
|
|
124
|
+
...(opts.tags && opts.tags.length > 0 ? { tags: opts.tags } : {}),
|
|
125
|
+
...(opts.external_refs && opts.external_refs.length > 0 ? { external_refs: opts.external_refs } : {}),
|
|
126
|
+
created_at: now,
|
|
127
|
+
updated_at: now,
|
|
128
|
+
updated_by: opts.reporter,
|
|
129
|
+
};
|
|
130
|
+
writeTaskFile(getTaskFilePath(id), task);
|
|
131
|
+
try {
|
|
132
|
+
notifyAdapters({
|
|
133
|
+
type: 'task.created',
|
|
134
|
+
payload: { id: task.id, title: task.title, priority: task.priority, reporter: task.reporter },
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch { /* fire-and-forget: never block */ }
|
|
138
|
+
return task;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Read a single task by id. Returns null if the task does not exist or the
|
|
142
|
+
* file is invalid.
|
|
143
|
+
*/
|
|
144
|
+
export function getTask(id) {
|
|
145
|
+
const filePath = getTaskFilePath(id);
|
|
146
|
+
return readTaskFile(filePath);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Update a task by merging partial fields. Validates status transition if
|
|
150
|
+
* the `status` field is being changed. Throws if the task does not exist or
|
|
151
|
+
* the transition is invalid.
|
|
152
|
+
*/
|
|
153
|
+
export function updateTask(id, partial) {
|
|
154
|
+
const task = getTask(id);
|
|
155
|
+
if (!task) {
|
|
156
|
+
throw new Error(`Task not found: ${id}`);
|
|
157
|
+
}
|
|
158
|
+
// Validate status transition if status is being changed.
|
|
159
|
+
if (partial.status !== undefined && partial.status !== task.status) {
|
|
160
|
+
if (!validateStatusTransition(task.status, partial.status)) {
|
|
161
|
+
throw new Error(`Invalid status transition: ${task.status} -> ${partial.status}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const now = new Date().toISOString();
|
|
165
|
+
const updated = {
|
|
166
|
+
...task,
|
|
167
|
+
...partial,
|
|
168
|
+
id: task.id, // id is immutable
|
|
169
|
+
created_at: task.created_at, // created_at is immutable
|
|
170
|
+
updated_at: now,
|
|
171
|
+
};
|
|
172
|
+
writeTaskFile(getTaskFilePath(id), updated);
|
|
173
|
+
return updated;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* List all tasks, optionally filtered by status, assignee, reporter, or
|
|
177
|
+
* priority. Returns tasks sorted by id ascending.
|
|
178
|
+
*/
|
|
179
|
+
export function listTasks(filters) {
|
|
180
|
+
const dir = getTasksDir();
|
|
181
|
+
let entries;
|
|
182
|
+
try {
|
|
183
|
+
entries = readdirSync(dir);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
const out = [];
|
|
189
|
+
for (const entry of entries) {
|
|
190
|
+
if (!entry.endsWith('.json'))
|
|
191
|
+
continue;
|
|
192
|
+
const task = readTaskFile(join(dir, entry));
|
|
193
|
+
if (!task)
|
|
194
|
+
continue;
|
|
195
|
+
if (filters) {
|
|
196
|
+
if (filters.status !== undefined && task.status !== filters.status)
|
|
197
|
+
continue;
|
|
198
|
+
if (filters.assignee !== undefined && task.assignee !== filters.assignee)
|
|
199
|
+
continue;
|
|
200
|
+
if (filters.reporter !== undefined && task.reporter !== filters.reporter)
|
|
201
|
+
continue;
|
|
202
|
+
if (filters.priority !== undefined && task.priority !== filters.priority)
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
out.push(task);
|
|
206
|
+
}
|
|
207
|
+
// Sort by id ascending (TASK-001 before TASK-002).
|
|
208
|
+
out.sort((a, b) => a.id.localeCompare(b.id));
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Delete a task file. Throws if the task does not exist.
|
|
213
|
+
*/
|
|
214
|
+
export function deleteTask(id) {
|
|
215
|
+
const filePath = getTaskFilePath(id);
|
|
216
|
+
if (!existsSync(filePath)) {
|
|
217
|
+
throw new Error(`Task not found: ${id}`);
|
|
218
|
+
}
|
|
219
|
+
unlinkSync(filePath);
|
|
220
|
+
}
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// Task operations
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
/**
|
|
225
|
+
* Assign a task to a member. If the task is currently `open`, automatically
|
|
226
|
+
* transitions to `assigned`.
|
|
227
|
+
*/
|
|
228
|
+
export function assignTask(id, uid) {
|
|
229
|
+
const task = getTask(id);
|
|
230
|
+
if (!task) {
|
|
231
|
+
throw new Error(`Task not found: ${id}`);
|
|
232
|
+
}
|
|
233
|
+
const newStatus = task.status === 'open' ? 'assigned' : task.status;
|
|
234
|
+
const now = new Date().toISOString();
|
|
235
|
+
const updated = {
|
|
236
|
+
...task,
|
|
237
|
+
assignee: uid,
|
|
238
|
+
status: newStatus,
|
|
239
|
+
updated_at: now,
|
|
240
|
+
updated_by: uid,
|
|
241
|
+
};
|
|
242
|
+
writeTaskFile(getTaskFilePath(id), updated);
|
|
243
|
+
try {
|
|
244
|
+
const self = resolveSelf();
|
|
245
|
+
if (self) {
|
|
246
|
+
reportActivity({
|
|
247
|
+
user: self.uid,
|
|
248
|
+
host: self.host,
|
|
249
|
+
action: 'task.assigned',
|
|
250
|
+
task_id: task.id,
|
|
251
|
+
target: uid,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch { /* hot-path: never throw */ }
|
|
256
|
+
try {
|
|
257
|
+
notifyAdapters({
|
|
258
|
+
type: 'task.assigned',
|
|
259
|
+
payload: { id: task.id, assignee: uid },
|
|
260
|
+
recipients: [uid],
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch { /* fire-and-forget: never block */ }
|
|
264
|
+
return updated;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Update task status with transition validation. Throws if the transition is
|
|
268
|
+
* not allowed by VALID_TRANSITIONS.
|
|
269
|
+
*/
|
|
270
|
+
export function updateTaskStatus(id, newStatus, updatedBy) {
|
|
271
|
+
const task = getTask(id);
|
|
272
|
+
if (!task) {
|
|
273
|
+
throw new Error(`Task not found: ${id}`);
|
|
274
|
+
}
|
|
275
|
+
if (!validateStatusTransition(task.status, newStatus)) {
|
|
276
|
+
throw new Error(`Invalid status transition: ${task.status} -> ${newStatus}`);
|
|
277
|
+
}
|
|
278
|
+
const oldStatus = task.status;
|
|
279
|
+
const now = new Date().toISOString();
|
|
280
|
+
const updated = {
|
|
281
|
+
...task,
|
|
282
|
+
status: newStatus,
|
|
283
|
+
updated_at: now,
|
|
284
|
+
updated_by: updatedBy,
|
|
285
|
+
};
|
|
286
|
+
writeTaskFile(getTaskFilePath(id), updated);
|
|
287
|
+
try {
|
|
288
|
+
const self = resolveSelf();
|
|
289
|
+
if (self) {
|
|
290
|
+
reportActivity({
|
|
291
|
+
user: self.uid,
|
|
292
|
+
host: self.host,
|
|
293
|
+
action: 'task.status_changed',
|
|
294
|
+
task_id: task.id,
|
|
295
|
+
target: `${oldStatus}->${newStatus}`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch { /* hot-path: never throw */ }
|
|
300
|
+
try {
|
|
301
|
+
notifyAdapters({
|
|
302
|
+
type: 'task.status_changed',
|
|
303
|
+
payload: { id: task.id, from: oldStatus, to: newStatus },
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
catch { /* fire-and-forget: never block */ }
|
|
307
|
+
return updated;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Append a check entry to a task's check_log. The timestamp is auto-generated.
|
|
311
|
+
* Existing entries are never modified or removed (append-only).
|
|
312
|
+
*/
|
|
313
|
+
export function addCheckEntry(id, entry) {
|
|
314
|
+
const task = getTask(id);
|
|
315
|
+
if (!task) {
|
|
316
|
+
throw new Error(`Task not found: ${id}`);
|
|
317
|
+
}
|
|
318
|
+
const fullEntry = {
|
|
319
|
+
...entry,
|
|
320
|
+
ts: new Date().toISOString(),
|
|
321
|
+
};
|
|
322
|
+
const now = new Date().toISOString();
|
|
323
|
+
const updated = {
|
|
324
|
+
...task,
|
|
325
|
+
check_log: [...task.check_log, fullEntry],
|
|
326
|
+
updated_at: now,
|
|
327
|
+
updated_by: entry.uid,
|
|
328
|
+
};
|
|
329
|
+
writeTaskFile(getTaskFilePath(id), updated);
|
|
330
|
+
try {
|
|
331
|
+
const self = resolveSelf();
|
|
332
|
+
if (self) {
|
|
333
|
+
reportActivity({
|
|
334
|
+
user: self.uid,
|
|
335
|
+
host: self.host,
|
|
336
|
+
action: 'task.checked',
|
|
337
|
+
task_id: task.id,
|
|
338
|
+
target: entry.action,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch { /* hot-path: never throw */ }
|
|
343
|
+
try {
|
|
344
|
+
notifyAdapters({
|
|
345
|
+
type: 'task.checked',
|
|
346
|
+
payload: { id: task.id, action: entry.action, uid: entry.uid },
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
catch { /* fire-and-forget: never block */ }
|
|
350
|
+
return updated;
|
|
351
|
+
}
|
|
352
|
+
// ---------------------------------------------------------------------------
|
|
353
|
+
// Validation
|
|
354
|
+
// ---------------------------------------------------------------------------
|
|
355
|
+
/**
|
|
356
|
+
* Validate that a status transition is allowed by VALID_TRANSITIONS.
|
|
357
|
+
* A transition from a status to itself is always allowed (no-op).
|
|
358
|
+
*/
|
|
359
|
+
export function validateStatusTransition(from, to) {
|
|
360
|
+
if (from === to)
|
|
361
|
+
return true;
|
|
362
|
+
const allowed = VALID_TRANSITIONS[from];
|
|
363
|
+
return allowed ? allowed.includes(to) : false;
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=team-tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-tasks.js","sourceRoot":"","sources":["../../../src/tools/team-tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,9 @@ export declare function buildTransitionEntry(opts: BuildTransitionOpts): Transit
|
|
|
42
42
|
/**
|
|
43
43
|
* Append a transition entry to state.json's transition_history[].
|
|
44
44
|
* Creates the array if it doesn't exist.
|
|
45
|
+
*
|
|
46
|
+
* For phase-completion transitions, evaluates the phase gate first.
|
|
47
|
+
* Throws if the gate blocks and force is false.
|
|
45
48
|
*/
|
|
46
49
|
export declare function appendTransition(statePath: string, entry: TransitionEntry): void;
|
|
47
50
|
//# sourceMappingURL=transition-recorder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition-recorder.d.ts","sourceRoot":"","sources":["../../../src/tools/transition-recorder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"transition-recorder.d.ts","sourceRoot":"","sources":["../../../src/tools/transition-recorder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CAiB/E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CA+BhF"}
|