clawvault 2.5.4 → 2.6.1

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 (89) 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-2YDBJS7M.js → chunk-3BTHWPMB.js} +1 -1
  37. package/dist/{chunk-J5EMBUPK.js → chunk-4OXMU5S2.js} +1 -1
  38. package/dist/{chunk-GSD4ALSI.js → chunk-4VRIMU4O.js} +1 -1
  39. package/dist/{chunk-5GZFTAL7.js → chunk-AZYOKJYC.js} +128 -42
  40. package/dist/{chunk-K3CDT7IH.js → chunk-HIHOUSXS.js} +2 -2
  41. package/dist/{chunk-IZEY5S74.js → chunk-IEVLHNLU.js} +1 -1
  42. package/dist/{chunk-OSMS7QIG.js → chunk-ME37YNW3.js} +2 -2
  43. package/dist/chunk-MFAWT5O5.js +301 -0
  44. package/dist/{chunk-TPDH3JPP.js → chunk-PBEE567J.js} +1 -1
  45. package/dist/{chunk-S2IG7VNM.js → chunk-Q2J5YTUF.js} +2 -2
  46. package/dist/{chunk-IOALNTAN.js → chunk-QWQ3TIKS.js} +103 -29
  47. package/dist/{chunk-YCVDVI5B.js → chunk-R2MIW5G7.js} +1 -1
  48. package/dist/{chunk-4IV3R2F5.js → chunk-R6SXNSFD.js} +2 -2
  49. package/dist/{chunk-YOSEUUNB.js → chunk-T76H47ZS.js} +1 -1
  50. package/dist/{chunk-JDLOL2PL.js → chunk-TLGBDTYT.js} +3 -3
  51. package/dist/{chunk-W2HNZC22.js → chunk-UEOUADMO.js} +1 -1
  52. package/dist/cli/index.js +12 -10
  53. package/dist/commands/backlog.js +3 -1
  54. package/dist/commands/blocked.js +3 -1
  55. package/dist/commands/canvas.js +3 -1
  56. package/dist/commands/doctor.js +7 -5
  57. package/dist/commands/inject.js +2 -2
  58. package/dist/commands/kanban.js +4 -2
  59. package/dist/commands/observe.js +7 -5
  60. package/dist/commands/project.js +5 -3
  61. package/dist/commands/rebuild.js +6 -4
  62. package/dist/commands/reflect.js +3 -3
  63. package/dist/commands/replay.js +8 -6
  64. package/dist/commands/setup.js +1 -1
  65. package/dist/commands/sleep.js +7 -5
  66. package/dist/commands/status.js +6 -4
  67. package/dist/commands/task.js +4 -2
  68. package/dist/commands/template.d.ts +10 -1
  69. package/dist/commands/template.js +47 -55
  70. package/dist/commands/wake.js +2 -2
  71. package/dist/index.js +20 -19
  72. package/dist/lib/project-utils.js +4 -2
  73. package/dist/lib/task-utils.d.ts +14 -13
  74. package/dist/lib/task-utils.js +3 -1
  75. package/dist/lib/template-engine.d.ts +1 -0
  76. package/hooks/clawvault/HOOK.md +83 -83
  77. package/hooks/clawvault/handler.js +816 -816
  78. package/hooks/clawvault/handler.test.js +263 -263
  79. package/package.json +94 -94
  80. package/templates/checkpoint.md +34 -19
  81. package/templates/daily-note.md +34 -19
  82. package/templates/daily.md +34 -19
  83. package/templates/decision.md +39 -17
  84. package/templates/handoff.md +34 -19
  85. package/templates/lesson.md +31 -16
  86. package/templates/person.md +37 -19
  87. package/templates/project.md +84 -23
  88. package/templates/task.md +81 -0
  89. /package/dist/{chunk-AXKYDCNN.js → chunk-RVYA52PY.js} +0 -0
