agent-tasks 1.7.1 → 1.9.0
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 +17 -15
- package/dist/domain/agent-bridge.d.ts.map +1 -1
- package/dist/domain/agent-bridge.js +22 -2
- package/dist/domain/agent-bridge.js.map +1 -1
- package/dist/domain/approvals.d.ts.map +1 -1
- package/dist/domain/approvals.js +4 -1
- package/dist/domain/approvals.js.map +1 -1
- package/dist/domain/cleanup.d.ts.map +1 -1
- package/dist/domain/cleanup.js +8 -3
- package/dist/domain/cleanup.js.map +1 -1
- package/dist/domain/rules.js +11 -10
- package/dist/domain/rules.js.map +1 -1
- package/dist/domain/task-validator.d.ts +9 -0
- package/dist/domain/task-validator.d.ts.map +1 -0
- package/dist/domain/task-validator.js +70 -0
- package/dist/domain/task-validator.js.map +1 -0
- package/dist/domain/tasks.d.ts +13 -9
- package/dist/domain/tasks.d.ts.map +1 -1
- package/dist/domain/tasks.js +165 -111
- package/dist/domain/tasks.js.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +4 -2
- package/dist/storage/database.js.map +1 -1
- package/dist/transport/mcp-handlers.d.ts +30 -0
- package/dist/transport/mcp-handlers.d.ts.map +1 -0
- package/dist/transport/mcp-handlers.js +408 -0
- package/dist/transport/mcp-handlers.js.map +1 -0
- package/dist/transport/mcp.d.ts.map +1 -1
- package/dist/transport/mcp.js +196 -656
- package/dist/transport/mcp.js.map +1 -1
- package/dist/transport/rest.d.ts.map +1 -1
- package/dist/transport/rest.js +4 -1
- package/dist/transport/rest.js.map +1 -1
- package/dist/transport/ws.d.ts.map +1 -1
- package/dist/transport/ws.js +6 -4
- package/dist/transport/ws.js.map +1 -1
- package/dist/ui/app.js +186 -1608
- package/dist/ui/board.js +401 -0
- package/dist/ui/drag.js +143 -0
- package/dist/ui/index.html +5 -0
- package/dist/ui/inline-edit.js +242 -0
- package/dist/ui/panel.js +574 -0
- package/dist/ui/styles.css +109 -0
- package/dist/ui/ui-utils.js +323 -0
- package/package.json +1 -1
- package/dist/db.d.ts +0 -10
- package/dist/db.d.ts.map +0 -1
- package/dist/db.js +0 -112
- package/dist/db.js.map +0 -1
- package/dist/event-bus.d.ts +0 -10
- package/dist/event-bus.d.ts.map +0 -1
- package/dist/event-bus.js +0 -38
- package/dist/event-bus.js.map +0 -1
- package/dist/session.d.ts +0 -7
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -11
- package/dist/session.js.map +0 -1
- package/dist/tasks.d.ts +0 -32
- package/dist/tasks.d.ts.map +0 -1
- package/dist/tasks.js +0 -410
- package/dist/tasks.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](LICENSE)
|
|
4
4
|
[](https://nodejs.org/)
|
|
5
|
-
[]()
|
|
6
|
+
[]()
|
|
7
7
|
[]()
|
|
8
8
|
|
|
9
9
|
**Pipeline-driven task management for AI coding agents.** An [MCP](https://modelcontextprotocol.io/) server with stage-gated pipelines, multi-agent collaboration, and a real-time kanban dashboard. Tasks flow through configurable stages — `backlog`, `spec`, `plan`, `implement`, `test`, `review`, `done` — with dependency tracking, approval workflows, artifact versioning, and threaded comments.
|
|
@@ -38,7 +38,9 @@ When you run multiple AI agents on the same codebase, they need a shared task pi
|
|
|
38
38
|
- **3 transport layers** — MCP (stdio), REST API (HTTP), WebSocket (real-time events)
|
|
39
39
|
- **TodoWrite bridge** — intercepts Claude Code's built-in TodoWrite and syncs to the pipeline
|
|
40
40
|
- **Stage gates** — configurable per-project gates with per-stage rules: require named artifacts, minimum artifact counts, comments, or approvals before advancing
|
|
41
|
-
- **Decisions log** — structured decision artifacts (chose X over Y because Z) via `
|
|
41
|
+
- **Decisions log** — structured decision artifacts (chose X over Y because Z) via `task_artifact(type: "decision")`
|
|
42
|
+
- **Learnings propagation** — `task_artifact(type: "learning")` captures insights (technique, pitfall, decision, pattern); auto-propagated to parent and sibling tasks on completion
|
|
43
|
+
- **Agent affinity** — `task_list(next: true)` prefers routing tasks to agents with related history (parent, dependency, project) as a tie-breaker
|
|
42
44
|
- **Heartbeat-based cleanup** — auto-fails tasks from dead agents using agent-comm heartbeat data
|
|
43
45
|
- **Task cleanup hooks** — auto-fails orphaned tasks on session stop and cleans up stale tasks on session start
|
|
44
46
|
- **Agent bridge** — notifies connected agents on task events
|
|
@@ -102,21 +104,21 @@ Add agent-tasks as an MCP server in `~/.claude/settings.json`:
|
|
|
102
104
|
}
|
|
103
105
|
```
|
|
104
106
|
|
|
105
|
-
Once configured, Claude Code can use all
|
|
107
|
+
Once configured, Claude Code can use all 13 MCP tools directly — creating tasks, advancing stages, adding artifacts, commenting, and more. See the [Setup Guide](docs/SETUP.md) for detailed integration steps.
|
|
106
108
|
|
|
107
109
|
---
|
|
108
110
|
|
|
109
|
-
## MCP Tools (
|
|
111
|
+
## MCP Tools (13)
|
|
110
112
|
|
|
111
|
-
| Category
|
|
112
|
-
|
|
|
113
|
-
| **Task
|
|
114
|
-
| **
|
|
115
|
-
| **
|
|
116
|
-
| **
|
|
117
|
-
| **
|
|
118
|
-
| **Approvals** (
|
|
119
|
-
| **Config & utils** (
|
|
113
|
+
| Category | Tools |
|
|
114
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
115
|
+
| **Task CRUD** (5) | `task_create`, `task_list` (also: search via `query`, pick next via `next: true`), `task_claim`, `task_update`, `task_delete` |
|
|
116
|
+
| **Lifecycle** (1) | `task_stage` (advance, regress, complete, fail, cancel) |
|
|
117
|
+
| **Dependencies** (1) | `task_dependency` (subtasks: use `task_create` with `parent_id`) |
|
|
118
|
+
| **Artifacts & queries** (2) | `task_artifact` (general, decision, learning), `task_query` (subtasks, artifacts, comments) |
|
|
119
|
+
| **Comments & collab** (2) | `task_comment`, `task_collaborator` |
|
|
120
|
+
| **Approvals** (1) | `task_approval` |
|
|
121
|
+
| **Config & utils** (1) | `task_config` (pipeline, session, cleanup, rules) |
|
|
120
122
|
|
|
121
123
|
See [full API reference](docs/API.md) for detailed descriptions of every tool and endpoint.
|
|
122
124
|
|
|
@@ -179,7 +181,7 @@ npm run check # Full CI: typecheck + lint + format + test
|
|
|
179
181
|
|
|
180
182
|
## Documentation
|
|
181
183
|
|
|
182
|
-
- [API Reference](docs/API.md) — all
|
|
184
|
+
- [API Reference](docs/API.md) — all 13 MCP tools, 18 REST endpoints, WebSocket protocol
|
|
183
185
|
- [Architecture](docs/ARCHITECTURE.md) — source structure, design principles, database schema
|
|
184
186
|
- [Dashboard](docs/DASHBOARD.md) — kanban board features, keyboard shortcuts, screenshots
|
|
185
187
|
- [Setup Guide](docs/SETUP.md) — installation, client setup (Claude Code, OpenCode, Cursor, Windsurf), hooks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/domain/agent-bridge.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/domain/agent-bridge.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkC5C,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAsB;gBAEP,MAAM,EAAE,QAAQ;IAE7C,KAAK,IAAI,IAAI;IAiDb,IAAI,IAAI,IAAI;IAKZ,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA4BjC,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;CA6BpB"}
|
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
// =============================================================================
|
|
7
7
|
import http from 'http';
|
|
8
8
|
const AGENT_COMM_URL = process.env.AGENT_COMM_URL || 'http://localhost:3421';
|
|
9
|
+
function isTaskPayload(v) {
|
|
10
|
+
return typeof v === 'object' && v !== null && typeof v.id === 'number';
|
|
11
|
+
}
|
|
12
|
+
function isCommentPayload(v) {
|
|
13
|
+
return typeof v === 'object' && v !== null && typeof v.task_id === 'number';
|
|
14
|
+
}
|
|
15
|
+
function isApprovalPayload(v) {
|
|
16
|
+
return typeof v === 'object' && v !== null && typeof v.task_id === 'number';
|
|
17
|
+
}
|
|
9
18
|
export class AgentBridge {
|
|
10
19
|
events;
|
|
11
20
|
unsubs = [];
|
|
@@ -15,23 +24,31 @@ export class AgentBridge {
|
|
|
15
24
|
start() {
|
|
16
25
|
this.unsubs.push(this.events.on('task:claimed', (e) => {
|
|
17
26
|
const task = e.data.task;
|
|
27
|
+
if (!isTaskPayload(task))
|
|
28
|
+
return;
|
|
18
29
|
if (task.assigned_to) {
|
|
19
30
|
this.notify(`Task #${task.id} "${task.title}" has been assigned to you.`, task.assigned_to);
|
|
20
31
|
}
|
|
21
32
|
}));
|
|
22
33
|
this.unsubs.push(this.events.on('task:advanced', (e) => {
|
|
23
34
|
const task = e.data.task;
|
|
24
|
-
|
|
35
|
+
if (!isTaskPayload(task))
|
|
36
|
+
return;
|
|
37
|
+
const toStage = String(e.data.to_stage ?? '');
|
|
25
38
|
if (task.assigned_to) {
|
|
26
39
|
this.notify(`Task #${task.id} "${task.title}" advanced to ${toStage}.`, task.assigned_to);
|
|
27
40
|
}
|
|
28
41
|
}));
|
|
29
42
|
this.unsubs.push(this.events.on('comment:created', (e) => {
|
|
30
43
|
const comment = e.data.comment;
|
|
44
|
+
if (!isCommentPayload(comment))
|
|
45
|
+
return;
|
|
31
46
|
this.notifyChannel(`Comment on task #${comment.task_id} by ${comment.agent_id}: ${comment.content.slice(0, 100)}`);
|
|
32
47
|
}));
|
|
33
48
|
this.unsubs.push(this.events.on('approval:requested', (e) => {
|
|
34
49
|
const approval = e.data.approval;
|
|
50
|
+
if (!isApprovalPayload(approval))
|
|
51
|
+
return;
|
|
35
52
|
if (approval.reviewer) {
|
|
36
53
|
this.notify(`Approval requested for task #${approval.task_id} at stage ${approval.stage}.`, approval.reviewer);
|
|
37
54
|
}
|
|
@@ -53,7 +70,10 @@ export class AgentBridge {
|
|
|
53
70
|
try {
|
|
54
71
|
resolve(JSON.parse(body));
|
|
55
72
|
}
|
|
56
|
-
catch {
|
|
73
|
+
catch (err) {
|
|
74
|
+
process.stderr.write('[agent-tasks] fetchAgents JSON parse: ' +
|
|
75
|
+
(err instanceof Error ? err.message : String(err)) +
|
|
76
|
+
'\n');
|
|
57
77
|
resolve([]);
|
|
58
78
|
}
|
|
59
79
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-bridge.js","sourceRoot":"","sources":["../../src/domain/agent-bridge.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kCAAkC;AAClC,EAAE;AACF,kEAAkE;AAClE,8EAA8E;AAC9E,gFAAgF;AAEhF,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-bridge.js","sourceRoot":"","sources":["../../src/domain/agent-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/domain/approvals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAIhE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,QAAQ;IAGnC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY;IAiCvE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IAK7E,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IAM5E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAY7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAO1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/domain/approvals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAIhE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,QAAQ;IAGnC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY;IAiCvE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IAK7E,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY;IAM5E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAY7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAO1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAuB5D,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ1D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAQlD,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,OAAO;CA4BhB"}
|
package/dist/domain/approvals.js
CHANGED
|
@@ -58,7 +58,10 @@ export class ApprovalService {
|
|
|
58
58
|
const approvalConfig = JSON.parse(config.approval_config);
|
|
59
59
|
return !!approvalConfig[stage]?.required;
|
|
60
60
|
}
|
|
61
|
-
catch {
|
|
61
|
+
catch (err) {
|
|
62
|
+
process.stderr.write('[agent-tasks] isApprovalRequired JSON parse: ' +
|
|
63
|
+
(err instanceof Error ? err.message : String(err)) +
|
|
64
|
+
'\n');
|
|
62
65
|
return false;
|
|
63
66
|
}
|
|
64
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/domain/approvals.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/domain/approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/domain/cleanup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,OAAO,CAAC,KAAK,CAA+C;gBAGzC,EAAE,EAAE,EAAE,EACN,aAAa,GAAE,MAAW,EAC1B,WAAW,CAAC,EAAE,WAAW,YAAA;IAG5C,KAAK,IAAI,IAAI;IAWb,IAAI,IAAI,IAAI;IAOZ,GAAG,IAAI;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB;IAmCD,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB;IAoBK,mBAAmB,CACvB,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/domain/cleanup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,OAAO,CAAC,KAAK,CAA+C;gBAGzC,EAAE,EAAE,EAAE,EACN,aAAa,GAAE,MAAW,EAC1B,WAAW,CAAC,EAAE,WAAW,YAAA;IAG5C,KAAK,IAAI,IAAI;IAWb,IAAI,IAAI,IAAI;IAOZ,GAAG,IAAI;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB;IAmCD,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB;IAoBK,mBAAmB,CACvB,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAsF/C,eAAe,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB;CAaF"}
|
package/dist/domain/cleanup.js
CHANGED
|
@@ -69,7 +69,10 @@ export class CleanupService {
|
|
|
69
69
|
try {
|
|
70
70
|
agents = (await this.agentBridge.fetchAgents());
|
|
71
71
|
}
|
|
72
|
-
catch {
|
|
72
|
+
catch (err) {
|
|
73
|
+
process.stderr.write('[agent-tasks] failStaleAgentTasks fetchAgents error: ' +
|
|
74
|
+
(err instanceof Error ? err.message : String(err)) +
|
|
75
|
+
'\n');
|
|
73
76
|
return { failed: [], checked: agentNames.length };
|
|
74
77
|
}
|
|
75
78
|
if (!Array.isArray(agents) || agents.length === 0) {
|
|
@@ -113,8 +116,10 @@ export class CleanupService {
|
|
|
113
116
|
if (updated)
|
|
114
117
|
failed.push(updated);
|
|
115
118
|
}
|
|
116
|
-
catch {
|
|
117
|
-
|
|
119
|
+
catch (err) {
|
|
120
|
+
process.stderr.write('[agent-tasks] failStaleAgentTasks task update error: ' +
|
|
121
|
+
(err instanceof Error ? err.message : String(err)) +
|
|
122
|
+
'\n');
|
|
118
123
|
}
|
|
119
124
|
}
|
|
120
125
|
return { failed, checked: agentNames.length };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/domain/cleanup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/domain/cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/rules.js
CHANGED
|
@@ -27,10 +27,10 @@ Tasks flow through stages: ${stages.filter((s) => s !== 'cancelled').join(' →
|
|
|
27
27
|
|
|
28
28
|
1. **Always check for work first**: Call \`task_next\` to find available tasks
|
|
29
29
|
2. **Claim before working**: Call \`task_claim\` before starting implementation
|
|
30
|
-
3. **Advance through stages**: Use \`
|
|
31
|
-
4. **Attach artifacts**: Use \`
|
|
30
|
+
3. **Advance through stages**: Use \`task_stage(action: "advance")\` — never skip stages
|
|
31
|
+
4. **Attach artifacts**: Use \`task_artifact(type: "general")\` at each stage (specs, plans, test results, review notes)
|
|
32
32
|
5. **Comment on decisions**: Use \`task_comment\` to record reasoning and tradeoffs
|
|
33
|
-
6. **Complete with results**: Use \`
|
|
33
|
+
6. **Complete with results**: Use \`task_stage(action: "complete")\` with a summary of what was done
|
|
34
34
|
7. **Create subtasks**: Break large tasks into subtasks with \`task_create\` using \`parent_id\`
|
|
35
35
|
|
|
36
36
|
## Available Tools
|
|
@@ -38,13 +38,14 @@ Tasks flow through stages: ${stages.filter((s) => s !== 'cancelled').join(' →
|
|
|
38
38
|
- \`task_create\` — Create a task (title, description, priority, project, tags, parent_id)
|
|
39
39
|
- \`task_list\` — List tasks (filter by status, stage, project, assignee)
|
|
40
40
|
- \`task_claim\` — Claim and start working on a task
|
|
41
|
-
- \`
|
|
42
|
-
- \`
|
|
43
|
-
- \`
|
|
41
|
+
- \`task_stage\` — Lifecycle transitions (advance, regress, complete, fail, cancel)
|
|
42
|
+
- \`task_artifact\` — Attach artifacts (general, decision, learning)
|
|
43
|
+
- \`task_query\` — Query subtasks, artifacts, comments
|
|
44
44
|
- \`task_comment\` — Add discussion comment
|
|
45
45
|
- \`task_search\` — Full-text search across tasks
|
|
46
46
|
- \`task_next\` — Get highest-priority unblocked task
|
|
47
|
-
- \`
|
|
47
|
+
- \`task_approval\` — Approve or reject during review
|
|
48
|
+
- \`task_config\` — Pipeline config, session, cleanup, rules
|
|
48
49
|
`;
|
|
49
50
|
}
|
|
50
51
|
function generateClaudeMd(stages, project) {
|
|
@@ -56,12 +57,12 @@ Tasks flow through: ${stages.filter((s) => s !== 'cancelled').join(' → ')}
|
|
|
56
57
|
### Workflow
|
|
57
58
|
1. Check \`task_next\` for available work
|
|
58
59
|
2. \`task_claim\` before starting
|
|
59
|
-
3. \`
|
|
60
|
+
3. \`task_stage(action: "advance")\` through stages — attach artifacts at each stage
|
|
60
61
|
4. \`task_comment\` to record decisions
|
|
61
|
-
5. \`
|
|
62
|
+
5. \`task_stage(action: "complete")\` with summary
|
|
62
63
|
|
|
63
64
|
### Key Tools
|
|
64
|
-
\`task_create\`, \`task_list\`, \`task_claim\`, \`
|
|
65
|
+
\`task_create\`, \`task_list\`, \`task_claim\`, \`task_stage\`, \`task_artifact\`, \`task_query\`, \`task_comment\`, \`task_search\`, \`task_next\`, \`task_approval\`, \`task_config\`
|
|
65
66
|
`;
|
|
66
67
|
}
|
|
67
68
|
//# sourceMappingURL=rules.js.map
|
package/dist/domain/rules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/domain/rules.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oCAAoC;AACpC,EAAE;AACF,0EAA0E;AAC1E,iEAAiE;AACjE,gFAAgF;AAEhF,MAAM,UAAU,aAAa,CAC3B,MAA2B,EAC3B,MAAgB,EAChB,OAAgB;IAEhB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,MAAgB,EAAE,OAAgB;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO;;;;;qBAKY,WAAW;;;;6BAIH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/domain/rules.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oCAAoC;AACpC,EAAE;AACF,0EAA0E;AAC1E,iEAAiE;AACjE,gFAAgF;AAEhF,MAAM,UAAU,aAAa,CAC3B,MAA2B,EAC3B,MAAgB,EAChB,OAAgB;IAEhB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,MAAgB,EAAE,OAAgB;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO;;;;;qBAKY,WAAW;;;;6BAIH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyB/E,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,OAAgB;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,oBAAoB,WAAW;;sBAElB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;CAWxE,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function validateTitle(title: string): void;
|
|
2
|
+
export declare function validateDescription(desc: string): void;
|
|
3
|
+
export declare function validateResult(result: string): void;
|
|
4
|
+
export declare function validateProjectName(project: string): void;
|
|
5
|
+
export declare function validateAssignee(name: string): void;
|
|
6
|
+
export declare function validateTags(tags: string[]): void;
|
|
7
|
+
export declare function validateArtifactName(name: string): void;
|
|
8
|
+
export declare function validateArtifactContent(content: string): void;
|
|
9
|
+
//# sourceMappingURL=task-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-validator.d.ts","sourceRoot":"","sources":["../../src/domain/task-validator.ts"],"names":[],"mappings":"AAoBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKtD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAWjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAO7D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// agent-tasks — Task input validation
|
|
3
|
+
//
|
|
4
|
+
// Extracted from TaskService. Pure validation functions — no DB access.
|
|
5
|
+
// =============================================================================
|
|
6
|
+
import { ValidationError } from '../types.js';
|
|
7
|
+
import { MAX_TITLE_LENGTH, MAX_DESCRIPTION_LENGTH, MAX_RESULT_LENGTH, MAX_ARTIFACT_CONTENT_LENGTH, MAX_ARTIFACT_NAME_LENGTH, MAX_PROJECT_NAME_LENGTH, MAX_TAG_LENGTH, MAX_TAGS_COUNT, rejectNullBytes, rejectControlChars, } from './validate.js';
|
|
8
|
+
export function validateTitle(title) {
|
|
9
|
+
rejectNullBytes(title, 'title');
|
|
10
|
+
rejectControlChars(title, 'title');
|
|
11
|
+
const trimmed = title.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
throw new ValidationError('Title must not be empty.');
|
|
14
|
+
if (trimmed.length > MAX_TITLE_LENGTH) {
|
|
15
|
+
throw new ValidationError(`Title too long (max ${MAX_TITLE_LENGTH} chars).`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function validateDescription(desc) {
|
|
19
|
+
rejectNullBytes(desc, 'description');
|
|
20
|
+
if (desc.length > MAX_DESCRIPTION_LENGTH) {
|
|
21
|
+
throw new ValidationError(`Description too long (max ${MAX_DESCRIPTION_LENGTH} chars).`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function validateResult(result) {
|
|
25
|
+
rejectNullBytes(result, 'result');
|
|
26
|
+
if (result.length > MAX_RESULT_LENGTH) {
|
|
27
|
+
throw new ValidationError(`Result too long (max ${MAX_RESULT_LENGTH} chars).`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function validateProjectName(project) {
|
|
31
|
+
rejectNullBytes(project, 'project');
|
|
32
|
+
rejectControlChars(project, 'project');
|
|
33
|
+
if (project.length > MAX_PROJECT_NAME_LENGTH) {
|
|
34
|
+
throw new ValidationError(`Project name too long (max ${MAX_PROJECT_NAME_LENGTH} chars).`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function validateAssignee(name) {
|
|
38
|
+
rejectNullBytes(name, 'assign_to');
|
|
39
|
+
rejectControlChars(name, 'assign_to');
|
|
40
|
+
if (!name.trim())
|
|
41
|
+
throw new ValidationError('Assignee name must not be empty.');
|
|
42
|
+
}
|
|
43
|
+
export function validateTags(tags) {
|
|
44
|
+
if (tags.length > MAX_TAGS_COUNT) {
|
|
45
|
+
throw new ValidationError(`Too many tags (max ${MAX_TAGS_COUNT}).`);
|
|
46
|
+
}
|
|
47
|
+
for (const tag of tags) {
|
|
48
|
+
rejectNullBytes(tag, 'tag');
|
|
49
|
+
rejectControlChars(tag, 'tag');
|
|
50
|
+
if (tag.length > MAX_TAG_LENGTH) {
|
|
51
|
+
throw new ValidationError(`Tag too long: "${tag}" (max ${MAX_TAG_LENGTH} chars).`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function validateArtifactName(name) {
|
|
56
|
+
rejectNullBytes(name, 'artifact name');
|
|
57
|
+
rejectControlChars(name, 'artifact name');
|
|
58
|
+
if (!name.trim())
|
|
59
|
+
throw new ValidationError('Artifact name must not be empty.');
|
|
60
|
+
if (name.length > MAX_ARTIFACT_NAME_LENGTH) {
|
|
61
|
+
throw new ValidationError(`Artifact name too long (max ${MAX_ARTIFACT_NAME_LENGTH} chars).`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function validateArtifactContent(content) {
|
|
65
|
+
rejectNullBytes(content, 'artifact content');
|
|
66
|
+
if (content.length > MAX_ARTIFACT_CONTENT_LENGTH) {
|
|
67
|
+
throw new ValidationError(`Artifact content too long (max ${MAX_ARTIFACT_CONTENT_LENGTH} chars).`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=task-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-validator.js","sourceRoot":"","sources":["../../src/domain/task-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/tasks.d.ts
CHANGED
|
@@ -5,7 +5,12 @@ export declare const DEFAULT_STAGES: string[];
|
|
|
5
5
|
export declare class TaskService {
|
|
6
6
|
private readonly db;
|
|
7
7
|
private readonly events;
|
|
8
|
+
private configCache;
|
|
9
|
+
private static readonly CONFIG_CACHE_TTL;
|
|
8
10
|
constructor(db: Db, events: EventBus);
|
|
11
|
+
private getCachedConfig;
|
|
12
|
+
private invalidateConfigCache;
|
|
13
|
+
private loadAndCacheConfig;
|
|
9
14
|
getPipelineStages(project?: string): string[];
|
|
10
15
|
getAllGateConfigs(): Record<string, GateConfig>;
|
|
11
16
|
getGateConfig(project?: string): GateConfig | null;
|
|
@@ -21,12 +26,19 @@ export declare class TaskService {
|
|
|
21
26
|
stage?: string;
|
|
22
27
|
}): number;
|
|
23
28
|
claim(taskId: number, claimerName: string): Task;
|
|
29
|
+
learn(taskId: number, content: string, category?: string, createdBy?: string): TaskArtifact;
|
|
30
|
+
private propagateLearnings;
|
|
24
31
|
complete(taskId: number, result: string): Task;
|
|
25
32
|
fail(taskId: number, result: string): Task;
|
|
26
33
|
cancel(taskId: number, reason: string): Task;
|
|
27
34
|
advance(taskId: number, toStage?: string, comment?: string): Task;
|
|
28
35
|
regress(taskId: number, toStage: string, reason?: string): Task;
|
|
29
|
-
next(project?: string, stage?: string):
|
|
36
|
+
next(project?: string, stage?: string, agent?: string): {
|
|
37
|
+
task: Task;
|
|
38
|
+
affinity_score: number;
|
|
39
|
+
affinity_reasons: string[];
|
|
40
|
+
} | null;
|
|
41
|
+
private computeAffinity;
|
|
30
42
|
addDependency(taskId: number, dependsOn: number, relationship?: TaskRelationshipType): void;
|
|
31
43
|
removeDependency(taskId: number, dependsOn: number): void;
|
|
32
44
|
getDependencies(taskId: number): {
|
|
@@ -55,14 +67,6 @@ export declare class TaskService {
|
|
|
55
67
|
private requireTask;
|
|
56
68
|
private validateStage;
|
|
57
69
|
private getAutoAssignee;
|
|
58
|
-
private validateTitle;
|
|
59
|
-
private validateDescription;
|
|
60
|
-
private validateResult;
|
|
61
|
-
private validateProjectName;
|
|
62
|
-
private validateAssignee;
|
|
63
|
-
private validateTags;
|
|
64
|
-
private validateArtifactName;
|
|
65
|
-
private validateArtifactContent;
|
|
66
70
|
private checkStageGate;
|
|
67
71
|
private checkDependencies;
|
|
68
72
|
private wouldCreateCycle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/domain/tasks.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/domain/tasks.ts"],"names":[],"mappings":"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"}
|