mdkg 0.0.1 → 0.0.2

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.
Files changed (67) hide show
  1. package/README.md +20 -6
  2. package/dist/cli.js +667 -11
  3. package/dist/commands/checkpoint.js +133 -0
  4. package/dist/commands/format.js +297 -0
  5. package/dist/commands/guide.js +22 -0
  6. package/dist/commands/index.js +17 -0
  7. package/dist/commands/init.js +111 -0
  8. package/dist/commands/list.js +52 -0
  9. package/dist/commands/new.js +279 -0
  10. package/dist/commands/next.js +75 -0
  11. package/dist/commands/node_card.js +17 -0
  12. package/dist/commands/pack.js +105 -0
  13. package/dist/commands/search.js +70 -0
  14. package/dist/commands/show.js +95 -0
  15. package/dist/commands/validate.js +229 -0
  16. package/dist/commands/workspace.js +101 -0
  17. package/dist/core/config.js +162 -0
  18. package/dist/core/migrate.js +30 -0
  19. package/dist/core/paths.js +14 -0
  20. package/dist/graph/edges.js +64 -0
  21. package/dist/graph/frontmatter.js +132 -0
  22. package/dist/graph/index_cache.js +50 -0
  23. package/dist/graph/indexer.js +144 -0
  24. package/dist/graph/node.js +225 -0
  25. package/dist/graph/staleness.js +31 -0
  26. package/dist/graph/template_schema.js +86 -0
  27. package/dist/graph/validate_graph.js +115 -0
  28. package/dist/graph/workspace_files.js +64 -0
  29. package/dist/init/AGENTS.md +43 -0
  30. package/dist/init/CLAUDE.md +37 -0
  31. package/dist/init/config.json +67 -0
  32. package/dist/init/core/core.md +12 -0
  33. package/dist/init/core/guide.md +99 -0
  34. package/dist/init/core/rule-1-mdkg-conventions.md +232 -0
  35. package/dist/init/core/rule-2-context-pack-rules.md +186 -0
  36. package/dist/init/core/rule-3-cli-contract.md +177 -0
  37. package/dist/init/core/rule-4-repo-safety-and-ignores.md +97 -0
  38. package/dist/init/core/rule-5-release-and-versioning.md +82 -0
  39. package/dist/init/core/rule-6-templates-and-schemas.md +186 -0
  40. package/dist/init/templates/default/bug.md +54 -0
  41. package/dist/init/templates/default/chk.md +55 -0
  42. package/dist/init/templates/default/dec.md +38 -0
  43. package/dist/init/templates/default/edd.md +50 -0
  44. package/dist/init/templates/default/epic.md +46 -0
  45. package/dist/init/templates/default/feat.md +35 -0
  46. package/dist/init/templates/default/prd.md +59 -0
  47. package/dist/init/templates/default/prop.md +45 -0
  48. package/dist/init/templates/default/rule.md +33 -0
  49. package/dist/init/templates/default/task.md +53 -0
  50. package/dist/init/templates/default/test.md +49 -0
  51. package/dist/pack/export_json.js +38 -0
  52. package/dist/pack/export_md.js +93 -0
  53. package/dist/pack/export_toon.js +7 -0
  54. package/dist/pack/export_xml.js +73 -0
  55. package/dist/pack/order.js +162 -0
  56. package/dist/pack/pack.js +181 -0
  57. package/dist/pack/types.js +2 -0
  58. package/dist/pack/verbose_core.js +23 -0
  59. package/dist/templates/loader.js +82 -0
  60. package/dist/util/argparse.js +154 -0
  61. package/dist/util/date.js +9 -0
  62. package/dist/util/errors.js +12 -0
  63. package/dist/util/filter.js +26 -0
  64. package/dist/util/output.js +50 -0
  65. package/dist/util/qid.js +54 -0
  66. package/dist/util/sort.js +40 -0
  67. package/package.json +18 -2
package/dist/cli.js CHANGED
@@ -1,12 +1,668 @@
1
1
  #!/usr/bin/env node