@@ -1,52 +1,52 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>ClawVault Graph Dashboard</title>
7
- <link rel="stylesheet" href="/styles.css">
8
- </head>
9
- <body>
10
- <header class="toolbar">
11
- <div class="toolbar-title">
12
- <h1>ClawVault Live Graph</h1>
13
- <p id="stats">Loading graph...</p>
14
- </div>
15
- <div class="toolbar-controls">
16
- <input id="search" type="search" placeholder="Search nodes, ids, tags..." autocomplete="off">
17
- <select id="category-filter">
18
- <option value="all">All categories</option>
19
- </select>
20
- <select id="tag-filter">
21
- <option value="all">All tags</option>
22
- </select>
23
- <select id="node-type-filter">
24
- <option value="all">All node types</option>
25
- <option value="resolved">Resolved only</option>
26
- <option value="missing">Missing only</option>
27
- </select>
28
- <button id="tv-mode" type="button" aria-pressed="false">TV Mode</button>
29
- <button id="refresh" type="button">Refresh</button>
30
- <div class="status-pill" id="realtime-status">Realtime: connecting...</div>
31
- </div>
32
- </header>
33
-
34
- <main class="layout">
35
- <section id="graph" aria-label="Vault graph visualization"></section>
36
- <aside class="details-panel">
37
- <h2>Node Details</h2>
38
- <div id="node-details">
39
- <p>Select a node to inspect details and connections.</p>
40
- </div>
41
- </aside>
42
- </main>
43
-
44
- <script src="/vendor/force-graph.min.js"></script>
45
- <script>
46
- if (!window.ForceGraph) {
47
- document.write('<script src="https://unpkg.com/force-graph"><\/script>');
48
- }
49
- </script>
50
- <script type="module" src="/app.js"></script>
51
- </body>
52
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>ClawVault Graph Dashboard</title>
7
+ <link rel="stylesheet" href="/styles.css">
8
+ </head>
9
+ <body>
10
+ <header class="toolbar">
11
+ <div class="toolbar-title">
12
+ <h1>ClawVault Live Graph</h1>
13
+ <p id="stats">Loading graph...</p>
14
+ </div>
15
+ <div class="toolbar-controls">
16
+ <input id="search" type="search" placeholder="Search nodes, ids, tags..." autocomplete="off">
17
+ <select id="category-filter">
18
+ <option value="all">All categories</option>
19
+ </select>
20
+ <select id="tag-filter">
21
+ <option value="all">All tags</option>
22
+ </select>
23
+ <select id="node-type-filter">
24
+ <option value="all">All node types</option>
25
+ <option value="resolved">Resolved only</option>
26
+ <option value="missing">Missing only</option>
27
+ </select>
28
+ <button id="tv-mode" type="button" aria-pressed="false">TV Mode</button>
29
+ <button id="refresh" type="button">Refresh</button>
30
+ <div class="status-pill" id="realtime-status">Realtime: connecting...</div>
31
+ </div>
32
+ </header>
33
+
34
+ <main class="layout">
35
+ <section id="graph" aria-label="Vault graph visualization"></section>
36
+ <aside class="details-panel">
37
+ <h2>Node Details</h2>
38
+ <div id="node-details">
39
+ <p>Select a node to inspect details and connections.</p>
40
+ </div>
41
+ </aside>
42
+ </main>
43
+
44
+ <script src="/vendor/force-graph.min.js"></script>
45
+ <script>
46
+ if (!window.ForceGraph) {
47
+ document.write('<script src="https://unpkg.com/force-graph"><\/script>');
48
+ }
49
+ </script>
50
+ <script type="module" src="/app.js"></script>
51
+ </body>
52
+ </html>
@@ -1,221 +1,221 @@
1
- :root {
2
- color-scheme: dark;
3
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
4
- --bg: #070a10;
5
- --bg-elevated: #0d1522;
6
- --panel: #111b2a;
7
- --panel-border: #213247;
8
- --text: #dce9ff;
9
- --muted: #90a7c3;
10
- --accent: #75d3ff;
11
- --accent-strong: #b7f0ff;
12
- --ok: #58f1c6;
13
- --warn: #ffd479;
14
- }
15
-
16
- * {
17
- box-sizing: border-box;
18
- }
19
-
20
- html,
21
- body {
22
- margin: 0;
23
- width: 100%;
24
- height: 100%;
25
- background: radial-gradient(circle at top, #122235 0%, var(--bg) 46%, #05080d 100%);
26
- color: var(--text);
27
- }
28
-
29
- body {
30
- display: flex;
31
- flex-direction: column;
32
- overflow: hidden;
33
- }
34
-
35
- .toolbar {
36
- border-bottom: 1px solid var(--panel-border);
37
- background: rgba(10, 16, 26, 0.9);
38
- backdrop-filter: blur(8px);
39
- display: flex;
40
- align-items: center;
41
- justify-content: space-between;
42
- gap: 0.8rem;
43
- padding: 0.7rem 0.9rem;
44
- }
45
-
46
- .toolbar h1 {
47
- margin: 0;
48
- font-size: 1.05rem;
49
- letter-spacing: 0.02em;
50
- }
51
-
52
- .toolbar p {
53
- margin: 0.2rem 0 0;
54
- color: var(--muted);
55
- font-size: 0.82rem;
56
- }
57
-
58
- .toolbar-controls {
59
- display: flex;
60
- align-items: center;
61
- gap: 0.5rem;
62
- flex-wrap: wrap;
63
- }
64
-
65
- input,
66
- select,
67
- button {
68
- border: 1px solid var(--panel-border);
69
- background: var(--panel);
70
- color: var(--text);
71
- border-radius: 9px;
72
- padding: 0.5rem 0.7rem;
73
- font-size: 0.88rem;
74
- transition: border-color 160ms ease, transform 140ms ease, background-color 160ms ease;
75
- }
76
-
77
- input,
78
- select {
79
- min-width: 150px;
80
- }
81
-
82
- input {
83
- min-width: 200px;
84
- }
85
-
86
- button {
87
- cursor: pointer;
88
- }
89
-
90
- button:hover {
91
- border-color: var(--accent);
92
- }
93
-
94
- button:active {
95
- transform: translateY(1px);
96
- }
97
-
98
- .status-pill {
99
- border: 1px solid #294464;
100
- border-radius: 999px;
101
- background: #14253a;
102
- color: var(--muted);
103
- font-size: 0.76rem;
104
- line-height: 1;
105
- padding: 0.4rem 0.65rem;
106
- white-space: nowrap;
107
- }
108
-
109
- .status-pill.ok {
110
- border-color: #1f6350;
111
- color: #93f0d6;
112
- background: #0f2f2a;
113
- }
114
-
115
- .status-pill.warn {
116
- border-color: #7a5620;
117
- color: #ffe0a3;
118
- background: #342510;
119
- }
120
-
121
- .layout {
122
- display: grid;
123
- grid-template-columns: minmax(0, 1fr) 320px;
124
- min-height: 0;
125
- flex: 1;
126
- }
127
-
128
- #graph {
129
- min-height: 0;
130
- position: relative;
131
- }
132
-
133
- .details-panel {
134
- border-left: 1px solid var(--panel-border);
135
- padding: 1rem;
136
- background: rgba(13, 21, 34, 0.87);
137
- overflow-y: auto;
138
- }
139
-
140
- .details-panel h2 {
141
- margin-top: 0;
142
- font-size: 0.98rem;
143
- letter-spacing: 0.01em;
144
- }
145
-
146
- .meta-label {
147
- color: var(--muted);
148
- font-size: 0.8rem;
149
- margin-bottom: 0.15rem;
150
- }
151
-
152
- .meta-value {
153
- margin: 0 0 0.72rem;
154
- font-size: 0.9rem;
155
- line-height: 1.4;
156
- word-break: break-word;
157
- }
158
-
159
- .connection-list {
160
- list-style: none;
161
- margin: 0;
162
- padding: 0;
163
- }
164
-
165
- .connection-list li {
166
- border-bottom: 1px solid var(--panel-border);
167
- padding: 0.36rem 0;
168
- font-size: 0.88rem;
169
- }
170
-
171
- .connection-list li:last-child {
172
- border-bottom: none;
173
- }
174
-
175
- .connection-link {
176
- color: var(--accent);
177
- text-decoration: none;
178
- }
179
-
180
- .connection-link:hover {
181
- color: var(--accent-strong);
182
- text-decoration: underline;
183
- }
184
-
185
- body.tv-mode .toolbar,
186
- body.tv-mode .details-panel {
187
- opacity: 0;
188
- pointer-events: none;
189
- transform: translateY(-8px);
190
- transition: opacity 280ms ease, transform 280ms ease;
191
- }
192
-
193
- body.tv-mode .layout {
194
- display: block;
195
- }
196
-
197
- body.tv-mode #graph {
198
- width: 100vw;
199
- height: 100vh;
200
- }
201
-
202
- body.tv-mode {
203
- background: #03050a;
204
- cursor: none;
205
- }
206
-
207
- @media (max-width: 1200px) {
208
- .layout {
209
- grid-template-columns: minmax(0, 1fr);
210
- grid-template-rows: minmax(0, 1fr) auto;
211
- }
212
-
213
- #graph {
214
- height: 64vh;
215
- }
216
-
217
- .details-panel {
218
- border-left: 0;
219
- border-top: 1px solid var(--panel-border);
220
- }
221
- }
1
+ :root {
2
+ color-scheme: dark;
3
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
4
+ --bg: #070a10;
5
+ --bg-elevated: #0d1522;
6
+ --panel: #111b2a;
7
+ --panel-border: #213247;
8
+ --text: #dce9ff;
9
+ --muted: #90a7c3;
10
+ --accent: #75d3ff;
11
+ --accent-strong: #b7f0ff;
12
+ --ok: #58f1c6;
13
+ --warn: #ffd479;
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ html,
21
+ body {
22
+ margin: 0;
23
+ width: 100%;
24
+ height: 100%;
25
+ background: radial-gradient(circle at top, #122235 0%, var(--bg) 46%, #05080d 100%);
26
+ color: var(--text);
27
+ }
28
+
29
+ body {
30
+ display: flex;
31
+ flex-direction: column;
32
+ overflow: hidden;
33
+ }
34
+
35
+ .toolbar {
36
+ border-bottom: 1px solid var(--panel-border);
37
+ background: rgba(10, 16, 26, 0.9);
38
+ backdrop-filter: blur(8px);
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ gap: 0.8rem;
43
+ padding: 0.7rem 0.9rem;
44
+ }
45
+
46
+ .toolbar h1 {
47
+ margin: 0;
48
+ font-size: 1.05rem;
49
+ letter-spacing: 0.02em;
50
+ }
51
+
52
+ .toolbar p {
53
+ margin: 0.2rem 0 0;
54
+ color: var(--muted);
55
+ font-size: 0.82rem;
56
+ }
57
+
58
+ .toolbar-controls {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 0.5rem;
62
+ flex-wrap: wrap;
63
+ }
64
+
65
+ input,
66
+ select,
67
+ button {
68
+ border: 1px solid var(--panel-border);
69
+ background: var(--panel);
70
+ color: var(--text);
71
+ border-radius: 9px;
72
+ padding: 0.5rem 0.7rem;
73
+ font-size: 0.88rem;
74
+ transition: border-color 160ms ease, transform 140ms ease, background-color 160ms ease;
75
+ }
76
+
77
+ input,
78
+ select {
79
+ min-width: 150px;
80
+ }
81
+
82
+ input {
83
+ min-width: 200px;
84
+ }
85
+
86
+ button {
87
+ cursor: pointer;
88
+ }
89
+
90
+ button:hover {
91
+ border-color: var(--accent);
92
+ }
93
+
94
+ button:active {
95
+ transform: translateY(1px);
96
+ }
97
+
98
+ .status-pill {
99
+ border: 1px solid #294464;
100
+ border-radius: 999px;
101
+ background: #14253a;
102
+ color: var(--muted);
103
+ font-size: 0.76rem;
104
+ line-height: 1;
105
+ padding: 0.4rem 0.65rem;
106
+ white-space: nowrap;
107
+ }
108
+
109
+ .status-pill.ok {
110
+ border-color: #1f6350;
111
+ color: #93f0d6;
112
+ background: #0f2f2a;
113
+ }
114
+
115
+ .status-pill.warn {
116
+ border-color: #7a5620;
117
+ color: #ffe0a3;
118
+ background: #342510;
119
+ }
120
+
121
+ .layout {
122
+ display: grid;
123
+ grid-template-columns: minmax(0, 1fr) 320px;
124
+ min-height: 0;
125
+ flex: 1;
126
+ }
127
+
128
+ #graph {
129
+ min-height: 0;
130
+ position: relative;
131
+ }
132
+
133
+ .details-panel {
134
+ border-left: 1px solid var(--panel-border);
135
+ padding: 1rem;
136
+ background: rgba(13, 21, 34, 0.87);
137
+ overflow-y: auto;
138
+ }
139
+
140
+ .details-panel h2 {
141
+ margin-top: 0;
142
+ font-size: 0.98rem;
143
+ letter-spacing: 0.01em;
144
+ }
145
+
146
+ .meta-label {
147
+ color: var(--muted);
148
+ font-size: 0.8rem;
149
+ margin-bottom: 0.15rem;
150
+ }
151
+
152
+ .meta-value {
153
+ margin: 0 0 0.72rem;
154
+ font-size: 0.9rem;
155
+ line-height: 1.4;
156
+ word-break: break-word;
157
+ }
158
+
159
+ .connection-list {
160
+ list-style: none;
161
+ margin: 0;
162
+ padding: 0;
163
+ }
164
+
165
+ .connection-list li {
166
+ border-bottom: 1px solid var(--panel-border);
167
+ padding: 0.36rem 0;
168
+ font-size: 0.88rem;
169
+ }
170
+
171
+ .connection-list li:last-child {
172
+ border-bottom: none;
173
+ }
174
+
175
+ .connection-link {
176
+ color: var(--accent);
177
+ text-decoration: none;
178
+ }
179
+
180
+ .connection-link:hover {
181
+ color: var(--accent-strong);
182
+ text-decoration: underline;
183
+ }
184
+
185
+ body.tv-mode .toolbar,
186
+ body.tv-mode .details-panel {
187
+ opacity: 0;
188
+ pointer-events: none;
189
+ transform: translateY(-8px);
190
+ transition: opacity 280ms ease, transform 280ms ease;
191
+ }
192
+
193
+ body.tv-mode .layout {
194
+ display: block;
195
+ }
196
+
197
+ body.tv-mode #graph {
198
+ width: 100vw;
199
+ height: 100vh;
200
+ }
201
+
202
+ body.tv-mode {
203
+ background: #03050a;
204
+ cursor: none;
205
+ }
206
+
207
+ @media (max-width: 1200px) {
208
+ .layout {
209
+ grid-template-columns: minmax(0, 1fr);
210
+ grid-template-rows: minmax(0, 1fr) auto;
211
+ }
212
+
213
+ #graph {
214
+ height: 64vh;
215
+ }
216
+
217
+ .details-panel {
218
+ border-left: 0;
219
+ border-top: 1px solid var(--panel-border);
220
+ }
221
+ }