hzl-cli 2.0.0 → 2.2.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 +10 -34
- package/dist/commands/agent/stats.d.ts.map +1 -1
- package/dist/commands/agent/stats.js +3 -9
- package/dist/commands/agent/stats.js.map +1 -1
- package/dist/commands/dep/index.d.ts +3 -0
- package/dist/commands/dep/index.d.ts.map +1 -0
- package/dist/commands/dep/index.js +8 -0
- package/dist/commands/dep/index.js.map +1 -0
- package/dist/commands/dep/list.d.ts +38 -0
- package/dist/commands/dep/list.d.ts.map +1 -0
- package/dist/commands/dep/list.js +156 -0
- package/dist/commands/dep/list.js.map +1 -0
- package/dist/commands/dep/list.test.d.ts +2 -0
- package/dist/commands/dep/list.test.d.ts.map +1 -0
- package/dist/commands/dep/list.test.js +171 -0
- package/dist/commands/dep/list.test.js.map +1 -0
- package/dist/commands/export-events.d.ts.map +1 -1
- package/dist/commands/export-events.js +2 -1
- package/dist/commands/export-events.js.map +1 -1
- package/dist/commands/guide-content.d.ts +1 -1
- package/dist/commands/guide-content.d.ts.map +1 -1
- package/dist/commands/guide-content.js +41 -71
- package/dist/commands/guide-content.js.map +1 -1
- package/dist/commands/hook.d.ts +11 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +61 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/hook.test.d.ts +2 -0
- package/dist/commands/hook.test.d.ts.map +1 -0
- package/dist/commands/hook.test.js +80 -0
- package/dist/commands/hook.test.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +2 -1
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/task/add-dep.d.ts.map +1 -1
- package/dist/commands/task/add-dep.js +10 -2
- package/dist/commands/task/add-dep.js.map +1 -1
- package/dist/commands/task/add-dep.test.js +24 -1
- package/dist/commands/task/add-dep.test.js.map +1 -1
- package/dist/commands/task/add.d.ts.map +1 -1
- package/dist/commands/task/add.js +3 -13
- package/dist/commands/task/add.js.map +1 -1
- package/dist/commands/task/checkpoint.d.ts.map +1 -1
- package/dist/commands/task/checkpoint.js +2 -4
- package/dist/commands/task/checkpoint.js.map +1 -1
- package/dist/commands/task/claim.d.ts.map +1 -1
- package/dist/commands/task/claim.js +4 -2
- package/dist/commands/task/claim.js.map +1 -1
- package/dist/commands/task/history.d.ts.map +1 -1
- package/dist/commands/task/history.js +2 -1
- package/dist/commands/task/history.js.map +1 -1
- package/dist/commands/task/list.d.ts.map +1 -1
- package/dist/commands/task/list.js +4 -7
- package/dist/commands/task/list.js.map +1 -1
- package/dist/commands/task/move.test.js +2 -1
- package/dist/commands/task/move.test.js.map +1 -1
- package/dist/commands/task/progress.d.ts.map +1 -1
- package/dist/commands/task/progress.js +5 -3
- package/dist/commands/task/progress.js.map +1 -1
- package/dist/commands/task/prune.d.ts.map +1 -1
- package/dist/commands/task/prune.js +2 -5
- package/dist/commands/task/prune.js.map +1 -1
- package/dist/commands/task/remove-dep.test.js +2 -1
- package/dist/commands/task/remove-dep.test.js.map +1 -1
- package/dist/commands/task/search.d.ts.map +1 -1
- package/dist/commands/task/search.js +27 -6
- package/dist/commands/task/search.js.map +1 -1
- package/dist/commands/task/search.test.js +26 -0
- package/dist/commands/task/search.test.js.map +1 -1
- package/dist/commands/task/set-status.d.ts.map +1 -1
- package/dist/commands/task/set-status.js +4 -2
- package/dist/commands/task/set-status.js.map +1 -1
- package/dist/commands/task/show.d.ts +2 -1
- package/dist/commands/task/show.d.ts.map +1 -1
- package/dist/commands/task/show.js +12 -13
- package/dist/commands/task/show.js.map +1 -1
- package/dist/commands/task/start.d.ts.map +1 -1
- package/dist/commands/task/start.js +3 -1
- package/dist/commands/task/start.js.map +1 -1
- package/dist/commands/task/stuck.d.ts.map +1 -1
- package/dist/commands/task/stuck.js +2 -1
- package/dist/commands/task/stuck.js.map +1 -1
- package/dist/commands/task/update.d.ts.map +1 -1
- package/dist/commands/task/update.js +54 -49
- package/dist/commands/task/update.js.map +1 -1
- package/dist/commands/task/update.test.js +2 -1
- package/dist/commands/task/update.test.js.map +1 -1
- package/dist/commands/workflow/index.d.ts +3 -0
- package/dist/commands/workflow/index.d.ts.map +1 -0
- package/dist/commands/workflow/index.js +12 -0
- package/dist/commands/workflow/index.js.map +1 -0
- package/dist/commands/workflow/index.test.d.ts +2 -0
- package/dist/commands/workflow/index.test.d.ts.map +1 -0
- package/dist/commands/workflow/index.test.js +35 -0
- package/dist/commands/workflow/index.test.js.map +1 -0
- package/dist/commands/workflow/list.d.ts +14 -0
- package/dist/commands/workflow/list.d.ts.map +1 -0
- package/dist/commands/workflow/list.js +41 -0
- package/dist/commands/workflow/list.js.map +1 -0
- package/dist/commands/workflow/run.d.ts +45 -0
- package/dist/commands/workflow/run.d.ts.map +1 -0
- package/dist/commands/workflow/run.js +243 -0
- package/dist/commands/workflow/run.js.map +1 -0
- package/dist/commands/workflow/run.test.d.ts +2 -0
- package/dist/commands/workflow/run.test.d.ts.map +1 -0
- package/dist/commands/workflow/run.test.js +100 -0
- package/dist/commands/workflow/run.test.js.map +1 -0
- package/dist/commands/workflow/show.d.ts +24 -0
- package/dist/commands/workflow/show.d.ts.map +1 -0
- package/dist/commands/workflow/show.js +62 -0
- package/dist/commands/workflow/show.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +3 -1
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -1
- package/dist/errors.test.js +19 -0
- package/dist/errors.test.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/parse.d.ts +13 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +60 -0
- package/dist/parse.js.map +1 -0
- package/dist/parse.test.d.ts +2 -0
- package/dist/parse.test.d.ts.map +1 -0
- package/dist/parse.test.js +53 -0
- package/dist/parse.test.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -2,54 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="./assets/hzl.png" alt="HZL mascot" width="320" />
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Coordinate many agents through shared, durable task state with built-in human visibility.
|
|
5
|
+
A durable shared task ledger for [OpenClaw](https://openclaw.ai) and other multi-agent systems. Agents wake into fresh sessions — HZL preserves continuity across those wakes so they can resume work, hand off context, and coordinate through shared project pools.
|
|
8
6
|
|
|
9
7
|
## Install
|
|
10
8
|
|
|
11
|
-
### npm
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm install -g hzl-cli
|
|
15
|
-
hzl init
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### Homebrew (macOS/Linux)
|
|
19
|
-
|
|
20
9
|
```bash
|
|
21
|
-
brew tap tmchow/hzl
|
|
22
|
-
brew install hzl
|
|
10
|
+
npm install -g hzl-cli # or: brew tap tmchow/hzl && brew install hzl
|
|
23
11
|
hzl init
|
|
24
12
|
```
|
|
25
13
|
|
|
26
14
|
## Documentation
|
|
27
15
|
|
|
28
|
-
|
|
29
|
-
- [OpenClaw Setup](https://www.hzl-tasks.com/getting-started/openclaw/)
|
|
30
|
-
- [CLI Reference](https://www.hzl-tasks.com/reference/cli/)
|
|
31
|
-
- [Concepts](https://www.hzl-tasks.com/concepts/)
|
|
32
|
-
- [Workflows](https://www.hzl-tasks.com/workflows/)
|
|
33
|
-
|
|
34
|
-
Local preview:
|
|
16
|
+
Full docs at **[hzl-tasks.com](https://www.hzl-tasks.com)**
|
|
35
17
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- [`hzl-cli`](https://www.npmjs.com/package/hzl-cli)
|
|
44
|
-
- [`hzl-core`](https://www.npmjs.com/package/hzl-core)
|
|
45
|
-
- [`hzl-web`](https://www.npmjs.com/package/hzl-web)
|
|
18
|
+
- [Getting Started](https://www.hzl-tasks.com/getting-started/) — installation, quickstart, agent setup
|
|
19
|
+
- [Concepts](https://www.hzl-tasks.com/concepts/) — tasks, checkpoints, dependencies, projects
|
|
20
|
+
- [Workflows](https://www.hzl-tasks.com/workflows/) — single-agent, multi-agent, handoffs, oversight
|
|
21
|
+
- [CLI Reference](https://www.hzl-tasks.com/reference/cli/)
|
|
22
|
+
- [Architecture](https://www.hzl-tasks.com/reference/architecture/)
|
|
23
|
+
- [Troubleshooting](https://www.hzl-tasks.com/troubleshooting/)
|
|
46
24
|
|
|
47
|
-
##
|
|
25
|
+
## Links
|
|
48
26
|
|
|
49
|
-
- [Experimental integrations](https://www.hzl-tasks.com/experimental-integrations/)
|
|
50
27
|
- [Contributing](./CONTRIBUTING.md)
|
|
51
28
|
- [Changelog](./CHANGELOG.md)
|
|
52
|
-
- [Manual Release Process](./docs/release-process.md)
|
|
53
29
|
|
|
54
30
|
## License
|
|
55
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKnE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,gBAAgB,CAqEnB;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAsBjD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { TaskStatus } from 'hzl-core/events/types.js';
|
|
3
2
|
import { resolveDbPaths } from '../../config.js';
|
|
4
3
|
import { initializeDb, closeDb } from '../../db.js';
|
|
5
|
-
import {
|
|
4
|
+
import { handleError } from '../../errors.js';
|
|
6
5
|
import { GlobalOptionsSchema } from '../../types.js';
|
|
6
|
+
import { parseTaskStatus } from '../../parse.js';
|
|
7
7
|
export function runAgentStats(options) {
|
|
8
8
|
const { services, project, status, json } = options;
|
|
9
9
|
const db = services.cacheDb;
|
|
@@ -72,16 +72,10 @@ export function createAgentStatsCommand() {
|
|
|
72
72
|
const { eventsDbPath, cacheDbPath } = resolveDbPaths(globalOpts.db);
|
|
73
73
|
const services = initializeDb({ eventsDbPath, cacheDbPath });
|
|
74
74
|
try {
|
|
75
|
-
const parsedStatus = opts.status && Object.values(TaskStatus).includes(opts.status)
|
|
76
|
-
? opts.status
|
|
77
|
-
: undefined;
|
|
78
|
-
if (opts.status && !parsedStatus) {
|
|
79
|
-
throw new CLIError(`Invalid status: ${opts.status}`, ExitCode.InvalidInput);
|
|
80
|
-
}
|
|
81
75
|
runAgentStats({
|
|
82
76
|
services,
|
|
83
77
|
project: opts.project,
|
|
84
|
-
status:
|
|
78
|
+
status: parseTaskStatus(opts.status),
|
|
85
79
|
json: globalOpts.json ?? false,
|
|
86
80
|
});
|
|
87
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/agent/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/agent/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/dep/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,gBAAgB,IAAI,OAAO,CAI1C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createDepListCommand } from './list.js';
|
|
3
|
+
export function createDepCommand() {
|
|
4
|
+
const command = new Command('dep').description('Dependency commands');
|
|
5
|
+
command.addCommand(createDepListCommand());
|
|
6
|
+
return command;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dep/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACtE,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { TaskStatus } from 'hzl-core/events/types.js';
|
|
3
|
+
import { type Services } from '../../db.js';
|
|
4
|
+
export interface DependencyListItem {
|
|
5
|
+
from_task_id: string;
|
|
6
|
+
to_task_id: string;
|
|
7
|
+
from_title: string | null;
|
|
8
|
+
to_title: string | null;
|
|
9
|
+
from_project: string | null;
|
|
10
|
+
to_project: string | null;
|
|
11
|
+
from_agent: string | null;
|
|
12
|
+
to_agent: string | null;
|
|
13
|
+
from_status: TaskStatus | null;
|
|
14
|
+
to_status: TaskStatus | null;
|
|
15
|
+
cross_project: boolean;
|
|
16
|
+
blocking: boolean;
|
|
17
|
+
missing_from: boolean;
|
|
18
|
+
missing_to: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface DepListResult {
|
|
21
|
+
dependencies: DependencyListItem[];
|
|
22
|
+
total: number;
|
|
23
|
+
}
|
|
24
|
+
export interface DepListOptions {
|
|
25
|
+
services: Services;
|
|
26
|
+
project?: string;
|
|
27
|
+
fromProject?: string;
|
|
28
|
+
toProject?: string;
|
|
29
|
+
agent?: string;
|
|
30
|
+
fromAgent?: string;
|
|
31
|
+
toAgent?: string;
|
|
32
|
+
blockingOnly?: boolean;
|
|
33
|
+
crossProjectOnly?: boolean;
|
|
34
|
+
json: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare function runDepList(options: DepListOptions): DepListResult;
|
|
37
|
+
export declare function createDepListCommand(): Command;
|
|
38
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/dep/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKnE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAsFD,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAuFjE;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAkC9C"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { TaskStatus } from 'hzl-core/events/types.js';
|
|
3
|
+
import { resolveDbPaths } from '../../config.js';
|
|
4
|
+
import { initializeDb, closeDb } from '../../db.js';
|
|
5
|
+
import { handleError } from '../../errors.js';
|
|
6
|
+
import { createShortId } from '../../short-id.js';
|
|
7
|
+
import { GlobalOptionsSchema } from '../../types.js';
|
|
8
|
+
function escapeMd(value) {
|
|
9
|
+
return value.replace(/\|/g, '\\|').replace(/\n/g, ' ');
|
|
10
|
+
}
|
|
11
|
+
function formatTaskCell(shortId, taskId, title, project) {
|
|
12
|
+
const resolvedTitle = title ?? '[missing task]';
|
|
13
|
+
const resolvedProject = project ?? 'missing';
|
|
14
|
+
return `[${shortId(taskId)}] ${resolvedTitle} (${resolvedProject})`;
|
|
15
|
+
}
|
|
16
|
+
function toDependencyItem(row) {
|
|
17
|
+
const missingFrom = row.from_project === null;
|
|
18
|
+
const missingTo = row.to_project === null;
|
|
19
|
+
const crossProject = row.from_project !== null &&
|
|
20
|
+
row.to_project !== null &&
|
|
21
|
+
row.from_project !== row.to_project;
|
|
22
|
+
const fromCanBeBlocked = row.from_status === TaskStatus.Ready ||
|
|
23
|
+
row.from_status === TaskStatus.InProgress ||
|
|
24
|
+
row.from_status === TaskStatus.Blocked;
|
|
25
|
+
const toIsDone = row.to_status === TaskStatus.Done;
|
|
26
|
+
const blocking = fromCanBeBlocked && !toIsDone;
|
|
27
|
+
return {
|
|
28
|
+
...row,
|
|
29
|
+
cross_project: crossProject,
|
|
30
|
+
blocking,
|
|
31
|
+
missing_from: missingFrom,
|
|
32
|
+
missing_to: missingTo,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function printMarkdown(items) {
|
|
36
|
+
if (items.length === 0) {
|
|
37
|
+
console.log('No dependencies found');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const shortId = createShortId(items.flatMap((item) => [item.from_task_id, item.to_task_id]));
|
|
41
|
+
console.log('| From | To | Blocking | Cross-Project | Agents |');
|
|
42
|
+
console.log('| --- | --- | --- | --- | --- |');
|
|
43
|
+
for (const item of items) {
|
|
44
|
+
const fromCell = escapeMd(formatTaskCell(shortId, item.from_task_id, item.from_title, item.from_project));
|
|
45
|
+
const toCell = escapeMd(formatTaskCell(shortId, item.to_task_id, item.to_title, item.to_project));
|
|
46
|
+
const agents = escapeMd(`${item.from_agent ?? 'unassigned'} -> ${item.to_agent ?? 'unassigned'}`);
|
|
47
|
+
console.log(`| ${fromCell} | ${toCell} | ${item.blocking ? 'yes' : 'no'} | ${item.cross_project ? 'yes' : 'no'} | ${agents} |`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function runDepList(options) {
|
|
51
|
+
const { services, project, fromProject, toProject, agent, fromAgent, toAgent, blockingOnly, crossProjectOnly, json, } = options;
|
|
52
|
+
const where = [];
|
|
53
|
+
const params = [];
|
|
54
|
+
if (project) {
|
|
55
|
+
where.push('(ft.project = ? OR tt.project = ?)');
|
|
56
|
+
params.push(project, project);
|
|
57
|
+
}
|
|
58
|
+
if (fromProject) {
|
|
59
|
+
where.push('ft.project = ?');
|
|
60
|
+
params.push(fromProject);
|
|
61
|
+
}
|
|
62
|
+
if (toProject) {
|
|
63
|
+
where.push('tt.project = ?');
|
|
64
|
+
params.push(toProject);
|
|
65
|
+
}
|
|
66
|
+
if (agent) {
|
|
67
|
+
where.push('(ft.agent = ? OR tt.agent = ?)');
|
|
68
|
+
params.push(agent, agent);
|
|
69
|
+
}
|
|
70
|
+
if (fromAgent) {
|
|
71
|
+
where.push('ft.agent = ?');
|
|
72
|
+
params.push(fromAgent);
|
|
73
|
+
}
|
|
74
|
+
if (toAgent) {
|
|
75
|
+
where.push('tt.agent = ?');
|
|
76
|
+
params.push(toAgent);
|
|
77
|
+
}
|
|
78
|
+
if (blockingOnly) {
|
|
79
|
+
where.push("ft.status IN ('ready', 'in_progress', 'blocked')");
|
|
80
|
+
where.push("(tt.task_id IS NULL OR tt.status != 'done')");
|
|
81
|
+
}
|
|
82
|
+
if (crossProjectOnly) {
|
|
83
|
+
where.push('ft.project IS NOT NULL');
|
|
84
|
+
where.push('tt.project IS NOT NULL');
|
|
85
|
+
where.push('ft.project != tt.project');
|
|
86
|
+
}
|
|
87
|
+
const whereClause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
88
|
+
const rows = services.cacheDb.prepare(`
|
|
89
|
+
SELECT
|
|
90
|
+
d.task_id AS from_task_id,
|
|
91
|
+
d.depends_on_id AS to_task_id,
|
|
92
|
+
ft.title AS from_title,
|
|
93
|
+
tt.title AS to_title,
|
|
94
|
+
ft.project AS from_project,
|
|
95
|
+
tt.project AS to_project,
|
|
96
|
+
ft.agent AS from_agent,
|
|
97
|
+
tt.agent AS to_agent,
|
|
98
|
+
ft.status AS from_status,
|
|
99
|
+
tt.status AS to_status
|
|
100
|
+
FROM task_dependencies d
|
|
101
|
+
LEFT JOIN tasks_current ft ON ft.task_id = d.task_id
|
|
102
|
+
LEFT JOIN tasks_current tt ON tt.task_id = d.depends_on_id
|
|
103
|
+
${whereClause}
|
|
104
|
+
ORDER BY COALESCE(ft.project, ''), COALESCE(tt.project, ''), d.task_id, d.depends_on_id
|
|
105
|
+
`).all(...params);
|
|
106
|
+
const dependencies = rows.map(toDependencyItem);
|
|
107
|
+
const result = {
|
|
108
|
+
dependencies,
|
|
109
|
+
total: dependencies.length,
|
|
110
|
+
};
|
|
111
|
+
if (json) {
|
|
112
|
+
console.log(JSON.stringify(result));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
printMarkdown(dependencies);
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
export function createDepListCommand() {
|
|
120
|
+
return new Command('list')
|
|
121
|
+
.description('List dependency edges')
|
|
122
|
+
.option('-P, --project <project>', 'Filter edges where either side is in this project')
|
|
123
|
+
.option('--from-project <project>', 'Filter by dependent task project')
|
|
124
|
+
.option('--to-project <project>', 'Filter by dependency task project')
|
|
125
|
+
.option('--agent <agent>', 'Filter edges where either side is assigned to this agent')
|
|
126
|
+
.option('--from-agent <agent>', 'Filter by dependent task agent')
|
|
127
|
+
.option('--to-agent <agent>', 'Filter by dependency task agent')
|
|
128
|
+
.option('--blocking-only', 'Show only currently blocking dependencies', false)
|
|
129
|
+
.option('--cross-project-only', 'Show only cross-project dependencies', false)
|
|
130
|
+
.action(function (opts) {
|
|
131
|
+
const globalOpts = GlobalOptionsSchema.parse(this.optsWithGlobals());
|
|
132
|
+
const { eventsDbPath, cacheDbPath } = resolveDbPaths(globalOpts.db);
|
|
133
|
+
const services = initializeDb({ eventsDbPath, cacheDbPath });
|
|
134
|
+
try {
|
|
135
|
+
runDepList({
|
|
136
|
+
services,
|
|
137
|
+
project: opts.project,
|
|
138
|
+
fromProject: opts.fromProject,
|
|
139
|
+
toProject: opts.toProject,
|
|
140
|
+
agent: opts.agent,
|
|
141
|
+
fromAgent: opts.fromAgent,
|
|
142
|
+
toAgent: opts.toAgent,
|
|
143
|
+
blockingOnly: opts.blockingOnly,
|
|
144
|
+
crossProjectOnly: opts.crossProjectOnly,
|
|
145
|
+
json: globalOpts.json ?? false,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
handleError(error, globalOpts.json);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
closeDb(services);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/dep/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../../src/commands/dep/list.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { TaskStatus } from 'hzl-core/events/types.js';
|
|
6
|
+
import { initializeDbFromPath, closeDb } from '../../db.js';
|
|
7
|
+
import { runDepList } from './list.js';
|
|
8
|
+
describe('runDepList', () => {
|
|
9
|
+
let tempDir;
|
|
10
|
+
let dbPath;
|
|
11
|
+
let services;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hzl-dep-list-test-'));
|
|
14
|
+
dbPath = path.join(tempDir, 'test.db');
|
|
15
|
+
services = initializeDbFromPath(dbPath);
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
closeDb(services);
|
|
19
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
it('lists dependency edges and marks missing targets safely', () => {
|
|
22
|
+
const dep = services.taskService.createTask({ title: 'Dep', project: 'inbox' });
|
|
23
|
+
const dependent = services.taskService.createTask({
|
|
24
|
+
title: 'Dependent',
|
|
25
|
+
project: 'inbox',
|
|
26
|
+
depends_on: [dep.task_id],
|
|
27
|
+
});
|
|
28
|
+
services.taskService.setStatus(dependent.task_id, TaskStatus.Ready);
|
|
29
|
+
services.taskService.createTask({
|
|
30
|
+
title: 'Orphan edge',
|
|
31
|
+
project: 'inbox',
|
|
32
|
+
depends_on: ['missing-task-id'],
|
|
33
|
+
});
|
|
34
|
+
const result = runDepList({ services, json: false });
|
|
35
|
+
expect(result.total).toBe(2);
|
|
36
|
+
const existing = result.dependencies.find((d) => d.to_task_id === dep.task_id);
|
|
37
|
+
expect(existing?.missing_to).toBe(false);
|
|
38
|
+
const missing = result.dependencies.find((d) => d.to_task_id === 'missing-task-id');
|
|
39
|
+
expect(missing?.missing_to).toBe(true);
|
|
40
|
+
expect(missing?.blocking).toBe(false); // source task still backlog
|
|
41
|
+
});
|
|
42
|
+
it('filters by project for either side of edge', () => {
|
|
43
|
+
services.projectService.createProject('alpha');
|
|
44
|
+
services.projectService.createProject('beta');
|
|
45
|
+
const depAlpha = services.taskService.createTask({ title: 'Dep Alpha', project: 'alpha' });
|
|
46
|
+
services.taskService.createTask({
|
|
47
|
+
title: 'From Beta',
|
|
48
|
+
project: 'beta',
|
|
49
|
+
depends_on: [depAlpha.task_id],
|
|
50
|
+
});
|
|
51
|
+
const resultAlpha = runDepList({ services, project: 'alpha', json: false });
|
|
52
|
+
const resultBeta = runDepList({ services, project: 'beta', json: false });
|
|
53
|
+
expect(resultAlpha.total).toBe(1);
|
|
54
|
+
expect(resultBeta.total).toBe(1);
|
|
55
|
+
});
|
|
56
|
+
it('filters by from-project and to-project', () => {
|
|
57
|
+
services.projectService.createProject('alpha');
|
|
58
|
+
services.projectService.createProject('beta');
|
|
59
|
+
const depAlpha = services.taskService.createTask({ title: 'Dep Alpha', project: 'alpha' });
|
|
60
|
+
services.taskService.createTask({
|
|
61
|
+
title: 'From Beta',
|
|
62
|
+
project: 'beta',
|
|
63
|
+
depends_on: [depAlpha.task_id],
|
|
64
|
+
});
|
|
65
|
+
const depBeta = services.taskService.createTask({ title: 'Dep Beta', project: 'beta' });
|
|
66
|
+
services.taskService.createTask({
|
|
67
|
+
title: 'From Beta 2',
|
|
68
|
+
project: 'beta',
|
|
69
|
+
depends_on: [depBeta.task_id],
|
|
70
|
+
});
|
|
71
|
+
const result = runDepList({
|
|
72
|
+
services,
|
|
73
|
+
fromProject: 'beta',
|
|
74
|
+
toProject: 'alpha',
|
|
75
|
+
json: false,
|
|
76
|
+
});
|
|
77
|
+
expect(result.total).toBe(1);
|
|
78
|
+
expect(result.dependencies[0].from_project).toBe('beta');
|
|
79
|
+
expect(result.dependencies[0].to_project).toBe('alpha');
|
|
80
|
+
});
|
|
81
|
+
it('filters by agent, from-agent, and to-agent', () => {
|
|
82
|
+
const toMatch = services.taskService.createTask({
|
|
83
|
+
title: 'Dep Match',
|
|
84
|
+
project: 'inbox',
|
|
85
|
+
agent: 'to-agent',
|
|
86
|
+
});
|
|
87
|
+
const toOther = services.taskService.createTask({
|
|
88
|
+
title: 'Dep Other',
|
|
89
|
+
project: 'inbox',
|
|
90
|
+
agent: 'to-other',
|
|
91
|
+
});
|
|
92
|
+
const fromMatch = services.taskService.createTask({
|
|
93
|
+
title: 'From Match',
|
|
94
|
+
project: 'inbox',
|
|
95
|
+
depends_on: [toMatch.task_id],
|
|
96
|
+
agent: 'from-agent',
|
|
97
|
+
});
|
|
98
|
+
const fromOther = services.taskService.createTask({
|
|
99
|
+
title: 'From Other',
|
|
100
|
+
project: 'inbox',
|
|
101
|
+
depends_on: [toOther.task_id],
|
|
102
|
+
agent: 'from-other',
|
|
103
|
+
});
|
|
104
|
+
const fromAgent = runDepList({ services, fromAgent: 'from-agent', json: false });
|
|
105
|
+
const toAgent = runDepList({ services, toAgent: 'to-agent', json: false });
|
|
106
|
+
const eitherFrom = runDepList({ services, agent: 'from-agent', json: false });
|
|
107
|
+
const eitherTo = runDepList({ services, agent: 'to-agent', json: false });
|
|
108
|
+
expect(fromAgent.total).toBe(1);
|
|
109
|
+
expect(toAgent.total).toBe(1);
|
|
110
|
+
expect(eitherFrom.total).toBe(1);
|
|
111
|
+
expect(eitherTo.total).toBe(1);
|
|
112
|
+
});
|
|
113
|
+
it('supports blocking-only filter', () => {
|
|
114
|
+
const blocker = services.taskService.createTask({ title: 'Blocker', project: 'inbox' });
|
|
115
|
+
const blocked = services.taskService.createTask({
|
|
116
|
+
title: 'Blocked',
|
|
117
|
+
project: 'inbox',
|
|
118
|
+
depends_on: [blocker.task_id],
|
|
119
|
+
});
|
|
120
|
+
services.taskService.setStatus(blocked.task_id, TaskStatus.Ready);
|
|
121
|
+
const doneDep = services.taskService.createTask({ title: 'Done dep', project: 'inbox' });
|
|
122
|
+
services.taskService.setStatus(doneDep.task_id, TaskStatus.Ready);
|
|
123
|
+
services.taskService.claimTask(doneDep.task_id);
|
|
124
|
+
services.taskService.completeTask(doneDep.task_id);
|
|
125
|
+
const unblocked = services.taskService.createTask({
|
|
126
|
+
title: 'Unblocked',
|
|
127
|
+
project: 'inbox',
|
|
128
|
+
depends_on: [doneDep.task_id],
|
|
129
|
+
});
|
|
130
|
+
services.taskService.setStatus(unblocked.task_id, TaskStatus.Ready);
|
|
131
|
+
const orphan = services.taskService.createTask({
|
|
132
|
+
title: 'Orphan',
|
|
133
|
+
project: 'inbox',
|
|
134
|
+
depends_on: ['missing-for-blocking'],
|
|
135
|
+
});
|
|
136
|
+
services.taskService.setStatus(orphan.task_id, TaskStatus.Ready);
|
|
137
|
+
const pausedParent = services.taskService.createTask({
|
|
138
|
+
title: 'Paused Parent',
|
|
139
|
+
project: 'inbox',
|
|
140
|
+
depends_on: [blocker.task_id],
|
|
141
|
+
});
|
|
142
|
+
services.taskService.setStatus(pausedParent.task_id, TaskStatus.Blocked);
|
|
143
|
+
const result = runDepList({ services, blockingOnly: true, json: false });
|
|
144
|
+
const edgePairs = result.dependencies.map((d) => `${d.from_task_id}->${d.to_task_id}`).sort();
|
|
145
|
+
expect(edgePairs).toEqual([
|
|
146
|
+
`${blocked.task_id}->${blocker.task_id}`,
|
|
147
|
+
`${orphan.task_id}->missing-for-blocking`,
|
|
148
|
+
`${pausedParent.task_id}->${blocker.task_id}`,
|
|
149
|
+
].sort());
|
|
150
|
+
});
|
|
151
|
+
it('supports cross-project-only filter', () => {
|
|
152
|
+
services.projectService.createProject('alpha');
|
|
153
|
+
services.projectService.createProject('beta');
|
|
154
|
+
const depAlpha = services.taskService.createTask({ title: 'Dep Alpha', project: 'alpha' });
|
|
155
|
+
services.taskService.createTask({
|
|
156
|
+
title: 'From Beta',
|
|
157
|
+
project: 'beta',
|
|
158
|
+
depends_on: [depAlpha.task_id],
|
|
159
|
+
});
|
|
160
|
+
const depBeta = services.taskService.createTask({ title: 'Dep Beta', project: 'beta' });
|
|
161
|
+
services.taskService.createTask({
|
|
162
|
+
title: 'From Beta 2',
|
|
163
|
+
project: 'beta',
|
|
164
|
+
depends_on: [depBeta.task_id],
|
|
165
|
+
});
|
|
166
|
+
const result = runDepList({ services, crossProjectOnly: true, json: false });
|
|
167
|
+
expect(result.total).toBe(1);
|
|
168
|
+
expect(result.dependencies[0].cross_project).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=list.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.test.js","sourceRoot":"","sources":["../../../src/commands/dep/list.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-events.d.ts","sourceRoot":"","sources":["../../src/commands/export-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"export-events.d.ts","sourceRoot":"","sources":["../../src/commands/export-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKhE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,kBAAkB,CAmCrB;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CA0BnD"}
|
|
@@ -5,6 +5,7 @@ import { resolveDbPaths } from '../config.js';
|
|
|
5
5
|
import { initializeDb, closeDb } from '../db.js';
|
|
6
6
|
import { handleError } from '../errors.js';
|
|
7
7
|
import { GlobalOptionsSchema } from '../types.js';
|
|
8
|
+
import { parseOptionalInteger } from '../parse.js';
|
|
8
9
|
export function runExportEvents(options) {
|
|
9
10
|
const { services, outputPath, fromId, json } = options;
|
|
10
11
|
const { db } = services;
|
|
@@ -50,7 +51,7 @@ export function createExportEventsCommand() {
|
|
|
50
51
|
runExportEvents({
|
|
51
52
|
services,
|
|
52
53
|
outputPath: output,
|
|
53
|
-
fromId: opts.from
|
|
54
|
+
fromId: parseOptionalInteger(opts.from, 'from', { min: 0 }),
|
|
54
55
|
json: globalOpts.json ?? false,
|
|
55
56
|
});
|
|
56
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-events.js","sourceRoot":"","sources":["../../src/commands/export-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"export-events.js","sourceRoot":"","sources":["../../src/commands/export-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const GUIDE_CONTENT = "### HZL task ledger (agent instructions)\n\nUse
|
|
1
|
+
export declare const GUIDE_CONTENT = "### HZL task ledger (agent instructions)\n\nUse HZL as durable task state when work can span sessions or agents.\n\n**Use HZL when:**\n- Work has multiple steps or risk\n- You need resumable progress and ownership\n- You are delegating or handing off work\n- You need human-auditable state\n\n**Skip HZL when:**\n- Work is tiny and can be finished immediately\n\n---\n\n## Workflow-first loop\n\n```bash\n# 1) Session start: resume existing in-progress work or claim next\nhzl workflow run start --agent <agent-name> --project <project>\n\n# 2) Progress updates\nhzl task checkpoint <id> \"what changed and what is next\"\nhzl task progress <id> 60\n\n# 3) Complete, handoff, or delegate\nhzl task complete <id>\n# or\nhzl workflow run handoff --from <id> --title \"<follow-on>\" --project <project>\n# or\nhzl workflow run delegate --from <id> --title \"<delegated>\" --project <project> --pause-parent\n```\n\n## Key commands\n\n```bash\nhzl project list\nhzl workflow list\nhzl workflow show start\nhzl dep list --blocking-only\nhzl hook drain\n```\n\n## Routing model\n\n- Use projects as role pools.\n- Omit `--agent` to create pool-routed tasks.\n- Use `--agent` only when assignment must be explicit.\n\n## Recovery model\n\n```bash\nhzl task stuck\nhzl task steal <id> --if-expired --agent <agent-name>\n```\n\n## Hook delivery model\n\n- Transition to `done` enqueues callbacks.\n- Host scheduler must run `hzl hook drain` (recommended every 1-5 minutes).\n\n## Safety notes\n\n- `task complete` is a command; `done` is a status.\n- `workflow run start` intentionally does not support `--auto-op-id`.\n\n---\n\n**DESTRUCTIVE - Never run without explicit user request:**\n- `hzl task prune`\n- `hzl init --force`";
|
|
2
2
|
//# sourceMappingURL=guide-content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-content.d.ts","sourceRoot":"","sources":["../../src/commands/guide-content.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"guide-content.d.ts","sourceRoot":"","sources":["../../src/commands/guide-content.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,6rDAsEH,CAAC"}
|