2
-
3
- const args = process.argv.slice(2);
4
- if (args.includes("--help") || args.length === 0) {
5
- console.log("mdkg - Markdown Knowledge Graph");
6
- console.log("\nUsage:");
7
- console.log(" mdkg <command> [options]");
8
- process.exit(0);
9
- }
10
-
11
- console.error("Unknown command. Use --help for usage.");
12
- process.exit(1);
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const argparse_1 = require("./util/argparse");
10
+ const index_1 = require("./commands/index");
11
+ const list_1 = require("./commands/list");
12
+ const search_1 = require("./commands/search");
13
+ const show_1 = require("./commands/show");
14
+ const pack_1 = require("./commands/pack");
15
+ const next_1 = require("./commands/next");
16
+ const validate_1 = require("./commands/validate");
17
+ const format_1 = require("./commands/format");
18
+ const checkpoint_1 = require("./commands/checkpoint");
19
+ const init_1 = require("./commands/init");
20
+ const new_1 = require("./commands/new");
21
+ const guide_1 = require("./commands/guide");
22
+ const workspace_1 = require("./commands/workspace");
23
+ const errors_1 = require("./util/errors");
24
+ function printGlobalOptions() {
25
+ console.log("\nGlobal options:");
26
+ console.log(" --root, -r <path> Run against a specific repo root");
27
+ console.log(" --help, -h Show help");
28
+ console.log(" --no-cache Bypass reading the index cache");
29
+ console.log(" --no-reindex Do not auto rebuild when cache is stale");
30
+ }
31
+ function printUsage() {
32
+ console.log("mdkg - Markdown Knowledge Graph");
33
+ console.log("\nUsage:");
34
+ console.log(" mdkg <command> [options]");
35
+ console.log("\nCommands:");
36
+ console.log(" init Initialize .mdkg scaffolding");
37
+ console.log(" guide Show the mdkg guide");
38
+ console.log(" new Create a node from templates");
39
+ console.log(" workspace Manage workspaces (ls/add/rm)");
40
+ console.log(" index Build the global index");
41
+ console.log(" show Show a node by id or qid");
42
+ console.log(" list List nodes with filters");
43
+ console.log(" search Search nodes by query");
44
+ console.log(" pack Generate a context pack");
45
+ console.log(" next Suggest the next work item");
46
+ console.log(" checkpoint Create a checkpoint node");
47
+ console.log(" validate Validate frontmatter + graph");
48
+ console.log(" format Normalize frontmatter");
49
+ console.log("\nQuickstart:");
50
+ console.log(" mdkg init --llm");
51
+ console.log(" mdkg index");
52
+ console.log(' mdkg new task "..." --status todo --priority 1');
53
+ console.log(" mdkg list --status todo");
54
+ console.log(" mdkg pack <id> --verbose");
55
+ console.log(" mdkg validate");
56
+ console.log("\nRun `mdkg help <command>` or `mdkg <command> --help` for details.");
57
+ printGlobalOptions();
58
+ }
59
+ function printInitHelp() {
60
+ console.log("Usage:");
61
+ console.log(" mdkg init [options]");
62
+ console.log("\nOptions:");
63
+ console.log(" --force Overwrite existing mdkg files");
64
+ console.log(" --agents Create AGENTS.md");
65
+ console.log(" --claude Create CLAUDE.md");
66
+ console.log(" --llm Create AGENTS.md and CLAUDE.md");
67
+ console.log(" --update-gitignore Append mdkg ignore entries");
68
+ console.log(" --update-npmignore Append mdkg ignore entries");
69
+ console.log(" --update-dockerignore Append mdkg ignore entries");
70
+ printGlobalOptions();
71
+ }
72
+ function printNewHelp() {
73
+ console.log("Usage:");
74
+ console.log(' mdkg new <type> "<title>" [options]');
75
+ console.log("\nTypes:");
76
+ console.log(" rule prd edd dec prop epic feat task bug checkpoint test");
77
+ console.log("\nOptions:");
78
+ console.log(" --ws <alias> Workspace alias (default root)");
79
+ console.log(" --status <status> Work item or decision status");
80
+ console.log(" --priority <0..9> Work item priority");
81
+ console.log(" --epic <id> Epic id");
82
+ console.log(" --parent <id> Parent id");
83
+ console.log(" --prev <id> Previous id");
84
+ console.log(" --next <id> Next id");
85
+ console.log(" --relates <id,id,...> Related ids");
86
+ console.log(" --blocked-by <id,id,...> Blockers");
87
+ console.log(" --blocks <id,id,...> Blocked items");
88
+ console.log(" --links <ref,ref,...> Link refs");
89
+ console.log(" --artifacts <ref,ref,...> Artifact refs");
90
+ console.log(" --refs <id,id,...> Non-edge refs");
91
+ console.log(" --aliases <text,text,...> Search aliases");
92
+ console.log(" --cases <id,id,...> Test case ids");
93
+ console.log(" --tags <tag,tag,...> Tags");
94
+ console.log(" --owners <owner,owner,...> Owners");
95
+ console.log(" --supersedes <dec-id> Decision supersedes");
96
+ console.log(" --template <set> Template set");
97
+ printGlobalOptions();
98
+ }
99
+ function printGuideHelp() {
100
+ console.log("Usage:");
101
+ console.log(" mdkg guide");
102
+ printGlobalOptions();
103
+ }
104
+ function printWorkspaceHelp() {
105
+ console.log("Usage:");
106
+ console.log(" mdkg workspace ls");
107
+ console.log(" mdkg workspace add <alias> <path> [--mdkg-dir <dir>]");
108
+ console.log(" mdkg workspace rm <alias>");
109
+ printGlobalOptions();
110
+ }
111
+ function printIndexHelp() {
112
+ console.log("Usage:");
113
+ console.log(" mdkg index [--tolerant]");
114
+ printGlobalOptions();
115
+ }
116
+ function printShowHelp() {
117
+ console.log("Usage:");
118
+ console.log(" mdkg show <id-or-qid> [--ws <alias>] [--body]");
119
+ printGlobalOptions();
120
+ }
121
+ function printListHelp() {
122
+ console.log("Usage:");
123
+ console.log(" mdkg list [--type <type>] [--status <status>] [--ws <alias>] [--epic <id>]");
124
+ console.log(" [--priority <n>] [--blocked]");
125
+ printGlobalOptions();
126
+ }
127
+ function printSearchHelp() {
128
+ console.log("Usage:");
129
+ console.log(' mdkg search "<query>" [--type <type>] [--status <status>] [--ws <alias>]');
130
+ printGlobalOptions();
131
+ }
132
+ function printPackHelp() {
133
+ console.log("Usage:");
134
+ console.log(" mdkg pack <id-or-qid> [-d <n>] [-e <keys>] [-v]");
135
+ console.log(" [-f md|json|toon|xml] [-o <path>] [-w <alias>]");
136
+ printGlobalOptions();
137
+ }
138
+ function printNextHelp() {
139
+ console.log("Usage:");
140
+ console.log(" mdkg next [<id-or-qid>] [--ws <alias>]");
141
+ printGlobalOptions();
142
+ }
143
+ function printCheckpointHelp() {
144
+ console.log("Usage:");
145
+ console.log(" mdkg checkpoint new <title> [--ws <alias>]");
146
+ console.log(" [--relates <id,id,...>] [--scope <id,id,...>]");
147
+ printGlobalOptions();
148
+ }
149
+ function printValidateHelp() {
150
+ console.log("Usage:");
151
+ console.log(" mdkg validate [--out <path>] [--quiet]");
152
+ printGlobalOptions();
153
+ }
154
+ function printFormatHelp() {
155
+ console.log("Usage:");
156
+ console.log(" mdkg format");
157
+ printGlobalOptions();
158
+ }
159
+ function printCommandHelp(command) {
160
+ switch ((command ?? "").toLowerCase()) {
161
+ case "":
162
+ case "help":
163
+ printUsage();
164
+ return;
165
+ case "init":
166
+ printInitHelp();
167
+ return;
168
+ case "guide":
169
+ printGuideHelp();
170
+ return;
171
+ case "new":
172
+ printNewHelp();
173
+ return;
174
+ case "workspace":
175
+ printWorkspaceHelp();
176
+ return;
177
+ case "index":
178
+ printIndexHelp();
179
+ return;
180
+ case "show":
181
+ printShowHelp();
182
+ return;
183
+ case "list":
184
+ printListHelp();
185
+ return;
186
+ case "search":
187
+ printSearchHelp();
188
+ return;
189
+ case "pack":
190
+ printPackHelp();
191
+ return;
192
+ case "next":
193
+ printNextHelp();
194
+ return;
195
+ case "checkpoint":
196
+ printCheckpointHelp();
197
+ return;
198
+ case "validate":
199
+ printValidateHelp();
200
+ return;
201
+ case "format":
202
+ printFormatHelp();
203
+ return;
204
+ default:
205
+ printUsage();
206
+ }
207
+ }
208
+ function printRootError(root) {
209
+ console.error("mdkg must be run from a repo root with .mdkg/config.json");
210
+ console.error(`root checked: ${root}`);
211
+ console.error("hint: run from the repo root, pass --root <path>, or run `mdkg init`");
212
+ }
213
+ function hasConfig(root) {
214
+ const configPath = path_1.default.join(root, ".mdkg", "config.json");
215
+ return fs_1.default.existsSync(configPath);
216
+ }
217
+ function requireFlagValue(flag, value) {
218
+ if (value === undefined) {
219
+ return undefined;
220
+ }
221
+ if (value === true) {
222
+ throw new errors_1.UsageError(`${flag} requires a value`);
223
+ }
224
+ const normalized = String(value);
225
+ if (normalized.trim().length === 0) {
226
+ throw new errors_1.UsageError(`${flag} requires a value`);
227
+ }
228
+ return normalized;
229
+ }
230
+ function parseBooleanFlag(flag, value) {
231
+ if (value === undefined) {
232
+ return false;
233
+ }
234
+ if (value === true) {
235
+ return true;
236
+ }
237
+ if (value === "true") {
238
+ return true;
239
+ }
240
+ if (value === "false") {
241
+ return false;
242
+ }
243
+ throw new errors_1.UsageError(`${flag} must be true or false`);
244
+ }
245
+ function parseNumberFlag(flag, value) {
246
+ if (value === undefined) {
247
+ return undefined;
248
+ }
249
+ if (value === true) {
250
+ throw new errors_1.UsageError(`${flag} requires a value`);
251
+ }
252
+ const parsed = Number.parseInt(String(value), 10);
253
+ if (!Number.isInteger(parsed)) {
254
+ throw new errors_1.UsageError(`${flag} must be an integer`);
255
+ }
256
+ return parsed;
257
+ }
258
+ function parseEdgesFlag(value) {
259
+ if (value === undefined) {
260
+ return undefined;
261
+ }
262
+ if (value === true) {
263
+ throw new errors_1.UsageError("--edges requires a value");
264
+ }
265
+ const raw = String(value)
266
+ .split(",")
267
+ .map((item) => item.trim())
268
+ .filter(Boolean);
269
+ return raw.length > 0 ? raw : undefined;
270
+ }
271
+ function handleCommandError(err) {
272
+ const message = err instanceof Error ? err.message : String(err);
273
+ if (err instanceof errors_1.UsageError) {
274
+ console.error(message);
275
+ printUsage();
276
+ process.exit(1);
277
+ }
278
+ if (err instanceof errors_1.ValidationError) {
279
+ console.error(message);
280
+ process.exit(2);
281
+ }
282
+ if (err instanceof errors_1.NotFoundError) {
283
+ console.error(message);
284
+ process.exit(3);
285
+ }
286
+ console.error(message);
287
+ process.exit(4);
288
+ }
289
+ function main() {
290
+ const parsed = (0, argparse_1.parseArgs)(process.argv.slice(2));
291
+ if (parsed.error) {
292
+ console.error(parsed.error);
293
+ printUsage();
294
+ process.exit(1);
295
+ }
296
+ if (parsed.help) {
297
+ printCommandHelp(parsed.positionals[0]);
298
+ process.exit(0);
299
+ }
300
+ const command = (parsed.positionals[0] ?? "").toLowerCase();
301
+ if (!command) {
302
+ printUsage();
303
+ process.exit(0);
304
+ }
305
+ if (command === "help") {
306
+ printCommandHelp(parsed.positionals[1]);
307
+ process.exit(0);
308
+ }
309
+ const root = parsed.root ? path_1.default.resolve(parsed.root) : process.cwd();
310
+ if (command !== "init" && command !== "help") {
311
+ if (!hasConfig(root)) {
312
+ printRootError(root);
313
+ process.exit(1);
314
+ }
315
+ }
316
+ switch (command) {
317
+ case "init": {
318
+ const force = parseBooleanFlag("--force", parsed.flags["--force"]);
319
+ const createAgents = parseBooleanFlag("--agents", parsed.flags["--agents"]);
320
+ const createClaude = parseBooleanFlag("--claude", parsed.flags["--claude"]);
321
+ const createLlm = parseBooleanFlag("--llm", parsed.flags["--llm"]);
322
+ const updateGitignore = parseBooleanFlag("--update-gitignore", parsed.flags["--update-gitignore"]);
323
+ const updateNpmignore = parseBooleanFlag("--update-npmignore", parsed.flags["--update-npmignore"]);
324
+ const updateDockerignore = parseBooleanFlag("--update-dockerignore", parsed.flags["--update-dockerignore"]);
325
+ try {
326
+ (0, init_1.runInitCommand)({
327
+ root,
328
+ force,
329
+ updateGitignore,
330
+ updateNpmignore,
331
+ updateDockerignore,
332
+ createAgents,
333
+ createClaude,
334
+ createLlm,
335
+ });
336
+ }
337
+ catch (err) {
338
+ handleCommandError(err);
339
+ }
340
+ process.exit(0);
341
+ }
342
+ case "guide": {
343
+ try {
344
+ (0, guide_1.runGuideCommand)({ root });
345
+ }
346
+ catch (err) {
347
+ handleCommandError(err);
348
+ }
349
+ process.exit(0);
350
+ }
351
+ case "index": {
352
+ const tolerant = Boolean(parsed.flags["--tolerant"]);
353
+ try {
354
+ (0, index_1.runIndexCommand)({ root, tolerant });
355
+ }
356
+ catch (err) {
357
+ handleCommandError(err);
358
+ }
359
+ process.exit(0);
360
+ }
361
+ case "new": {
362
+ const type = parsed.positionals[1];
363
+ const title = parsed.positionals.slice(2).join(" ");
364
+ if (!type || !title) {
365
+ handleCommandError(new errors_1.UsageError("new requires a type and title"));
366
+ }
367
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
368
+ const status = requireFlagValue("--status", parsed.flags["--status"]);
369
+ const priority = parseNumberFlag("--priority", parsed.flags["--priority"]);
370
+ const epic = requireFlagValue("--epic", parsed.flags["--epic"]);
371
+ const parent = requireFlagValue("--parent", parsed.flags["--parent"]);
372
+ const prev = requireFlagValue("--prev", parsed.flags["--prev"]);
373
+ const next = requireFlagValue("--next", parsed.flags["--next"]);
374
+ const relates = requireFlagValue("--relates", parsed.flags["--relates"]);
375
+ const blockedBy = requireFlagValue("--blocked-by", parsed.flags["--blocked-by"]);
376
+ const blocks = requireFlagValue("--blocks", parsed.flags["--blocks"]);
377
+ const links = requireFlagValue("--links", parsed.flags["--links"]);
378
+ const artifacts = requireFlagValue("--artifacts", parsed.flags["--artifacts"]);
379
+ const refs = requireFlagValue("--refs", parsed.flags["--refs"]);
380
+ const aliases = requireFlagValue("--aliases", parsed.flags["--aliases"]);
381
+ const cases = requireFlagValue("--cases", parsed.flags["--cases"]);
382
+ const tags = requireFlagValue("--tags", parsed.flags["--tags"]);
383
+ const owners = requireFlagValue("--owners", parsed.flags["--owners"]);
384
+ const supersedes = requireFlagValue("--supersedes", parsed.flags["--supersedes"]);
385
+ const template = requireFlagValue("--template", parsed.flags["--template"]);
386
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
387
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
388
+ try {
389
+ (0, new_1.runNewCommand)({
390
+ root,
391
+ type,
392
+ title,
393
+ ws,
394
+ status,
395
+ priority,
396
+ epic,
397
+ parent,
398
+ prev,
399
+ next,
400
+ relates,
401
+ blockedBy,
402
+ blocks,
403
+ links,
404
+ artifacts,
405
+ refs,
406
+ aliases,
407
+ cases,
408
+ tags,
409
+ owners,
410
+ supersedes,
411
+ template,
412
+ noCache,
413
+ noReindex,
414
+ });
415
+ }
416
+ catch (err) {
417
+ handleCommandError(err);
418
+ }
419
+ process.exit(0);
420
+ }
421
+ case "workspace": {
422
+ const subcommand = (parsed.positionals[1] ?? "").toLowerCase();
423
+ switch (subcommand) {
424
+ case "ls": {
425
+ if (parsed.positionals.length > 2) {
426
+ handleCommandError(new errors_1.UsageError("workspace ls takes no arguments"));
427
+ }
428
+ try {
429
+ (0, workspace_1.runWorkspaceListCommand)({ root });
430
+ }
431
+ catch (err) {
432
+ handleCommandError(err);
433
+ }
434
+ process.exit(0);
435
+ }
436
+ case "add": {
437
+ const alias = parsed.positionals[2];
438
+ const workspacePath = parsed.positionals[3];
439
+ if (!alias || !workspacePath) {
440
+ handleCommandError(new errors_1.UsageError("workspace add requires <alias> <path>"));
441
+ }
442
+ const mdkgDir = requireFlagValue("--mdkg-dir", parsed.flags["--mdkg-dir"]);
443
+ try {
444
+ (0, workspace_1.runWorkspaceAddCommand)({ root, alias, workspacePath, mdkgDir });
445
+ }
446
+ catch (err) {
447
+ handleCommandError(err);
448
+ }
449
+ process.exit(0);
450
+ }
451
+ case "rm": {
452
+ const alias = parsed.positionals[2];
453
+ if (!alias || parsed.positionals.length > 3) {
454
+ handleCommandError(new errors_1.UsageError("workspace rm requires <alias>"));
455
+ }
456
+ try {
457
+ (0, workspace_1.runWorkspaceRemoveCommand)({ root, alias });
458
+ }
459
+ catch (err) {
460
+ handleCommandError(err);
461
+ }
462
+ process.exit(0);
463
+ }
464
+ default: {
465
+ handleCommandError(new errors_1.UsageError("workspace requires ls/add/rm"));
466
+ }
467
+ }
468
+ process.exit(0);
469
+ }
470
+ case "show": {
471
+ const id = parsed.positionals[1];
472
+ if (!id || parsed.positionals.length > 2) {
473
+ handleCommandError(new errors_1.UsageError("show requires a single id"));
474
+ }
475
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
476
+ const includeBody = parseBooleanFlag("--body", parsed.flags["--body"]);
477
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
478
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
479
+ try {
480
+ (0, show_1.runShowCommand)({
481
+ root,
482
+ id,
483
+ ws,
484
+ includeBody,
485
+ noCache,
486
+ noReindex,
487
+ });
488
+ }
489
+ catch (err) {
490
+ handleCommandError(err);
491
+ }
492
+ process.exit(0);
493
+ }
494
+ case "list": {
495
+ if (parsed.positionals.length > 1) {
496
+ handleCommandError(new errors_1.UsageError("list does not accept positional arguments"));
497
+ }
498
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
499
+ const type = requireFlagValue("--type", parsed.flags["--type"]);
500
+ const status = requireFlagValue("--status", parsed.flags["--status"]);
501
+ const epic = requireFlagValue("--epic", parsed.flags["--epic"]);
502
+ const priority = parseNumberFlag("--priority", parsed.flags["--priority"]);
503
+ const blocked = parseBooleanFlag("--blocked", parsed.flags["--blocked"]);
504
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
505
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
506
+ try {
507
+ (0, list_1.runListCommand)({
508
+ root,
509
+ ws,
510
+ type,
511
+ status,
512
+ epic,
513
+ priority,
514
+ blocked,
515
+ noCache,
516
+ noReindex,
517
+ });
518
+ }
519
+ catch (err) {
520
+ handleCommandError(err);
521
+ }
522
+ process.exit(0);
523
+ }
524
+ case "search": {
525
+ if (parsed.positionals.length < 2) {
526
+ handleCommandError(new errors_1.UsageError("search requires a query"));
527
+ }
528
+ const query = parsed.positionals.slice(1).join(" ");
529
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
530
+ const type = requireFlagValue("--type", parsed.flags["--type"]);
531
+ const status = requireFlagValue("--status", parsed.flags["--status"]);
532
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
533
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
534
+ try {
535
+ (0, search_1.runSearchCommand)({
536
+ root,
537
+ query,
538
+ ws,
539
+ type,
540
+ status,
541
+ noCache,
542
+ noReindex,
543
+ });
544
+ }
545
+ catch (err) {
546
+ handleCommandError(err);
547
+ }
548
+ process.exit(0);
549
+ }
550
+ case "pack": {
551
+ const id = parsed.positionals[1];
552
+ if (!id || parsed.positionals.length > 2) {
553
+ handleCommandError(new errors_1.UsageError("pack requires a single id"));
554
+ }
555
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
556
+ const depth = parseNumberFlag("--depth", parsed.flags["--depth"]);
557
+ const edges = parseEdgesFlag(parsed.flags["--edges"]);
558
+ const verbose = parseBooleanFlag("--verbose", parsed.flags["--verbose"]);
559
+ const format = requireFlagValue("--format", parsed.flags["--format"]);
560
+ const out = requireFlagValue("--out", parsed.flags["--out"]);
561
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
562
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
563
+ try {
564
+ (0, pack_1.runPackCommand)({
565
+ root,
566
+ id,
567
+ ws,
568
+ depth,
569
+ edges,
570
+ verbose,
571
+ format,
572
+ out,
573
+ noCache,
574
+ noReindex,
575
+ });
576
+ }
577
+ catch (err) {
578
+ handleCommandError(err);
579
+ }
580
+ process.exit(0);
581
+ }
582
+ case "next": {
583
+ if (parsed.positionals.length > 2) {
584
+ handleCommandError(new errors_1.UsageError("next accepts at most one id"));
585
+ }
586
+ const id = parsed.positionals[1];
587
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
588
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
589
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
590
+ try {
591
+ (0, next_1.runNextCommand)({
592
+ root,
593
+ id,
594
+ ws,
595
+ noCache,
596
+ noReindex,
597
+ });
598
+ }
599
+ catch (err) {
600
+ handleCommandError(err);
601
+ }
602
+ process.exit(0);
603
+ }
604
+ case "checkpoint": {
605
+ const sub = (parsed.positionals[1] ?? "").toLowerCase();
606
+ if (!sub) {
607
+ handleCommandError(new errors_1.UsageError("checkpoint requires a subcommand"));
608
+ }
609
+ if (sub !== "new") {
610
+ handleCommandError(new errors_1.UsageError(`unknown checkpoint subcommand: ${sub}`));
611
+ }
612
+ const title = parsed.positionals.slice(2).join(" ");
613
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
614
+ const relates = requireFlagValue("--relates", parsed.flags["--relates"]);
615
+ const scope = requireFlagValue("--scope", parsed.flags["--scope"]);
616
+ const status = requireFlagValue("--status", parsed.flags["--status"]);
617
+ const priority = parseNumberFlag("--priority", parsed.flags["--priority"]);
618
+ const template = requireFlagValue("--template", parsed.flags["--template"]);
619
+ try {
620
+ (0, checkpoint_1.runCheckpointNewCommand)({
621
+ root,
622
+ title,
623
+ ws,
624
+ relates,
625
+ scope,
626
+ status,
627
+ priority,
628
+ template,
629
+ });
630
+ }
631
+ catch (err) {
632
+ handleCommandError(err);
633
+ }
634
+ process.exit(0);
635
+ }
636
+ case "validate": {
637
+ if (parsed.positionals.length > 1) {
638
+ handleCommandError(new errors_1.UsageError("validate does not accept positional arguments"));
639
+ }
640
+ const out = requireFlagValue("--out", parsed.flags["--out"]);
641
+ const quiet = parseBooleanFlag("--quiet", parsed.flags["--quiet"]);
642
+ try {
643
+ (0, validate_1.runValidateCommand)({ root, out, quiet });
644
+ }
645
+ catch (err) {
646
+ handleCommandError(err);
647
+ }
648
+ process.exit(0);
649
+ }
650
+ case "format": {
651
+ if (parsed.positionals.length > 1) {
652
+ handleCommandError(new errors_1.UsageError("format does not accept positional arguments"));
653
+ }
654
+ try {
655
+ (0, format_1.runFormatCommand)({ root });
656
+ }
657
+ catch (err) {
658
+ handleCommandError(err);
659
+ }
660
+ process.exit(0);
661
+ }
662
+ default:
663
+ console.error(`Unknown command: ${command}`);
664
+ printUsage();
665
+ process.exit(1);
666
+ }
667
+ }
668
+ main();