clawvault 2.5.3 → 2.6.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.
Files changed (95) hide show
  1. package/README.md +159 -159
  2. package/bin/clawvault.js +111 -111
  3. package/bin/command-registration.test.js +166 -166
  4. package/bin/command-runtime.js +93 -93
  5. package/bin/command-runtime.test.js +154 -154
  6. package/bin/help-contract.test.js +39 -39
  7. package/bin/register-config-commands.js +153 -153
  8. package/bin/register-config-route-commands.test.js +121 -121
  9. package/bin/register-core-commands.js +237 -237
  10. package/bin/register-kanban-commands.js +56 -56
  11. package/bin/register-kanban-commands.test.js +83 -83
  12. package/bin/register-maintenance-commands.js +282 -282
  13. package/bin/register-project-commands.js +209 -209
  14. package/bin/register-project-commands.test.js +206 -206
  15. package/bin/register-query-commands.js +317 -317
  16. package/bin/register-query-commands.test.js +65 -65
  17. package/bin/register-resilience-commands.js +182 -182
  18. package/bin/register-resilience-commands.test.js +81 -81
  19. package/bin/register-route-commands.js +114 -114
  20. package/bin/register-session-lifecycle-commands.js +206 -206
  21. package/bin/register-tailscale-commands.js +106 -106
  22. package/bin/register-task-commands.js +348 -348
  23. package/bin/register-task-commands.test.js +69 -69
  24. package/bin/register-template-commands.js +75 -72
  25. package/bin/register-template-commands.test.js +87 -0
  26. package/bin/register-vault-operations-commands.js +300 -300
  27. package/bin/test-helpers/cli-command-fixtures.js +119 -119
  28. package/dashboard/lib/graph-diff.js +104 -104
  29. package/dashboard/lib/graph-diff.test.js +75 -75
  30. package/dashboard/lib/vault-parser.js +556 -556
  31. package/dashboard/lib/vault-parser.test.js +254 -254
  32. package/dashboard/public/app.js +796 -796
  33. package/dashboard/public/index.html +52 -52
  34. package/dashboard/public/styles.css +221 -221
  35. package/dashboard/server.js +374 -374
  36. package/dist/{chunk-J5EMBUPK.js → chunk-4OXMU5S2.js} +1 -1
  37. package/dist/{chunk-3FP5BJ42.js → chunk-4QYGFWRM.js} +1 -1
  38. package/dist/{chunk-4IV3R2F5.js → chunk-4TE4JMLA.js} +1 -1
  39. package/dist/{chunk-5GZFTAL7.js → chunk-AZYOKJYC.js} +128 -42
  40. package/dist/{chunk-FG6RJMCN.js → chunk-HA5M6KJB.js} +4 -4
  41. package/dist/{chunk-IZEY5S74.js → chunk-IEVLHNLU.js} +1 -1
  42. package/dist/{chunk-CLE2HHNT.js → chunk-IVRIKYFE.js} +18 -11
  43. package/dist/{chunk-AY4PGUVL.js → chunk-KL4NAOMO.js} +1 -1
  44. package/dist/{chunk-O7XHXF7F.js → chunk-MAKNAHAW.js} +4 -4
  45. package/dist/{chunk-OSMS7QIG.js → chunk-ME37YNW3.js} +2 -2
  46. package/dist/chunk-MFAWT5O5.js +301 -0
  47. package/dist/{chunk-TPDH3JPP.js → chunk-PBEE567J.js} +1 -1
  48. package/dist/{chunk-S2IG7VNM.js → chunk-Q2J5YTUF.js} +2 -2
  49. package/dist/{chunk-IOALNTAN.js → chunk-QWQ3TIKS.js} +103 -29
  50. package/dist/{chunk-YCVDVI5B.js → chunk-R2MIW5G7.js} +1 -1
  51. package/dist/{chunk-M25QVSJM.js → chunk-RVYA52PY.js} +1 -1
  52. package/dist/{chunk-NZ4ZZNSR.js → chunk-THRJVD4L.js} +1 -1
  53. package/dist/{chunk-4GBPTBFJ.js → chunk-TIGW564L.js} +1 -1
  54. package/dist/{chunk-LMEMZGUV.js → chunk-UEOUADMO.js} +3 -3
  55. package/dist/{chunk-GFJ3LIIB.js → chunk-XAVB4GB4.js} +1 -1
  56. package/dist/cli/index.js +15 -13
  57. package/dist/commands/backlog.js +3 -1
  58. package/dist/commands/blocked.js +3 -1
  59. package/dist/commands/canvas.js +3 -1
  60. package/dist/commands/context.js +3 -3
  61. package/dist/commands/doctor.js +9 -7
  62. package/dist/commands/embed.js +2 -2
  63. package/dist/commands/kanban.js +4 -2
  64. package/dist/commands/observe.js +7 -5
  65. package/dist/commands/project.js +5 -3
  66. package/dist/commands/rebuild.js +6 -4
  67. package/dist/commands/replay.js +6 -4
  68. package/dist/commands/setup.js +2 -2
  69. package/dist/commands/sleep.js +7 -5
  70. package/dist/commands/status.js +8 -6
  71. package/dist/commands/tailscale.js +3 -3
  72. package/dist/commands/task.js +4 -2
  73. package/dist/commands/template.d.ts +10 -1
  74. package/dist/commands/template.js +47 -55
  75. package/dist/commands/wake.js +2 -2
  76. package/dist/index.js +23 -22
  77. package/dist/lib/project-utils.js +4 -2
  78. package/dist/lib/tailscale.js +2 -2
  79. package/dist/lib/task-utils.d.ts +14 -13
  80. package/dist/lib/task-utils.js +3 -1
  81. package/dist/lib/template-engine.d.ts +1 -0
  82. package/dist/lib/webdav.js +1 -1
  83. package/hooks/clawvault/HOOK.md +83 -83
  84. package/hooks/clawvault/handler.js +816 -816
  85. package/hooks/clawvault/handler.test.js +263 -263
  86. package/package.json +94 -94
  87. package/templates/checkpoint.md +34 -19
  88. package/templates/daily-note.md +34 -19
  89. package/templates/daily.md +34 -19
  90. package/templates/decision.md +39 -17
  91. package/templates/handoff.md +34 -19
  92. package/templates/lesson.md +31 -16
  93. package/templates/person.md +37 -19
  94. package/templates/project.md +84 -23
  95. package/templates/task.md +81 -0
