vault-tasks 0.4.0__py3-none-any.whl
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.
- vault_tasks/__init__.py +3 -0
- vault_tasks/__main__.py +82 -0
- vault_tasks/_bundle/dist/cli.d.ts +3 -0
- vault_tasks/_bundle/dist/cli.d.ts.map +1 -0
- vault_tasks/_bundle/dist/cli.js +351 -0
- vault_tasks/_bundle/dist/cli.js.map +1 -0
- vault_tasks/_bundle/dist/commands/archive.d.ts +3 -0
- vault_tasks/_bundle/dist/commands/archive.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/archive.js +14 -0
- vault_tasks/_bundle/dist/commands/archive.js.map +1 -0
- vault_tasks/_bundle/dist/commands/done.d.ts +5 -0
- vault_tasks/_bundle/dist/commands/done.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/done.js +8 -0
- vault_tasks/_bundle/dist/commands/done.js.map +1 -0
- vault_tasks/_bundle/dist/commands/edit.d.ts +8 -0
- vault_tasks/_bundle/dist/commands/edit.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/edit.js +12 -0
- vault_tasks/_bundle/dist/commands/edit.js.map +1 -0
- vault_tasks/_bundle/dist/commands/init.d.ts +4 -0
- vault_tasks/_bundle/dist/commands/init.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/init.js +60 -0
- vault_tasks/_bundle/dist/commands/init.js.map +1 -0
- vault_tasks/_bundle/dist/commands/install-skills.d.ts +7 -0
- vault_tasks/_bundle/dist/commands/install-skills.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/install-skills.js +130 -0
- vault_tasks/_bundle/dist/commands/install-skills.js.map +1 -0
- vault_tasks/_bundle/dist/commands/lint.d.ts +11 -0
- vault_tasks/_bundle/dist/commands/lint.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/lint.js +45 -0
- vault_tasks/_bundle/dist/commands/lint.js.map +1 -0
- vault_tasks/_bundle/dist/commands/list.d.ts +8 -0
- vault_tasks/_bundle/dist/commands/list.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/list.js +22 -0
- vault_tasks/_bundle/dist/commands/list.js.map +1 -0
- vault_tasks/_bundle/dist/commands/new.d.ts +12 -0
- vault_tasks/_bundle/dist/commands/new.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/new.js +112 -0
- vault_tasks/_bundle/dist/commands/new.js.map +1 -0
- vault_tasks/_bundle/dist/commands/search.d.ts +6 -0
- vault_tasks/_bundle/dist/commands/search.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/search.js +12 -0
- vault_tasks/_bundle/dist/commands/search.js.map +1 -0
- vault_tasks/_bundle/dist/commands/show.d.ts +5 -0
- vault_tasks/_bundle/dist/commands/show.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/show.js +8 -0
- vault_tasks/_bundle/dist/commands/show.js.map +1 -0
- vault_tasks/_bundle/dist/commands/stale.d.ts +5 -0
- vault_tasks/_bundle/dist/commands/stale.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/stale.js +8 -0
- vault_tasks/_bundle/dist/commands/stale.js.map +1 -0
- vault_tasks/_bundle/dist/commands/start.d.ts +5 -0
- vault_tasks/_bundle/dist/commands/start.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/start.js +12 -0
- vault_tasks/_bundle/dist/commands/start.js.map +1 -0
- vault_tasks/_bundle/dist/commands/tags.d.ts +3 -0
- vault_tasks/_bundle/dist/commands/tags.d.ts.map +1 -0
- vault_tasks/_bundle/dist/commands/tags.js +8 -0
- vault_tasks/_bundle/dist/commands/tags.js.map +1 -0
- vault_tasks/_bundle/dist/config.d.ts +71 -0
- vault_tasks/_bundle/dist/config.d.ts.map +1 -0
- vault_tasks/_bundle/dist/config.js +453 -0
- vault_tasks/_bundle/dist/config.js.map +1 -0
- vault_tasks/_bundle/dist/counter.d.ts +11 -0
- vault_tasks/_bundle/dist/counter.d.ts.map +1 -0
- vault_tasks/_bundle/dist/counter.js +131 -0
- vault_tasks/_bundle/dist/counter.js.map +1 -0
- vault_tasks/_bundle/dist/frontmatter.d.ts +16 -0
- vault_tasks/_bundle/dist/frontmatter.d.ts.map +1 -0
- vault_tasks/_bundle/dist/frontmatter.js +187 -0
- vault_tasks/_bundle/dist/frontmatter.js.map +1 -0
- vault_tasks/_bundle/dist/index.d.ts +10 -0
- vault_tasks/_bundle/dist/index.d.ts.map +1 -0
- vault_tasks/_bundle/dist/index.js +7 -0
- vault_tasks/_bundle/dist/index.js.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/broken.d.ts +11 -0
- vault_tasks/_bundle/dist/lint/checks/broken.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/broken.js +38 -0
- vault_tasks/_bundle/dist/lint/checks/broken.js.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/drift.d.ts +15 -0
- vault_tasks/_bundle/dist/lint/checks/drift.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/drift.js +57 -0
- vault_tasks/_bundle/dist/lint/checks/drift.js.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/orphans.d.ts +20 -0
- vault_tasks/_bundle/dist/lint/checks/orphans.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/orphans.js +61 -0
- vault_tasks/_bundle/dist/lint/checks/orphans.js.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/stale.d.ts +11 -0
- vault_tasks/_bundle/dist/lint/checks/stale.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/checks/stale.js +48 -0
- vault_tasks/_bundle/dist/lint/checks/stale.js.map +1 -0
- vault_tasks/_bundle/dist/lint/collect.d.ts +44 -0
- vault_tasks/_bundle/dist/lint/collect.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/collect.js +223 -0
- vault_tasks/_bundle/dist/lint/collect.js.map +1 -0
- vault_tasks/_bundle/dist/lint/index.d.ts +29 -0
- vault_tasks/_bundle/dist/lint/index.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/index.js +119 -0
- vault_tasks/_bundle/dist/lint/index.js.map +1 -0
- vault_tasks/_bundle/dist/lint/report.d.ts +11 -0
- vault_tasks/_bundle/dist/lint/report.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/report.js +77 -0
- vault_tasks/_bundle/dist/lint/report.js.map +1 -0
- vault_tasks/_bundle/dist/lint/resolve.d.ts +48 -0
- vault_tasks/_bundle/dist/lint/resolve.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/resolve.js +147 -0
- vault_tasks/_bundle/dist/lint/resolve.js.map +1 -0
- vault_tasks/_bundle/dist/lint/suggest.d.ts +31 -0
- vault_tasks/_bundle/dist/lint/suggest.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/suggest.js +124 -0
- vault_tasks/_bundle/dist/lint/suggest.js.map +1 -0
- vault_tasks/_bundle/dist/lint/types.d.ts +130 -0
- vault_tasks/_bundle/dist/lint/types.d.ts.map +1 -0
- vault_tasks/_bundle/dist/lint/types.js +8 -0
- vault_tasks/_bundle/dist/lint/types.js.map +1 -0
- vault_tasks/_bundle/dist/output.d.ts +9 -0
- vault_tasks/_bundle/dist/output.d.ts.map +1 -0
- vault_tasks/_bundle/dist/output.js +59 -0
- vault_tasks/_bundle/dist/output.js.map +1 -0
- vault_tasks/_bundle/dist/similarity.d.ts +12 -0
- vault_tasks/_bundle/dist/similarity.d.ts.map +1 -0
- vault_tasks/_bundle/dist/similarity.js +62 -0
- vault_tasks/_bundle/dist/similarity.js.map +1 -0
- vault_tasks/_bundle/dist/slugify.d.ts +5 -0
- vault_tasks/_bundle/dist/slugify.d.ts.map +1 -0
- vault_tasks/_bundle/dist/slugify.js +27 -0
- vault_tasks/_bundle/dist/slugify.js.map +1 -0
- vault_tasks/_bundle/dist/store.d.ts +41 -0
- vault_tasks/_bundle/dist/store.d.ts.map +1 -0
- vault_tasks/_bundle/dist/store.js +386 -0
- vault_tasks/_bundle/dist/store.js.map +1 -0
- vault_tasks/_bundle/dist/task.d.ts +28 -0
- vault_tasks/_bundle/dist/task.d.ts.map +1 -0
- vault_tasks/_bundle/dist/task.js +2 -0
- vault_tasks/_bundle/dist/task.js.map +1 -0
- vault_tasks/_bundle/dist/ulid.d.ts +19 -0
- vault_tasks/_bundle/dist/ulid.d.ts.map +1 -0
- vault_tasks/_bundle/dist/ulid.js +121 -0
- vault_tasks/_bundle/dist/ulid.js.map +1 -0
- vault_tasks/_bundle/templates/backlog.base +62 -0
- vault_tasks/_bundle/templates/rules/backlog.md +14 -0
- vault_tasks/_bundle/templates/skills/brief/SKILL.md +54 -0
- vault_tasks/_bundle/templates/skills/build-log/SKILL.md +47 -0
- vault_tasks/_bundle/templates/skills/lint/SKILL.md +123 -0
- vault_tasks/_bundle/templates/skills/task/SKILL.md +28 -0
- vault_tasks/_bundle/templates/skills/weekly-review/SKILL.md +90 -0
- vault_tasks/_version.py +2 -0
- vault_tasks-0.4.0.dist-info/METADATA +217 -0
- vault_tasks-0.4.0.dist-info/RECORD +150 -0
- vault_tasks-0.4.0.dist-info/WHEEL +4 -0
- vault_tasks-0.4.0.dist-info/entry_points.txt +3 -0
vault_tasks/__init__.py
ADDED
vault_tasks/__main__.py
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Python entry point for the vault-tasks CLI.
|
|
2
|
+
|
|
3
|
+
The pip wheel ships the compiled JS at vault_tasks/_bundle/dist/cli.js plus
|
|
4
|
+
the templates tree at vault_tasks/_bundle/templates/. This shim:
|
|
5
|
+
|
|
6
|
+
1. Locates `node` on PATH (errors actionably if missing).
|
|
7
|
+
2. Sets VAULT_TASKS_TEMPLATES_DIR so install-skills finds the bundled
|
|
8
|
+
templates instead of walking up from __dirname.
|
|
9
|
+
3. Execs `node cli.js <forwarded argv>`. On POSIX we use os.execvpe so
|
|
10
|
+
signals (Ctrl-C) and exit codes pass through cleanly. On Windows we
|
|
11
|
+
fall back to subprocess.run because execvpe semantics there are
|
|
12
|
+
different enough to cause shell-related surprises.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
import shutil
|
|
19
|
+
import subprocess
|
|
20
|
+
import sys
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
NODE_MISSING_MESSAGE = (
|
|
24
|
+
"vault-tasks: Node.js is required but was not found on PATH.\n"
|
|
25
|
+
"\n"
|
|
26
|
+
"vault-tasks ships as JavaScript and needs Node.js >= 20 to run.\n"
|
|
27
|
+
"Install Node from https://nodejs.org or via your package manager:\n"
|
|
28
|
+
" macOS: brew install node\n"
|
|
29
|
+
" Ubuntu: sudo apt install nodejs\n"
|
|
30
|
+
" Windows: winget install OpenJS.NodeJS.LTS\n"
|
|
31
|
+
"Then re-run this command.\n"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _bundle_root() -> Path:
|
|
36
|
+
return Path(__file__).resolve().parent / "_bundle"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _find_node() -> str:
|
|
40
|
+
node = shutil.which("node")
|
|
41
|
+
if not node:
|
|
42
|
+
sys.stderr.write(NODE_MISSING_MESSAGE)
|
|
43
|
+
sys.exit(127)
|
|
44
|
+
return node
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def main() -> None:
|
|
48
|
+
node = _find_node()
|
|
49
|
+
bundle = _bundle_root()
|
|
50
|
+
cli_js = bundle / "dist" / "cli.js"
|
|
51
|
+
templates = bundle / "templates"
|
|
52
|
+
|
|
53
|
+
if not cli_js.is_file():
|
|
54
|
+
sys.stderr.write(
|
|
55
|
+
f"vault-tasks: bundle is missing cli.js at {cli_js}.\n"
|
|
56
|
+
"The pip wheel appears to be corrupt. Try `pip install --force-reinstall vault-tasks`.\n"
|
|
57
|
+
)
|
|
58
|
+
sys.exit(1)
|
|
59
|
+
if not templates.is_dir():
|
|
60
|
+
sys.stderr.write(
|
|
61
|
+
f"vault-tasks: bundle is missing templates at {templates}.\n"
|
|
62
|
+
"The pip wheel appears to be corrupt. Try `pip install --force-reinstall vault-tasks`.\n"
|
|
63
|
+
)
|
|
64
|
+
sys.exit(1)
|
|
65
|
+
|
|
66
|
+
env = os.environ.copy()
|
|
67
|
+
env["VAULT_TASKS_TEMPLATES_DIR"] = str(templates)
|
|
68
|
+
|
|
69
|
+
argv = [node, str(cli_js), *sys.argv[1:]]
|
|
70
|
+
|
|
71
|
+
if os.name == "nt":
|
|
72
|
+
# Windows: subprocess.run preserves stdio/exit-code semantics best.
|
|
73
|
+
# Pass argv as a list so the shell does not re-quote anything.
|
|
74
|
+
completed = subprocess.run(argv, env=env)
|
|
75
|
+
sys.exit(completed.returncode)
|
|
76
|
+
|
|
77
|
+
# POSIX: replace the Python process so signals and exit codes pass through.
|
|
78
|
+
os.execvpe(node, argv, env)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
main()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { loadConfig } from "./config.js";
|
|
3
|
+
import { cmdArchive } from "./commands/archive.js";
|
|
4
|
+
import { cmdDone } from "./commands/done.js";
|
|
5
|
+
import { cmdEdit } from "./commands/edit.js";
|
|
6
|
+
import { cmdInit } from "./commands/init.js";
|
|
7
|
+
import { cmdInstallSkills } from "./commands/install-skills.js";
|
|
8
|
+
import { cmdLint } from "./commands/lint.js";
|
|
9
|
+
import { cmdList } from "./commands/list.js";
|
|
10
|
+
import { cmdNew } from "./commands/new.js";
|
|
11
|
+
import { cmdSearch } from "./commands/search.js";
|
|
12
|
+
import { cmdShow } from "./commands/show.js";
|
|
13
|
+
import { cmdStale } from "./commands/stale.js";
|
|
14
|
+
import { cmdStart } from "./commands/start.js";
|
|
15
|
+
import { cmdTags } from "./commands/tags.js";
|
|
16
|
+
const USAGE = `vault-tasks — markdown-file task manager
|
|
17
|
+
|
|
18
|
+
Usage: vt <command> [options]
|
|
19
|
+
|
|
20
|
+
Commands:
|
|
21
|
+
new <title> Create a new task
|
|
22
|
+
list List tasks
|
|
23
|
+
search <keyword> Search tasks by title and body
|
|
24
|
+
stale List stale open tasks
|
|
25
|
+
show <id> Show full task
|
|
26
|
+
done <id> Mark task as done
|
|
27
|
+
start <id> Mark task as in-progress
|
|
28
|
+
edit <id> Edit task fields (--status, --priority, --tags)
|
|
29
|
+
archive Move completed tasks to archive
|
|
30
|
+
tags List all tags in use
|
|
31
|
+
lint Audit the vault for broken wikilinks, orphans, stale refs, drift
|
|
32
|
+
init Initialize vault-tasks in current directory
|
|
33
|
+
install-skills Install Claude Code skills and rules
|
|
34
|
+
|
|
35
|
+
Options (vary by command):
|
|
36
|
+
--priority, -p high, medium, or low
|
|
37
|
+
--tags, -t Comma-separated tags
|
|
38
|
+
--source, -s Where this was noticed
|
|
39
|
+
--body Task body as inline string (use - for stdin)
|
|
40
|
+
--body-file Task body read from file path
|
|
41
|
+
--commit Git commit after creating
|
|
42
|
+
--no-dedupe Skip duplicate detection (new)
|
|
43
|
+
--status Filter or set status
|
|
44
|
+
--tag Filter by tag
|
|
45
|
+
--all, -a Include done/archived tasks (list, search)
|
|
46
|
+
--install Install all skills and rules (install-skills)
|
|
47
|
+
--days, -d Stale threshold in days (default: 14)
|
|
48
|
+
--list List available skills
|
|
49
|
+
--update Overwrite existing skill files
|
|
50
|
+
--only Run a single lint check (broken|orphans|stale|drift)
|
|
51
|
+
--scope Restrict lint to files under <dir>
|
|
52
|
+
--json Machine-readable lint output
|
|
53
|
+
--quiet Print only the lint SUMMARY line
|
|
54
|
+
--no-suggestions Skip "did you mean?" suggestions in lint
|
|
55
|
+
--help, -h Show this help message
|
|
56
|
+
`;
|
|
57
|
+
const BOOLEAN_FLAGS = new Set([
|
|
58
|
+
"all",
|
|
59
|
+
"commit",
|
|
60
|
+
"install",
|
|
61
|
+
"list",
|
|
62
|
+
"update",
|
|
63
|
+
"help",
|
|
64
|
+
"no-dedupe",
|
|
65
|
+
"json",
|
|
66
|
+
"quiet",
|
|
67
|
+
"no-suggestions",
|
|
68
|
+
]);
|
|
69
|
+
// Flags that require a value. parseArgs throws an actionable error when one
|
|
70
|
+
// of these is passed without a value (e.g. `vt new T --priority` followed by
|
|
71
|
+
// EOL or another flag) so commands never receive a boolean for a string field.
|
|
72
|
+
const VALUE_FLAGS = new Set([
|
|
73
|
+
"priority",
|
|
74
|
+
"tags",
|
|
75
|
+
"source",
|
|
76
|
+
"body",
|
|
77
|
+
"body-file",
|
|
78
|
+
"status",
|
|
79
|
+
"tag",
|
|
80
|
+
"days",
|
|
81
|
+
"only",
|
|
82
|
+
"scope",
|
|
83
|
+
]);
|
|
84
|
+
const VALUE_FLAG_HINTS = {
|
|
85
|
+
priority: "high, medium, or low",
|
|
86
|
+
tags: "comma-separated tag names",
|
|
87
|
+
source: "where this was noticed (e.g. [[2026-05-09]])",
|
|
88
|
+
body: "a string, or '-' to read from stdin",
|
|
89
|
+
"body-file": "a file path",
|
|
90
|
+
status: "open, in-progress, done, or wont-do",
|
|
91
|
+
tag: "a tag name",
|
|
92
|
+
days: "a positive integer",
|
|
93
|
+
only: "broken|orphans|stale|drift",
|
|
94
|
+
scope: "a directory",
|
|
95
|
+
};
|
|
96
|
+
function missingValueError(key) {
|
|
97
|
+
const hint = VALUE_FLAG_HINTS[key];
|
|
98
|
+
return new Error(`Flag --${key} requires a value${hint ? ` (${hint})` : ""}.`);
|
|
99
|
+
}
|
|
100
|
+
function isFlag(arg) {
|
|
101
|
+
if (arg.startsWith("--"))
|
|
102
|
+
return true;
|
|
103
|
+
if (arg.startsWith("-") && arg.length === 2 && /[a-zA-Z]/.test(arg[1]))
|
|
104
|
+
return true;
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
function parseArgs(argv) {
|
|
108
|
+
const command = argv[0] ?? "";
|
|
109
|
+
const args = {};
|
|
110
|
+
const positional = [];
|
|
111
|
+
const shortFlags = {
|
|
112
|
+
p: "priority",
|
|
113
|
+
t: "tags",
|
|
114
|
+
s: "source",
|
|
115
|
+
a: "all",
|
|
116
|
+
d: "days",
|
|
117
|
+
h: "help",
|
|
118
|
+
};
|
|
119
|
+
let i = 1;
|
|
120
|
+
while (i < argv.length) {
|
|
121
|
+
const arg = argv[i];
|
|
122
|
+
if (arg.startsWith("--") && arg.includes("=")) {
|
|
123
|
+
const eqIdx = arg.indexOf("=");
|
|
124
|
+
const key = arg.slice(2, eqIdx);
|
|
125
|
+
const rawValue = arg.slice(eqIdx + 1);
|
|
126
|
+
if (BOOLEAN_FLAGS.has(key)) {
|
|
127
|
+
const lower = rawValue.toLowerCase();
|
|
128
|
+
if (lower === "true" || lower === "1" || lower === "") {
|
|
129
|
+
args[key] = true;
|
|
130
|
+
}
|
|
131
|
+
else if (lower === "false" || lower === "0") {
|
|
132
|
+
args[key] = false;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
throw new Error(`Flag --${key} is boolean; expected true/false/1/0 but got '${rawValue}'. ` +
|
|
136
|
+
`Either pass --${key} on its own, or use --${key}=true / --${key}=false.`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
if (VALUE_FLAGS.has(key) && rawValue === "") {
|
|
141
|
+
throw missingValueError(key);
|
|
142
|
+
}
|
|
143
|
+
args[key] = rawValue;
|
|
144
|
+
}
|
|
145
|
+
i++;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (arg.startsWith("--")) {
|
|
149
|
+
const key = arg.slice(2);
|
|
150
|
+
if (BOOLEAN_FLAGS.has(key)) {
|
|
151
|
+
args[key] = true;
|
|
152
|
+
i++;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const next = argv[i + 1];
|
|
156
|
+
if (next && !isFlag(next)) {
|
|
157
|
+
args[key] = next;
|
|
158
|
+
i += 2;
|
|
159
|
+
}
|
|
160
|
+
else if (VALUE_FLAGS.has(key)) {
|
|
161
|
+
throw missingValueError(key);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
args[key] = true;
|
|
165
|
+
i++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (arg.startsWith("-") && arg.length === 2 && /[a-zA-Z]/.test(arg[1])) {
|
|
170
|
+
const key = shortFlags[arg[1]] ?? arg[1];
|
|
171
|
+
if (BOOLEAN_FLAGS.has(key)) {
|
|
172
|
+
args[key] = true;
|
|
173
|
+
i++;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
const next = argv[i + 1];
|
|
177
|
+
if (next && !isFlag(next)) {
|
|
178
|
+
args[key] = next;
|
|
179
|
+
i += 2;
|
|
180
|
+
}
|
|
181
|
+
else if (VALUE_FLAGS.has(key)) {
|
|
182
|
+
throw missingValueError(key);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
args[key] = true;
|
|
186
|
+
i++;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
positional.push(arg);
|
|
192
|
+
i++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return { command, args, positional };
|
|
196
|
+
}
|
|
197
|
+
function main() {
|
|
198
|
+
const rawArgs = process.argv.slice(2);
|
|
199
|
+
if (rawArgs.length === 0 || rawArgs.includes("--help") || rawArgs.includes("-h")) {
|
|
200
|
+
console.log(USAGE);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
let command;
|
|
204
|
+
let args;
|
|
205
|
+
let positional;
|
|
206
|
+
try {
|
|
207
|
+
({ command, args, positional } = parseArgs(rawArgs));
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
console.error(err.message);
|
|
211
|
+
process.exitCode = 2;
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
// init doesn't need config
|
|
215
|
+
if (command === "init") {
|
|
216
|
+
cmdInit({ dir: positional[0] });
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
let config;
|
|
220
|
+
try {
|
|
221
|
+
config = loadConfig();
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
console.error(err.message);
|
|
225
|
+
process.exitCode = 1;
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// install-skills needs vault root but not necessarily a full config
|
|
229
|
+
try {
|
|
230
|
+
switch (command) {
|
|
231
|
+
case "install-skills":
|
|
232
|
+
cmdInstallSkills(config, {
|
|
233
|
+
install: args["install"] === true,
|
|
234
|
+
list: args["list"] === true,
|
|
235
|
+
update: args["update"] === true,
|
|
236
|
+
});
|
|
237
|
+
break;
|
|
238
|
+
case "new":
|
|
239
|
+
if (!positional[0]) {
|
|
240
|
+
console.error("Usage: vt new <title> [--priority P] [--tags t1,t2] [--source S] [--commit] [--body TEXT|--body-file PATH]");
|
|
241
|
+
process.exitCode = 1;
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
cmdNew(config, {
|
|
245
|
+
title: positional[0],
|
|
246
|
+
priority: args["priority"]?.toLowerCase(),
|
|
247
|
+
tags: args["tags"],
|
|
248
|
+
source: args["source"],
|
|
249
|
+
body: args["body"],
|
|
250
|
+
bodyFile: args["body-file"],
|
|
251
|
+
commit: args["commit"] === true,
|
|
252
|
+
noDedupe: args["no-dedupe"] === true,
|
|
253
|
+
});
|
|
254
|
+
break;
|
|
255
|
+
case "list":
|
|
256
|
+
cmdList(config, {
|
|
257
|
+
status: args["status"]?.toLowerCase(),
|
|
258
|
+
priority: args["priority"]?.toLowerCase(),
|
|
259
|
+
tag: args["tag"],
|
|
260
|
+
all: args["all"] === true,
|
|
261
|
+
});
|
|
262
|
+
break;
|
|
263
|
+
case "search":
|
|
264
|
+
if (!positional[0]) {
|
|
265
|
+
console.error("Usage: vt search <keyword> [--all]");
|
|
266
|
+
process.exitCode = 1;
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
cmdSearch(config, {
|
|
270
|
+
keyword: positional[0],
|
|
271
|
+
all: args["all"] === true,
|
|
272
|
+
});
|
|
273
|
+
break;
|
|
274
|
+
case "stale": {
|
|
275
|
+
let days;
|
|
276
|
+
if (args["days"] !== undefined) {
|
|
277
|
+
days = parseInt(args["days"], 10);
|
|
278
|
+
if (isNaN(days) || days < 1) {
|
|
279
|
+
console.error("Error: --days must be a positive integer");
|
|
280
|
+
process.exitCode = 1;
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
cmdStale(config, { days });
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case "show":
|
|
288
|
+
if (!positional[0]) {
|
|
289
|
+
console.error("Usage: vt show <id-or-substring>");
|
|
290
|
+
process.exitCode = 1;
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
cmdShow(config, { identifier: positional[0] });
|
|
294
|
+
break;
|
|
295
|
+
case "done":
|
|
296
|
+
if (!positional[0]) {
|
|
297
|
+
console.error("Usage: vt done <id-or-substring>");
|
|
298
|
+
process.exitCode = 1;
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
cmdDone(config, { identifier: positional[0] });
|
|
302
|
+
break;
|
|
303
|
+
case "start":
|
|
304
|
+
if (!positional[0]) {
|
|
305
|
+
console.error("Usage: vt start <id-or-substring>");
|
|
306
|
+
process.exitCode = 1;
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
cmdStart(config, { identifier: positional[0] });
|
|
310
|
+
break;
|
|
311
|
+
case "edit":
|
|
312
|
+
if (!positional[0]) {
|
|
313
|
+
console.error("Usage: vt edit <id-or-substring> [--status S] [--priority P] [--tags t1,t2]");
|
|
314
|
+
process.exitCode = 1;
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
cmdEdit(config, {
|
|
318
|
+
identifier: positional[0],
|
|
319
|
+
status: args["status"]?.toLowerCase(),
|
|
320
|
+
priority: args["priority"]?.toLowerCase(),
|
|
321
|
+
tags: args["tags"],
|
|
322
|
+
});
|
|
323
|
+
break;
|
|
324
|
+
case "archive":
|
|
325
|
+
cmdArchive(config);
|
|
326
|
+
break;
|
|
327
|
+
case "tags":
|
|
328
|
+
cmdTags(config);
|
|
329
|
+
break;
|
|
330
|
+
case "lint":
|
|
331
|
+
cmdLint(config, {
|
|
332
|
+
only: args["only"],
|
|
333
|
+
scope: args["scope"],
|
|
334
|
+
json: args["json"] === true,
|
|
335
|
+
quiet: args["quiet"] === true,
|
|
336
|
+
noSuggestions: args["no-suggestions"] === true,
|
|
337
|
+
});
|
|
338
|
+
break;
|
|
339
|
+
default:
|
|
340
|
+
console.error(`Unknown command: ${command}\n`);
|
|
341
|
+
console.log(USAGE);
|
|
342
|
+
process.exitCode = 1;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
console.error(err.message);
|
|
347
|
+
process.exitCode = 1;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
main();
|
|
351
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAa/C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TaskStore } from "../store.js";
|
|
2
|
+
export function cmdArchive(config) {
|
|
3
|
+
const store = new TaskStore(config);
|
|
4
|
+
const archived = store.archiveCompleted();
|
|
5
|
+
if (archived.length === 0) {
|
|
6
|
+
console.log("No completed tasks to archive.");
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for (const task of archived) {
|
|
10
|
+
console.log(` Archived: ${task.slug}.md`);
|
|
11
|
+
}
|
|
12
|
+
console.log(`\n${archived.length} task(s) archived.`);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,oBAAoB,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done.d.ts","sourceRoot":"","sources":["../../src/commands/done.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK1E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TaskStore } from "../store.js";
|
|
2
|
+
export function cmdDone(config, args) {
|
|
3
|
+
const store = new TaskStore(config);
|
|
4
|
+
const task = store.setStatus(args.identifier, "done");
|
|
5
|
+
const archived = task.filePath.startsWith(config.archiveDir);
|
|
6
|
+
console.log(`${task.slug}.md → done${archived ? " (archived)" : ""}`);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=done.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done.js","sourceRoot":"","sources":["../../src/commands/done.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,IAA4B;IAClE,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,aAAa,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,IAAI,CASN"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TaskStore } from "../store.js";
|
|
2
|
+
export function cmdEdit(config, args) {
|
|
3
|
+
const store = new TaskStore(config);
|
|
4
|
+
const tags = args.tags ? args.tags.split(",").map((t) => t.trim()) : undefined;
|
|
5
|
+
const task = store.update(args.identifier, {
|
|
6
|
+
status: args.status,
|
|
7
|
+
priority: args.priority,
|
|
8
|
+
tags,
|
|
9
|
+
});
|
|
10
|
+
console.log(`Updated: ${task.slug}.md`);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,IAA+E;IAE/E,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;QACzC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI;KACL,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6CA,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyBpD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { generateDefaultConfig, loadConfig } from "../config.js";
|
|
4
|
+
const COUNTER_IGNORE_LINE = ".vault-tasks-counter.json";
|
|
5
|
+
/**
|
|
6
|
+
* Atomically ensure `.vault-tasks-counter.json` is listed in .gitignore.
|
|
7
|
+
*
|
|
8
|
+
* Uses `openSync(path, 'wx')` to create the file exclusively; on EEXIST we
|
|
9
|
+
* read and append only if the line is missing. This avoids the TOCTOU race
|
|
10
|
+
* between `existsSync` and `writeFileSync` and guarantees we never overwrite
|
|
11
|
+
* an existing `.gitignore`.
|
|
12
|
+
*/
|
|
13
|
+
function ensureCounterIgnored(gitignorePath) {
|
|
14
|
+
try {
|
|
15
|
+
const fd = openSync(gitignorePath, "wx");
|
|
16
|
+
try {
|
|
17
|
+
writeFileSync(fd, `${COUNTER_IGNORE_LINE}\n`, "utf-8");
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
closeSync(fd);
|
|
21
|
+
}
|
|
22
|
+
console.log("Created: .gitignore");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
if (err.code !== "EEXIST")
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
const content = readFileSync(gitignorePath, "utf-8");
|
|
30
|
+
// Line-level match so we don't get fooled by "#.vault-tasks-counter.json" in a comment.
|
|
31
|
+
const lines = content.split(/\r?\n/).map((l) => l.trim());
|
|
32
|
+
if (lines.includes(COUNTER_IGNORE_LINE))
|
|
33
|
+
return;
|
|
34
|
+
const appended = content.endsWith("\n") ? content : content + "\n";
|
|
35
|
+
writeFileSync(gitignorePath, appended + `${COUNTER_IGNORE_LINE}\n`, "utf-8");
|
|
36
|
+
console.log(`Updated: .gitignore (added ${COUNTER_IGNORE_LINE})`);
|
|
37
|
+
}
|
|
38
|
+
export function cmdInit(args) {
|
|
39
|
+
const root = resolve(args.dir ?? process.cwd());
|
|
40
|
+
const configPath = join(root, ".vault-tasks.toml");
|
|
41
|
+
const backlogDir = join(root, "backlog");
|
|
42
|
+
if (existsSync(configPath)) {
|
|
43
|
+
console.log(`.vault-tasks.toml already exists at ${configPath}`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
writeFileSync(configPath, generateDefaultConfig(), "utf-8");
|
|
47
|
+
console.log(`Created: .vault-tasks.toml`);
|
|
48
|
+
const backlogExisted = existsSync(backlogDir);
|
|
49
|
+
mkdirSync(backlogDir, { recursive: true });
|
|
50
|
+
if (!backlogExisted)
|
|
51
|
+
console.log(`Created: backlog/`);
|
|
52
|
+
// Only add counter file to .gitignore for sequential ID strategy
|
|
53
|
+
const config = loadConfig(root);
|
|
54
|
+
if (config.idStrategy === "sequential") {
|
|
55
|
+
ensureCounterIgnored(join(root, ".gitignore"));
|
|
56
|
+
}
|
|
57
|
+
console.log("\nvault-tasks initialized. Create your first task with:");
|
|
58
|
+
console.log(' vt new "My first task"');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../../src/commands/install-skills.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA6F3C,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,IAAI,CAiEN"}
|