hzl-cli 1.12.4 → 1.13.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 +38 -7
- package/dist/commands/add-dep.d.ts +15 -0
- package/dist/commands/add-dep.d.ts.map +1 -0
- package/dist/commands/add-dep.js +86 -0
- package/dist/commands/add-dep.js.map +1 -0
- package/dist/commands/add-dep.test.d.ts +2 -0
- package/dist/commands/add-dep.test.d.ts.map +1 -0
- package/dist/commands/add-dep.test.js +47 -0
- package/dist/commands/add-dep.test.js.map +1 -0
- package/dist/commands/add.d.ts +23 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +65 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/add.test.d.ts +2 -0
- package/dist/commands/add.test.d.ts.map +1 -0
- package/dist/commands/add.test.js +60 -0
- package/dist/commands/add.test.js.map +1 -0
- package/dist/commands/archive.d.ts +16 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +51 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/archive.test.d.ts +2 -0
- package/dist/commands/archive.test.d.ts.map +1 -0
- package/dist/commands/archive.test.js +48 -0
- package/dist/commands/archive.test.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +17 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +64 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/checkpoint.test.d.ts +2 -0
- package/dist/commands/checkpoint.test.d.ts.map +1 -0
- package/dist/commands/checkpoint.test.js +47 -0
- package/dist/commands/checkpoint.test.js.map +1 -0
- package/dist/commands/claim.d.ts +20 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +62 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/claim.test.d.ts +2 -0
- package/dist/commands/claim.test.d.ts.map +1 -0
- package/dist/commands/claim.test.js +48 -0
- package/dist/commands/claim.test.js.map +1 -0
- package/dist/commands/comment.d.ts +16 -0
- package/dist/commands/comment.d.ts.map +1 -0
- package/dist/commands/comment.js +53 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/comment.test.d.ts +2 -0
- package/dist/commands/comment.test.d.ts.map +1 -0
- package/dist/commands/comment.test.js +46 -0
- package/dist/commands/comment.test.js.map +1 -0
- package/dist/commands/complete.d.ts +15 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +47 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/complete.test.d.ts +2 -0
- package/dist/commands/complete.test.d.ts.map +1 -0
- package/dist/commands/complete.test.js +42 -0
- package/dist/commands/complete.test.js.map +1 -0
- package/dist/commands/history.d.ts +22 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +70 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/history.test.d.ts +2 -0
- package/dist/commands/history.test.d.ts.map +1 -0
- package/dist/commands/history.test.js +41 -0
- package/dist/commands/history.test.js.map +1 -0
- package/dist/commands/list.d.ts +26 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +85 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/list.test.d.ts +2 -0
- package/dist/commands/list.test.d.ts.map +1 -0
- package/dist/commands/list.test.js +55 -0
- package/dist/commands/list.test.js.map +1 -0
- package/dist/commands/move.d.ts +15 -0
- package/dist/commands/move.d.ts.map +1 -0
- package/dist/commands/move.js +62 -0
- package/dist/commands/move.js.map +1 -0
- package/dist/commands/move.test.d.ts +2 -0
- package/dist/commands/move.test.d.ts.map +1 -0
- package/dist/commands/move.test.js +55 -0
- package/dist/commands/move.test.js.map +1 -0
- package/dist/commands/next.d.ts +18 -0
- package/dist/commands/next.d.ts.map +1 -0
- package/dist/commands/next.js +64 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/next.test.d.ts +2 -0
- package/dist/commands/next.test.d.ts.map +1 -0
- package/dist/commands/next.test.js +52 -0
- package/dist/commands/next.test.js.map +1 -0
- package/dist/commands/projects.d.ts +16 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +64 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/projects.test.d.ts +2 -0
- package/dist/commands/projects.test.d.ts.map +1 -0
- package/dist/commands/projects.test.js +47 -0
- package/dist/commands/projects.test.js.map +1 -0
- package/dist/commands/release.d.ts +17 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +52 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/release.test.d.ts +2 -0
- package/dist/commands/release.test.d.ts.map +1 -0
- package/dist/commands/release.test.js +47 -0
- package/dist/commands/release.test.js.map +1 -0
- package/dist/commands/remove-dep.d.ts +15 -0
- package/dist/commands/remove-dep.d.ts.map +1 -0
- package/dist/commands/remove-dep.js +55 -0
- package/dist/commands/remove-dep.js.map +1 -0
- package/dist/commands/remove-dep.test.d.ts +2 -0
- package/dist/commands/remove-dep.test.d.ts.map +1 -0
- package/dist/commands/remove-dep.test.js +47 -0
- package/dist/commands/remove-dep.test.js.map +1 -0
- package/dist/commands/rename-project.d.ts +16 -0
- package/dist/commands/rename-project.d.ts.map +1 -0
- package/dist/commands/rename-project.js +70 -0
- package/dist/commands/rename-project.js.map +1 -0
- package/dist/commands/rename-project.test.d.ts +2 -0
- package/dist/commands/rename-project.test.d.ts.map +1 -0
- package/dist/commands/rename-project.test.js +75 -0
- package/dist/commands/rename-project.test.js.map +1 -0
- package/dist/commands/reopen.d.ts +18 -0
- package/dist/commands/reopen.d.ts.map +1 -0
- package/dist/commands/reopen.js +56 -0
- package/dist/commands/reopen.js.map +1 -0
- package/dist/commands/reopen.test.d.ts +2 -0
- package/dist/commands/reopen.test.d.ts.map +1 -0
- package/dist/commands/reopen.test.js +48 -0
- package/dist/commands/reopen.test.js.map +1 -0
- package/dist/commands/search.d.ts +23 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +89 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/search.test.d.ts +2 -0
- package/dist/commands/search.test.d.ts.map +1 -0
- package/dist/commands/search.test.js +41 -0
- package/dist/commands/search.test.js.map +1 -0
- package/dist/commands/set-status.d.ts +18 -0
- package/dist/commands/set-status.d.ts.map +1 -0
- package/dist/commands/set-status.js +60 -0
- package/dist/commands/set-status.js.map +1 -0
- package/dist/commands/set-status.test.d.ts +2 -0
- package/dist/commands/set-status.test.d.ts.map +1 -0
- package/dist/commands/set-status.test.js +45 -0
- package/dist/commands/set-status.test.js.map +1 -0
- package/dist/commands/show.d.ts +34 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +96 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/show.test.d.ts +2 -0
- package/dist/commands/show.test.d.ts.map +1 -0
- package/dist/commands/show.test.js +50 -0
- package/dist/commands/show.test.js.map +1 -0
- package/dist/commands/steal.d.ts +19 -0
- package/dist/commands/steal.d.ts.map +1 -0
- package/dist/commands/steal.js +90 -0
- package/dist/commands/steal.js.map +1 -0
- package/dist/commands/steal.test.d.ts +2 -0
- package/dist/commands/steal.test.d.ts.map +1 -0
- package/dist/commands/steal.test.js +66 -0
- package/dist/commands/steal.test.js.map +1 -0
- package/dist/commands/stuck.d.ts +22 -0
- package/dist/commands/stuck.d.ts.map +1 -0
- package/dist/commands/stuck.js +91 -0
- package/dist/commands/stuck.js.map +1 -0
- package/dist/commands/stuck.test.d.ts +2 -0
- package/dist/commands/stuck.test.d.ts.map +1 -0
- package/dist/commands/stuck.test.js +51 -0
- package/dist/commands/stuck.test.js.map +1 -0
- package/dist/commands/task.d.ts +32 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +72 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/update.d.ts +23 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +105 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/update.test.d.ts +2 -0
- package/dist/commands/update.test.d.ts.map +1 -0
- package/dist/commands/update.test.js +63 -0
- package/dist/commands/update.test.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -365,6 +365,7 @@ If your coding agent supports an instruction file (for example `CLAUDE.md`, `AGE
|
|
|
365
365
|
### Drop-in policy snippet
|
|
366
366
|
|
|
367
367
|
<!-- START [code:md] docs/snippets/agent-policy.md -->
|
|
368
|
+
<!-- ⚠️ DO NOT EDIT - Auto-generated from docs/snippets/agent-policy.md -->
|
|
368
369
|
```md
|
|
369
370
|
### HZL task ledger (external task tracking for multi-session/multi-agent work)
|
|
370
371
|
|
|
@@ -406,19 +407,47 @@ Built-in task tracking (if available) is fine for single-session work you'll com
|
|
|
406
407
|
|
|
407
408
|
That snippet is intentionally concise. The goal is clear triggers and structure, not ceremony.
|
|
408
409
|
|
|
409
|
-
|
|
410
|
+
<!-- START docs/snippets/agent-skills-install.md -->
|
|
411
|
+
<!-- ⚠️ DO NOT EDIT - Auto-generated from docs/snippets/agent-skills-install.md -->
|
|
412
|
+
### Claude Code skill (optional)
|
|
410
413
|
|
|
411
|
-
HZL includes a Claude Code
|
|
414
|
+
HZL includes a Claude Code skill that helps agents work effectively with HZL.
|
|
412
415
|
|
|
413
416
|
```bash
|
|
414
|
-
|
|
415
|
-
/plugin
|
|
417
|
+
/plugin marketplace add tmchow/hzl
|
|
418
|
+
/plugin install hzl@hzl
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
<details>
|
|
422
|
+
<summary>Migrating from older versions?</summary>
|
|
423
|
+
|
|
424
|
+
If you previously installed `hzl@hzl-marketplace`, uninstall it first:
|
|
416
425
|
|
|
417
|
-
|
|
418
|
-
/plugin
|
|
426
|
+
```bash
|
|
427
|
+
/plugin uninstall hzl@hzl-marketplace
|
|
428
|
+
/plugin marketplace remove hzl-marketplace
|
|
419
429
|
```
|
|
420
430
|
|
|
421
|
-
|
|
431
|
+
Then install the new version using the commands above.
|
|
432
|
+
</details>
|
|
433
|
+
|
|
434
|
+
### OpenAI Codex skill (optional)
|
|
435
|
+
|
|
436
|
+
HZL also supports [OpenAI Codex CLI](https://github.com/openai/codex). The skill uses the same `SKILL.md` format.
|
|
437
|
+
|
|
438
|
+
**Option A: Quick install (prompt injection)**
|
|
439
|
+
|
|
440
|
+
Tell Codex:
|
|
441
|
+
> Fetch and follow instructions from https://raw.githubusercontent.com/tmchow/hzl/main/.codex/INSTALL.md
|
|
442
|
+
|
|
443
|
+
Codex will download the skill and ask whether to add HZL guidance user-wide or project-specific.
|
|
444
|
+
|
|
445
|
+
**Security note:** This uses prompt injection—Codex will modify files on your system. Review [`.codex/INSTALL.md`](https://github.com/tmchow/hzl/blob/main/.codex/INSTALL.md) to see exactly what steps Codex will follow, or use Option B for manual control.
|
|
446
|
+
|
|
447
|
+
**Option B: Manual install**
|
|
448
|
+
|
|
449
|
+
Follow the steps in [`.codex/INSTALL.md`](https://github.com/tmchow/hzl/blob/main/.codex/INSTALL.md) yourself.
|
|
450
|
+
<!-- END docs/snippets/agent-skills-install.md -->
|
|
422
451
|
|
|
423
452
|
---
|
|
424
453
|
|
|
@@ -432,6 +461,7 @@ HZL fits well as the task ledger that OpenClaw (and its sub-agents) can share.
|
|
|
432
461
|
Copy/paste this into an OpenClaw chat (single prompt):
|
|
433
462
|
|
|
434
463
|
<!-- START [code:txt] docs/snippets/openclaw-setup-prompt.md -->
|
|
464
|
+
<!-- ⚠️ DO NOT EDIT - Auto-generated from docs/snippets/openclaw-setup-prompt.md -->
|
|
435
465
|
```txt
|
|
436
466
|
Install HZL from https://github.com/tmchow/hzl and run hzl init. Install the HZL skill from https://www.clawhub.ai/tmchow/hzl. Then append the HZL policy from https://raw.githubusercontent.com/tmchow/hzl/main/docs/openclaw/tools-prompt.md to my TOOLS.md.
|
|
437
467
|
```
|
|
@@ -463,6 +493,7 @@ https://raw.githubusercontent.com/tmchow/hzl/main/docs/openclaw/tools-prompt.md
|
|
|
463
493
|
To keep both the HZL CLI and your OpenClaw skill up to date, copy/paste this prompt into an OpenClaw chat. It creates a script you can reuse:
|
|
464
494
|
|
|
465
495
|
<!-- START [code:txt] docs/snippets/upgrade-hzl-prompt.md -->
|
|
496
|
+
<!-- ⚠️ DO NOT EDIT - Auto-generated from docs/snippets/upgrade-hzl-prompt.md -->
|
|
466
497
|
```txt
|
|
467
498
|
Create a script at scripts/upgrade-hzl.sh (in your workspace) that upgrades both the hzl-cli npm package and the hzl skill from ClawHub. The script should:
|
|
468
499
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type Services } from '../db.js';
|
|
3
|
+
export interface AddDepResult {
|
|
4
|
+
task_id: string;
|
|
5
|
+
depends_on_id: string;
|
|
6
|
+
added: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function runAddDep(options: {
|
|
9
|
+
services: Services;
|
|
10
|
+
taskId: string;
|
|
11
|
+
dependsOnId: string;
|
|
12
|
+
json: boolean;
|
|
13
|
+
}): AddDepResult;
|
|
14
|
+
export declare function createAddDepCommand(): Command;
|
|
15
|
+
//# sourceMappingURL=add-dep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-dep.d.ts","sourceRoot":"","sources":["../../src/commands/add-dep.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKhE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AA2BD,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,YAAY,CAwCf;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAiB7C"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/add-dep.ts
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { resolveDbPath } from '../config.js';
|
|
4
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
5
|
+
import { handleError, CLIError, ExitCode } from '../errors.js';
|
|
6
|
+
import { EventType } from 'hzl-core/events/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if adding taskId -> dependsOnId would create a cycle.
|
|
9
|
+
* A cycle would occur if dependsOnId (or any of its dependencies) already depends on taskId.
|
|
10
|
+
*/
|
|
11
|
+
function wouldCreateCycle(db, taskId, dependsOnId) {
|
|
12
|
+
// Check if dependsOnId can reach taskId through its dependencies
|
|
13
|
+
const visited = new Set();
|
|
14
|
+
const queue = [dependsOnId];
|
|
15
|
+
while (queue.length > 0) {
|
|
16
|
+
const current = queue.shift();
|
|
17
|
+
if (current === taskId)
|
|
18
|
+
return true;
|
|
19
|
+
if (visited.has(current))
|
|
20
|
+
continue;
|
|
21
|
+
visited.add(current);
|
|
22
|
+
// Get dependencies of current task
|
|
23
|
+
const deps = db.prepare('SELECT depends_on_id FROM task_dependencies WHERE task_id = ?').all(current);
|
|
24
|
+
for (const dep of deps) {
|
|
25
|
+
queue.push(dep.depends_on_id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
export function runAddDep(options) {
|
|
31
|
+
const { services, taskId, dependsOnId, json } = options;
|
|
32
|
+
const { db, eventStore, projectionEngine } = services;
|
|
33
|
+
// Check both tasks exist
|
|
34
|
+
const task = services.taskService.getTaskById(taskId);
|
|
35
|
+
if (!task) {
|
|
36
|
+
throw new CLIError(`Task not found: ${taskId}`, ExitCode.NotFound);
|
|
37
|
+
}
|
|
38
|
+
const depTask = services.taskService.getTaskById(dependsOnId);
|
|
39
|
+
if (!depTask) {
|
|
40
|
+
throw new CLIError(`Dependency task not found: ${dependsOnId}`, ExitCode.NotFound);
|
|
41
|
+
}
|
|
42
|
+
// Check for cycles - would adding taskId -> dependsOnId create a cycle?
|
|
43
|
+
if (wouldCreateCycle(db, taskId, dependsOnId)) {
|
|
44
|
+
throw new CLIError(`Adding this dependency would create a cycle`, ExitCode.InvalidInput);
|
|
45
|
+
}
|
|
46
|
+
// Add the dependency via event
|
|
47
|
+
const event = eventStore.append({
|
|
48
|
+
task_id: taskId,
|
|
49
|
+
type: EventType.DependencyAdded,
|
|
50
|
+
data: { depends_on_id: dependsOnId },
|
|
51
|
+
});
|
|
52
|
+
projectionEngine.applyEvent(event);
|
|
53
|
+
const result = {
|
|
54
|
+
task_id: taskId,
|
|
55
|
+
depends_on_id: dependsOnId,
|
|
56
|
+
added: true,
|
|
57
|
+
};
|
|
58
|
+
if (json) {
|
|
59
|
+
console.log(JSON.stringify(result));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(`✓ Added dependency: ${taskId} → ${dependsOnId}`);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
export function createAddDepCommand() {
|
|
67
|
+
return new Command('add-dep')
|
|
68
|
+
.description('Add a dependency between tasks')
|
|
69
|
+
.argument('<taskId>', 'Task ID that will depend on the other')
|
|
70
|
+
.argument('<dependsOnId>', 'Task ID that must be completed first')
|
|
71
|
+
.action(function (taskId, dependsOnId) {
|
|
72
|
+
const globalOpts = this.optsWithGlobals();
|
|
73
|
+
const dbPath = resolveDbPath(globalOpts.db);
|
|
74
|
+
const services = initializeDb(dbPath);
|
|
75
|
+
try {
|
|
76
|
+
runAddDep({ services, taskId, dependsOnId, json: globalOpts.json ?? false });
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
handleError(e, globalOpts.json);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
closeDb(services);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=add-dep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-dep.js","sourceRoot":"","sources":["../../src/commands/add-dep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-dep.test.d.ts","sourceRoot":"","sources":["../../src/commands/add-dep.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/add-dep.test.ts
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { runAddDep } from './add-dep.js';
|
|
7
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
8
|
+
describe('runAddDep', () => {
|
|
9
|
+
let tempDir;
|
|
10
|
+
let dbPath;
|
|
11
|
+
let services;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hzl-add-dep-test-'));
|
|
14
|
+
dbPath = path.join(tempDir, 'test.db');
|
|
15
|
+
services = initializeDb(dbPath);
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
closeDb(services);
|
|
19
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
it('adds a dependency between two tasks', () => {
|
|
22
|
+
const task1 = services.taskService.createTask({ title: 'Task 1', project: 'inbox' });
|
|
23
|
+
const task2 = services.taskService.createTask({ title: 'Task 2', project: 'inbox' });
|
|
24
|
+
const result = runAddDep({
|
|
25
|
+
services,
|
|
26
|
+
taskId: task1.task_id,
|
|
27
|
+
dependsOnId: task2.task_id,
|
|
28
|
+
json: false,
|
|
29
|
+
});
|
|
30
|
+
expect(result.task_id).toBe(task1.task_id);
|
|
31
|
+
expect(result.depends_on_id).toBe(task2.task_id);
|
|
32
|
+
expect(result.added).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it('throws when dependency would create a cycle', () => {
|
|
35
|
+
const task1 = services.taskService.createTask({ title: 'Task 1', project: 'inbox' });
|
|
36
|
+
const task2 = services.taskService.createTask({ title: 'Task 2', project: 'inbox', depends_on: [task1.task_id] });
|
|
37
|
+
// Task1 depends on Task2, now trying to make Task1 depend on Task2 would create cycle
|
|
38
|
+
// Actually the cycle is: Task1 <- Task2. If we add Task1 -> Task2, then Task2 depends on Task1 AND Task1 depends on Task2 = cycle
|
|
39
|
+
expect(() => runAddDep({
|
|
40
|
+
services,
|
|
41
|
+
taskId: task1.task_id,
|
|
42
|
+
dependsOnId: task2.task_id,
|
|
43
|
+
json: false,
|
|
44
|
+
})).toThrow(/cycle/i);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=add-dep.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-dep.test.js","sourceRoot":"","sources":["../../src/commands/add-dep.test.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAEhE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IACnB,IAAI,QAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAElH,sFAAsF;QACtF,kIAAkI;QAClI,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACrB,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type Services } from '../db.js';
|
|
3
|
+
export interface AddResult {
|
|
4
|
+
task_id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
project: string;
|
|
7
|
+
status: string;
|
|
8
|
+
priority: number;
|
|
9
|
+
tags: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface AddOptions {
|
|
12
|
+
services: Services;
|
|
13
|
+
project: string;
|
|
14
|
+
title: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
tags?: string[];
|
|
17
|
+
priority?: number;
|
|
18
|
+
dependsOn?: string[];
|
|
19
|
+
json: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function runAdd(options: AddOptions): AddResult;
|
|
22
|
+
export declare function createAddCommand(): Command;
|
|
23
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CA4BrD;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CA8B1C"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/add.ts
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { resolveDbPath } from '../config.js';
|
|
4
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
5
|
+
import { handleError } from '../errors.js';
|
|
6
|
+
export function runAdd(options) {
|
|
7
|
+
const { services, project, title, description, tags, priority, dependsOn, json } = options;
|
|
8
|
+
const task = services.taskService.createTask({
|
|
9
|
+
title,
|
|
10
|
+
project,
|
|
11
|
+
description,
|
|
12
|
+
tags,
|
|
13
|
+
priority,
|
|
14
|
+
depends_on: dependsOn,
|
|
15
|
+
});
|
|
16
|
+
const result = {
|
|
17
|
+
task_id: task.task_id,
|
|
18
|
+
title: task.title,
|
|
19
|
+
project: task.project,
|
|
20
|
+
status: task.status,
|
|
21
|
+
priority: task.priority,
|
|
22
|
+
tags: task.tags,
|
|
23
|
+
};
|
|
24
|
+
if (json) {
|
|
25
|
+
console.log(JSON.stringify(result));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(`✓ Created task ${task.task_id}: ${task.title}`);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
export function createAddCommand() {
|
|
33
|
+
return new Command('add')
|
|
34
|
+
.description('Create a new task')
|
|
35
|
+
.argument('<project>', 'Project name')
|
|
36
|
+
.argument('<title>', 'Task title')
|
|
37
|
+
.option('-d, --description <desc>', 'Task description')
|
|
38
|
+
.option('-t, --tags <tags>', 'Comma-separated tags')
|
|
39
|
+
.option('-p, --priority <n>', 'Priority (0-3)', '0')
|
|
40
|
+
.option('--depends-on <ids>', 'Comma-separated task IDs this depends on')
|
|
41
|
+
.action(function (project, title, opts) {
|
|
42
|
+
const globalOpts = this.optsWithGlobals();
|
|
43
|
+
const dbPath = resolveDbPath(globalOpts.db);
|
|
44
|
+
const services = initializeDb(dbPath);
|
|
45
|
+
try {
|
|
46
|
+
runAdd({
|
|
47
|
+
services,
|
|
48
|
+
project,
|
|
49
|
+
title,
|
|
50
|
+
description: opts.description,
|
|
51
|
+
tags: opts.tags?.split(','),
|
|
52
|
+
priority: parseInt(opts.priority, 10),
|
|
53
|
+
dependsOn: opts.dependsOn?.split(','),
|
|
54
|
+
json: globalOpts.json ?? false,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
handleError(e, globalOpts.json);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
closeDb(services);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAuB3C,MAAM,UAAU,MAAM,CAAC,OAAmB;IACxC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3F,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;QAC3C,KAAK;QACL,OAAO;QACP,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,UAAU,EAAE,SAAS;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAc;QACxB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;SACtB,WAAW,CAAC,mBAAmB,CAAC;SAChC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;SACrC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;SACjC,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,CAAC;SACnD,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,CAAC;SACxE,MAAM,CAAC,UAAyB,OAAe,EAAE,KAAa,EAAE,IAAS;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAmB,CAAC;QAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,CAAC;gBACL,QAAQ;gBACR,OAAO;gBACP,KAAK;gBACL,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;gBACrC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.test.d.ts","sourceRoot":"","sources":["../../src/commands/add.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/add.test.ts
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { runAdd } from './add.js';
|
|
7
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
8
|
+
describe('runAdd', () => {
|
|
9
|
+
let tempDir;
|
|
10
|
+
let dbPath;
|
|
11
|
+
let services;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hzl-add-test-'));
|
|
14
|
+
dbPath = path.join(tempDir, 'test.db');
|
|
15
|
+
services = initializeDb(dbPath);
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
closeDb(services);
|
|
19
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
it('creates a task with just title', () => {
|
|
22
|
+
const result = runAdd({
|
|
23
|
+
services,
|
|
24
|
+
project: 'inbox',
|
|
25
|
+
title: 'Test task',
|
|
26
|
+
json: false,
|
|
27
|
+
});
|
|
28
|
+
expect(result.task_id).toBeDefined();
|
|
29
|
+
expect(result.title).toBe('Test task');
|
|
30
|
+
expect(result.project).toBe('inbox');
|
|
31
|
+
});
|
|
32
|
+
it('creates a task with all options', () => {
|
|
33
|
+
const result = runAdd({
|
|
34
|
+
services,
|
|
35
|
+
project: 'my-project',
|
|
36
|
+
title: 'Full task',
|
|
37
|
+
description: 'A description',
|
|
38
|
+
tags: ['urgent', 'backend'],
|
|
39
|
+
priority: 2,
|
|
40
|
+
json: false,
|
|
41
|
+
});
|
|
42
|
+
expect(result.project).toBe('my-project');
|
|
43
|
+
expect(result.priority).toBe(2);
|
|
44
|
+
});
|
|
45
|
+
it('creates a task with dependencies', () => {
|
|
46
|
+
const dep = runAdd({ services, project: 'inbox', title: 'Dependency', json: false });
|
|
47
|
+
const result = runAdd({
|
|
48
|
+
services,
|
|
49
|
+
project: 'inbox',
|
|
50
|
+
title: 'Dependent task',
|
|
51
|
+
dependsOn: [dep.task_id],
|
|
52
|
+
json: false,
|
|
53
|
+
});
|
|
54
|
+
expect(result.task_id).toBeDefined();
|
|
55
|
+
// Dependent task should have the dependency recorded
|
|
56
|
+
const task = services.taskService.getTaskById(result.task_id);
|
|
57
|
+
expect(task).toBeDefined();
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=add.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.test.js","sourceRoot":"","sources":["../../src/commands/add.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type Services } from '../db.js';
|
|
3
|
+
export interface ArchiveResult {
|
|
4
|
+
task_id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
status: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function runArchive(options: {
|
|
9
|
+
services: Services;
|
|
10
|
+
taskId: string;
|
|
11
|
+
reason?: string;
|
|
12
|
+
author?: string;
|
|
13
|
+
json: boolean;
|
|
14
|
+
}): ArchiveResult;
|
|
15
|
+
export declare function createArchiveCommand(): Command;
|
|
16
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,aAAa,CAmBhB;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAwB9C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/archive.ts
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { resolveDbPath } from '../config.js';
|
|
4
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
5
|
+
import { handleError } from '../errors.js';
|
|
6
|
+
export function runArchive(options) {
|
|
7
|
+
const { services, taskId, reason, author, json } = options;
|
|
8
|
+
const task = services.taskService.archiveTask(taskId, { reason, author });
|
|
9
|
+
const result = {
|
|
10
|
+
task_id: task.task_id,
|
|
11
|
+
title: task.title,
|
|
12
|
+
status: task.status,
|
|
13
|
+
};
|
|
14
|
+
if (json) {
|
|
15
|
+
console.log(JSON.stringify(result));
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
console.log(`✓ Archived task ${task.task_id}: ${task.title}`);
|
|
19
|
+
if (reason)
|
|
20
|
+
console.log(` Reason: ${reason}`);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export function createArchiveCommand() {
|
|
25
|
+
return new Command('archive')
|
|
26
|
+
.description('Archive a task')
|
|
27
|
+
.argument('<taskId>', 'Task ID')
|
|
28
|
+
.option('--reason <reason>', 'Archive reason')
|
|
29
|
+
.option('--author <name>', 'Author name')
|
|
30
|
+
.action(function (taskId, opts) {
|
|
31
|
+
const globalOpts = this.optsWithGlobals();
|
|
32
|
+
const dbPath = resolveDbPath(globalOpts.db);
|
|
33
|
+
const services = initializeDb(dbPath);
|
|
34
|
+
try {
|
|
35
|
+
runArchive({
|
|
36
|
+
services,
|
|
37
|
+
taskId,
|
|
38
|
+
reason: opts.reason,
|
|
39
|
+
author: opts.author,
|
|
40
|
+
json: globalOpts.json ?? false,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
handleError(e, globalOpts.json);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
closeDb(services);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C,MAAM,UAAU,UAAU,CAAC,OAM1B;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3D,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;SAC/B,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,UAAyB,MAAc,EAAE,IAAS;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAmB,CAAC;QAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,UAAU,CAAC;gBACT,QAAQ;gBACR,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.test.d.ts","sourceRoot":"","sources":["../../src/commands/archive.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// packages/hzl-cli/src/commands/archive.test.ts
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import { runArchive } from './archive.js';
|
|
7
|
+
import { initializeDb, closeDb } from '../db.js';
|
|
8
|
+
import { TaskStatus } from 'hzl-core/events/types.js';
|
|
9
|
+
describe('runArchive', () => {
|
|
10
|
+
let tempDir;
|
|
11
|
+
let dbPath;
|
|
12
|
+
let services;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hzl-archive-test-'));
|
|
15
|
+
dbPath = path.join(tempDir, 'test.db');
|
|
16
|
+
services = initializeDb(dbPath);
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
closeDb(services);
|
|
20
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
21
|
+
});
|
|
22
|
+
it('archives a done task', () => {
|
|
23
|
+
const task = services.taskService.createTask({ title: 'Test', project: 'inbox' });
|
|
24
|
+
services.taskService.setStatus(task.task_id, TaskStatus.Ready);
|
|
25
|
+
services.taskService.claimTask(task.task_id);
|
|
26
|
+
services.taskService.completeTask(task.task_id);
|
|
27
|
+
const result = runArchive({
|
|
28
|
+
services,
|
|
29
|
+
taskId: task.task_id,
|
|
30
|
+
json: false,
|
|
31
|
+
});
|
|
32
|
+
expect(result.status).toBe(TaskStatus.Archived);
|
|
33
|
+
});
|
|
34
|
+
it('accepts a reason', () => {
|
|
35
|
+
const task = services.taskService.createTask({ title: 'Test', project: 'inbox' });
|
|
36
|
+
services.taskService.setStatus(task.task_id, TaskStatus.Ready);
|
|
37
|
+
services.taskService.claimTask(task.task_id);
|
|
38
|
+
services.taskService.completeTask(task.task_id);
|
|
39
|
+
const result = runArchive({
|
|
40
|
+
services,
|
|
41
|
+
taskId: task.task_id,
|
|
42
|
+
reason: 'project cancelled',
|
|
43
|
+
json: false,
|
|
44
|
+
});
|
|
45
|
+
expect(result.status).toBe(TaskStatus.Archived);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=archive.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.test.js","sourceRoot":"","sources":["../../src/commands/archive.test.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IACnB,IAAI,QAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAClF,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/D,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAClF,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/D,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type Services } from '../db.js';
|
|
3
|
+
export interface CheckpointResult {
|
|
4
|
+
task_id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
data: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export declare function runCheckpoint(options: {
|
|
9
|
+
services: Services;
|
|
10
|
+
taskId: string;
|
|
11
|
+
name: string;
|
|
12
|
+
data?: Record<string, unknown>;
|
|
13
|
+
author?: string;
|
|
14
|
+
json: boolean;
|
|
15
|
+
}): CheckpointResult;
|
|
16
|
+
export declare function createCheckpointCommand(): Command;
|
|
17
|
+
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/commands/checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,gBAAgB,CAuBnB;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAkCjD"}
|