package/README.md CHANGED
@@ -1,159 +1,159 @@
1
- # ClawVault 🐘
2
-
3
- Structured memory system for AI agents and operators: typed markdown memory, graph-aware context, task/project primitives, Obsidian views, and OpenClaw hook integration.
4
-
5
- [![npm](https://img.shields.io/npm/v/clawvault)](https://www.npmjs.com/package/clawvault)
6
-
7
- > Local-first. Markdown-first. Built to survive long-running autonomous work.
8
-
9
- ## Requirements
10
-
11
- - Node.js 18+
12
- - `qmd` installed and available on `PATH`
13
-
14
- ClawVault currently relies on `qmd` for core vault/query flows. Install it before first use.
15
-
16
- ## Install
17
-
18
- ```bash
19
- npm install -g clawvault
20
- ```
21
-
22
- ## 5-Minute Setup
23
-
24
- ```bash
25
- # 1) Create or initialize a vault
26
- clawvault init ~/memory --name my-brain
27
-
28
- # 2) Optional vault bootstrap for Obsidian
29
- clawvault setup --theme neural --canvas
30
-
31
- # 3) Verify OpenClaw compatibility in this environment
32
- clawvault compat
33
- ```
34
-
35
- ## OpenClaw Setup (Canonical)
36
-
37
- If you want hook-based lifecycle integration, use this sequence:
38
-
39
- ```bash
40
- # Install CLI
41
- npm install -g clawvault
42
-
43
- # Install and enable hook pack
44
- openclaw hooks install clawvault
45
- openclaw hooks enable clawvault
46
-
47
- # Verify
48
- openclaw hooks list --verbose
49
- openclaw hooks info clawvault
50
- openclaw hooks check
51
- clawvault compat
52
- ```
53
-
54
- Important:
55
-
56
- - `clawhub install clawvault` installs skill guidance, but does not replace hook-pack installation.
57
- - After enabling hooks, restart the OpenClaw gateway process so hook registration reloads.
58
-
59
- ## Minimal AGENTS.md Additions
60
-
61
- Append these to your existing memory workflow. Do not replace your full prompt setup:
62
-
63
- ```markdown
64
- ## ClawVault
65
- - Run `clawvault wake` at session start.
66
- - Run `clawvault checkpoint` during heavy work.
67
- - Run `clawvault sleep "summary" --next "next steps"` before ending.
68
- - Use `clawvault context "<task>"` or `clawvault inject "<message>"` before complex decisions.
69
- ```
70
-
71
- ## Real CLI Surface (Current)
72
-
73
- Core:
74
-
75
- - `init`, `setup`, `store`, `capture`
76
- - `remember`, `list`, `get`, `stats`, `reindex`, `sync`
77
-
78
- Context + memory:
79
-
80
- - `search`, `vsearch`, `context`, `inject`
81
- - `observe`, `reflect`, `session-recap`
82
- - `graph`, `entities`, `link`, `embed`
83
-
84
- Resilience:
85
-
86
- - `wake`, `sleep`, `handoff`, `recap`
87
- - `checkpoint`, `recover`, `status`, `clean-exit`, `repair-session`
88
- - `compat`, `doctor`
89
-
90
- Execution primitives:
91
-
92
- - `task ...`, `backlog ...`, `blocked`, `project ...`, `kanban ...`
93
- - `canvas` (generates default `dashboard.canvas`)
94
-
95
- Networking:
96
-
97
- - `tailscale-status`, `tailscale-sync`, `tailscale-serve`, `tailscale-discover`
98
-
99
- ## Quick Usage
100
-
101
- ```bash
102
- # Store and retrieve memory
103
- clawvault remember decision "Use PostgreSQL" --content "Chosen for JSONB and reliability"
104
- clawvault search "postgresql"
105
- clawvault vsearch "what did we decide about storage"
106
-
107
- # Session lifecycle
108
- clawvault wake
109
- clawvault checkpoint --working-on "auth rollout" --focus "token refresh edge cases"
110
- clawvault sleep "finished auth rollout plan" --next "implement migration"
111
-
112
- # Work management
113
- clawvault task add "Ship v2 onboarding" --owner agent --project core --priority high
114
- clawvault blocked
115
- clawvault project list --status active
116
- clawvault kanban sync
117
-
118
- # Obsidian projection
119
- clawvault canvas
120
- ```
121
-
122
- ## Obsidian Integration
123
-
124
- - Setup can generate:
125
- - graph theme/snippet config (`--theme neural|minimal|none`)
126
- - Bases views (`all-tasks.base`, `blocked.base`, `by-project.base`, `by-owner.base`, `backlog.base`)
127
- - default canvas (`dashboard.canvas`) via `--canvas` or `clawvault canvas`
128
- - Kanban round-trip:
129
- - export: `clawvault kanban sync`
130
- - import lane changes back to task metadata: `clawvault kanban import`
131
-
132
- ## Tailscale + WebDAV
133
-
134
- ClawVault can serve vault content for sync over Tailscale and exposes WebDAV under `/webdav` for mobile-oriented workflows.
135
-
136
- ```bash
137
- clawvault tailscale-status
138
- clawvault tailscale-serve --vault ~/memory
139
- clawvault tailscale-discover
140
- ```
141
-
142
- ## Troubleshooting
143
-
144
- - Hook not found after enable:
145
- - run `openclaw hooks install clawvault` first
146
- - then `openclaw hooks enable clawvault`
147
- - restart gateway
148
- - verify with `openclaw hooks list --verbose`
149
- - `qmd` errors:
150
- - ensure `qmd --version` works from same shell
151
- - rerun `clawvault setup` after qmd install
152
- - OpenClaw integration drift:
153
- - run `clawvault compat`
154
- - Session transcript corruption:
155
- - run `clawvault repair-session --dry-run` then `clawvault repair-session`
156
-
157
- ## License
158
-
159
- MIT
1
+ # ClawVault 🐘
2
+
3
+ Structured memory system for AI agents and operators: typed markdown memory, graph-aware context, task/project primitives, Obsidian views, and OpenClaw hook integration.
4
+
5
+ [![npm](https://img.shields.io/npm/v/clawvault)](https://www.npmjs.com/package/clawvault)
6
+
7
+ > Local-first. Markdown-first. Built to survive long-running autonomous work.
8
+
9
+ ## Requirements
10
+
11
+ - Node.js 18+
12
+ - `qmd` installed and available on `PATH`
13
+
14
+ ClawVault currently relies on `qmd` for core vault/query flows. Install it before first use.
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ npm install -g clawvault
20
+ ```
21
+
22
+ ## 5-Minute Setup
23
+
24
+ ```bash
25
+ # 1) Create or initialize a vault
26
+ clawvault init ~/memory --name my-brain
27
+
28
+ # 2) Optional vault bootstrap for Obsidian
29
+ clawvault setup --theme neural --canvas
30
+
31
+ # 3) Verify OpenClaw compatibility in this environment
32
+ clawvault compat
33
+ ```
34
+
35
+ ## OpenClaw Setup (Canonical)
36
+
37
+ If you want hook-based lifecycle integration, use this sequence:
38
+
39
+ ```bash
40
+ # Install CLI
41
+ npm install -g clawvault
42
+
43
+ # Install and enable hook pack
44
+ openclaw hooks install clawvault
45
+ openclaw hooks enable clawvault
46
+
47
+ # Verify
48
+ openclaw hooks list --verbose
49
+ openclaw hooks info clawvault
50
+ openclaw hooks check
51
+ clawvault compat
52
+ ```
53
+
54
+ Important:
55
+
56
+ - `clawhub install clawvault` installs skill guidance, but does not replace hook-pack installation.
57
+ - After enabling hooks, restart the OpenClaw gateway process so hook registration reloads.
58
+
59
+ ## Minimal AGENTS.md Additions
60
+
61
+ Append these to your existing memory workflow. Do not replace your full prompt setup:
62
+
63
+ ```markdown
64
+ ## ClawVault
65
+ - Run `clawvault wake` at session start.
66
+ - Run `clawvault checkpoint` during heavy work.
67
+ - Run `clawvault sleep "summary" --next "next steps"` before ending.
68
+ - Use `clawvault context "<task>"` or `clawvault inject "<message>"` before complex decisions.
69
+ ```
70
+
71
+ ## Real CLI Surface (Current)
72
+
73
+ Core:
74
+
75
+ - `init`, `setup`, `store`, `capture`
76
+ - `remember`, `list`, `get`, `stats`, `reindex`, `sync`
77
+
78
+ Context + memory:
79
+
80
+ - `search`, `vsearch`, `context`, `inject`
81
+ - `observe`, `reflect`, `session-recap`
82
+ - `graph`, `entities`, `link`, `embed`
83
+
84
+ Resilience:
85
+
86
+ - `wake`, `sleep`, `handoff`, `recap`
87
+ - `checkpoint`, `recover`, `status`, `clean-exit`, `repair-session`
88
+ - `compat`, `doctor`
89
+
90
+ Execution primitives:
91
+
92
+ - `task ...`, `backlog ...`, `blocked`, `project ...`, `kanban ...`
93
+ - `canvas` (generates default `dashboard.canvas`)
94
+
95
+ Networking:
96
+
97
+ - `tailscale-status`, `tailscale-sync`, `tailscale-serve`, `tailscale-discover`
98
+
99
+ ## Quick Usage
100
+
101
+ ```bash
102
+ # Store and retrieve memory
103
+ clawvault remember decision "Use PostgreSQL" --content "Chosen for JSONB and reliability"
104
+ clawvault search "postgresql"
105
+ clawvault vsearch "what did we decide about storage"
106
+
107
+ # Session lifecycle
108
+ clawvault wake
109
+ clawvault checkpoint --working-on "auth rollout" --focus "token refresh edge cases"
110
+ clawvault sleep "finished auth rollout plan" --next "implement migration"
111
+
112
+ # Work management
113
+ clawvault task add "Ship v2 onboarding" --owner agent --project core --priority high
114
+ clawvault blocked
115
+ clawvault project list --status active
116
+ clawvault kanban sync
117
+
118
+ # Obsidian projection
119
+ clawvault canvas
120
+ ```
121
+
122
+ ## Obsidian Integration
123
+
124
+ - Setup can generate:
125
+ - graph theme/snippet config (`--theme neural|minimal|none`)
126
+ - Bases views (`all-tasks.base`, `blocked.base`, `by-project.base`, `by-owner.base`, `backlog.base`)
127
+ - default canvas (`dashboard.canvas`) via `--canvas` or `clawvault canvas`
128
+ - Kanban round-trip:
129
+ - export: `clawvault kanban sync`
130
+ - import lane changes back to task metadata: `clawvault kanban import`
131
+
132
+ ## Tailscale + WebDAV
133
+
134
+ ClawVault can serve vault content for sync over Tailscale and exposes WebDAV under `/webdav` for mobile-oriented workflows.
135
+
136
+ ```bash
137
+ clawvault tailscale-status
138
+ clawvault tailscale-serve --vault ~/memory
139
+ clawvault tailscale-discover
140
+ ```
141
+
142
+ ## Troubleshooting
143
+
144
+ - Hook not found after enable:
145
+ - run `openclaw hooks install clawvault` first
146
+ - then `openclaw hooks enable clawvault`
147
+ - restart gateway
148
+ - verify with `openclaw hooks list --verbose`
149
+ - `qmd` errors:
150
+ - ensure `qmd --version` works from same shell
151
+ - rerun `clawvault setup` after qmd install
152
+ - OpenClaw integration drift:
153
+ - run `clawvault compat`
154
+ - Session transcript corruption:
155
+ - run `clawvault repair-session --dry-run` then `clawvault repair-session`
156
+
157
+ ## License
158
+
159
+ MIT
package/bin/clawvault.js CHANGED
@@ -1,112 +1,112 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * ClawVault CLI 🐘
5
- * An elephant never forgets.
6
- */
7
-
8
- import { Command } from 'commander';
9
- import chalk from 'chalk';
10
- import * as fs from 'fs';
11
- import * as path from 'path';
12
- import { registerMaintenanceCommands } from './register-maintenance-commands.js';
13
- import { registerCoreCommands } from './register-core-commands.js';
14
- import { registerQueryCommands } from './register-query-commands.js';
15
- import { registerResilienceCommands } from './register-resilience-commands.js';
16
- import { registerSessionLifecycleCommands } from './register-session-lifecycle-commands.js';
17
- import { registerTemplateCommands } from './register-template-commands.js';
18
- import { registerVaultOperationsCommands } from './register-vault-operations-commands.js';
19
- import { registerConfigCommands } from './register-config-commands.js';
20
- import { registerRouteCommands } from './register-route-commands.js';
21
- import { registerKanbanCommands } from './register-kanban-commands.js';
22
- import { registerProjectCommands } from './register-project-commands.js';
23
-
24
- import { registerTaskCommands } from './register-task-commands.js';
25
-
26
- import { registerTailscaleCommands } from './register-tailscale-commands.js';
27
- import {
28
- getVault,
29
- resolveVaultPath,
30
- runQmd,
31
- printQmdMissing,
32
- QmdUnavailableError
33
- } from './command-runtime.js';
34
- import {
35
- createVault
36
- } from '../dist/index.js';
37
-
38
- const program = new Command();
39
-
40
- const CLI_VERSION = (() => {
41
- try {
42
- const pkgUrl = new URL('../package.json', import.meta.url);
43
- const pkg = JSON.parse(fs.readFileSync(pkgUrl, 'utf-8'));
44
- return pkg.version || '0.0.0';
45
- } catch {
46
- return '0.0.0';
47
- }
48
- })();
49
-
50
- program
51
- .name('clawvault')
52
- .description('🐘 An elephant never forgets. Structured memory for AI agents.')
53
- .version(CLI_VERSION);
54
-
55
- registerCoreCommands(program, {
56
- chalk,
57
- path,
58
- fs,
59
- createVault,
60
- getVault,
61
- runQmd
62
- });
63
-
64
- registerQueryCommands(program, {
65
- chalk,
66
- getVault,
67
- resolveVaultPath,
68
- QmdUnavailableError,
69
- printQmdMissing
70
- });
71
-
72
- registerSessionLifecycleCommands(program, {
73
- chalk,
74
- resolveVaultPath,
75
- QmdUnavailableError,
76
- printQmdMissing,
77
- getVault,
78
- runQmd
79
- });
80
-
81
- registerTemplateCommands(program, { chalk });
82
- registerMaintenanceCommands(program, { chalk });
83
- registerResilienceCommands(program, { chalk, resolveVaultPath });
84
- registerVaultOperationsCommands(program, {
85
- chalk,
86
- fs,
87
- getVault,
88
- runQmd,
89
- resolveVaultPath,
90
- path
91
- });
92
-
93
-
94
- registerTaskCommands(program, {
95
- chalk,
96
- resolveVaultPath
97
- });
98
- registerKanbanCommands(program, {
99
- chalk,
100
- resolveVaultPath
101
- });
102
- registerProjectCommands(program, {
103
- chalk,
104
- resolveVaultPath
105
- });
106
-
107
- registerTailscaleCommands(program, { chalk });
108
- registerConfigCommands(program, { chalk, resolveVaultPath });
109
- registerRouteCommands(program, { chalk, resolveVaultPath });
110
-
111
- // Parse and run
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * ClawVault CLI 🐘
5
+ * An elephant never forgets.
6
+ */
7
+
8
+ import { Command } from 'commander';
9
+ import chalk from 'chalk';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { registerMaintenanceCommands } from './register-maintenance-commands.js';
13
+ import { registerCoreCommands } from './register-core-commands.js';
14
+ import { registerQueryCommands } from './register-query-commands.js';
15
+ import { registerResilienceCommands } from './register-resilience-commands.js';
16
+ import { registerSessionLifecycleCommands } from './register-session-lifecycle-commands.js';
17
+ import { registerTemplateCommands } from './register-template-commands.js';
18
+ import { registerVaultOperationsCommands } from './register-vault-operations-commands.js';
19
+ import { registerConfigCommands } from './register-config-commands.js';
20
+ import { registerRouteCommands } from './register-route-commands.js';
21
+ import { registerKanbanCommands } from './register-kanban-commands.js';
22
+ import { registerProjectCommands } from './register-project-commands.js';
23
+
24
+ import { registerTaskCommands } from './register-task-commands.js';
25
+
26
+ import { registerTailscaleCommands } from './register-tailscale-commands.js';
27
+ import {
28
+ getVault,
29
+ resolveVaultPath,
30
+ runQmd,
31
+ printQmdMissing,
32
+ QmdUnavailableError
33
+ } from './command-runtime.js';
34
+ import {
35
+ createVault
36
+ } from '../dist/index.js';
37
+
38
+ const program = new Command();
39
+
40
+ const CLI_VERSION = (() => {
41
+ try {
42
+ const pkgUrl = new URL('../package.json', import.meta.url);
43
+ const pkg = JSON.parse(fs.readFileSync(pkgUrl, 'utf-8'));
44
+ return pkg.version || '0.0.0';
45
+ } catch {
46
+ return '0.0.0';
47
+ }
48
+ })();
49
+
50
+ program
51
+ .name('clawvault')
52
+ .description('🐘 An elephant never forgets. Structured memory for AI agents.')
53
+ .version(CLI_VERSION);
54
+
55
+ registerCoreCommands(program, {
56
+ chalk,
57
+ path,
58
+ fs,
59
+ createVault,
60
+ getVault,
61
+ runQmd
62
+ });
63
+
64
+ registerQueryCommands(program, {
65
+ chalk,
66
+ getVault,
67
+ resolveVaultPath,
68
+ QmdUnavailableError,
69
+ printQmdMissing
70
+ });
71
+
72
+ registerSessionLifecycleCommands(program, {
73
+ chalk,
74
+ resolveVaultPath,
75
+ QmdUnavailableError,
76
+ printQmdMissing,
77
+ getVault,
78
+ runQmd
79
+ });
80
+
81
+ registerTemplateCommands(program, { chalk });
82
+ registerMaintenanceCommands(program, { chalk });
83
+ registerResilienceCommands(program, { chalk, resolveVaultPath });
84
+ registerVaultOperationsCommands(program, {
85
+ chalk,
86
+ fs,
87
+ getVault,
88
+ runQmd,
89
+ resolveVaultPath,
90
+ path
91
+ });
92
+
93
+
94
+ registerTaskCommands(program, {
95
+ chalk,
96
+ resolveVaultPath
97
+ });
98
+ registerKanbanCommands(program, {
99
+ chalk,
100
+ resolveVaultPath
101
+ });
102
+ registerProjectCommands(program, {
103
+ chalk,
104
+ resolveVaultPath
105
+ });
106
+
107
+ registerTailscaleCommands(program, { chalk });
108
+ registerConfigCommands(program, { chalk, resolveVaultPath });
109
+ registerRouteCommands(program, { chalk, resolveVaultPath });
110
+
111
+ // Parse and run
112
112
  program.parse();