knowns 0.1.8 → 0.2.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.
- package/CHANGELOG.md +50 -0
- package/README.md +96 -141
- package/dist/index.js +8 -4
- package/dist/ui/assets/{index-B1nrD_sv.js → index-B6Hb3Tx3.js} +7 -7
- package/dist/ui/index.html +1 -1
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,55 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.1] - 2025-12-28
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **Web UI Static Files**: Fixed `NotFoundError` when running `knowns browser` from global install
|
|
12
|
+
- Bun creates symlinks in `~/.bun/bin/` which broke path resolution for UI files
|
|
13
|
+
- Added `realpathSync` to resolve symlinks before computing paths
|
|
14
|
+
- Changed Express `sendFile` to use `root` option for reliable file serving
|
|
15
|
+
|
|
16
|
+
## [0.2.0] - 2025-12-27
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **Project Documentation**: Comprehensive project docs for contributors and users
|
|
20
|
+
- `PHILOSOPHY.md` - 10 core principles guiding Knowns design
|
|
21
|
+
- `ARCHITECTURE.md` - Technical overview, diagrams, data flow, sync logic
|
|
22
|
+
- `CONTRIBUTING.md` - Contribution guidelines aligned with philosophy
|
|
23
|
+
- `docs/` folder with detailed guides:
|
|
24
|
+
- `commands.md` - Full CLI command reference
|
|
25
|
+
- `workflow.md` - Task lifecycle guide
|
|
26
|
+
- `reference-system.md` - How `@doc/` and `@task-` linking works
|
|
27
|
+
- `web-ui.md` - Kanban board and document browser guide
|
|
28
|
+
- `mcp-integration.md` - Claude Desktop MCP setup
|
|
29
|
+
- `configuration.md` - Project structure and options
|
|
30
|
+
- `ai-workflow.md` - Guide for AI agents
|
|
31
|
+
|
|
32
|
+
- **README Improvements**:
|
|
33
|
+
- Added TL;DR section for quick understanding
|
|
34
|
+
- Added comparison table vs Notion/Jira/Obsidian
|
|
35
|
+
- Added "How it works" 3-step explanation
|
|
36
|
+
- Added Roadmap section with Self-Hosted Team Sync (planned)
|
|
37
|
+
- New badges: Node version, TypeScript, Platform, GitHub stars, PRs welcome
|
|
38
|
+
- Links to Philosophy, Architecture, and Contributing docs
|
|
39
|
+
|
|
40
|
+
- **Node.js Engine Requirement**: Added `engines.node >= 18.0.0` to package.json
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
- **README Restructure**: Optimized for first impressions
|
|
44
|
+
- Moved detailed docs to `./docs/` folder
|
|
45
|
+
- Shortened main README from ~300 to ~175 lines
|
|
46
|
+
- Documentation table links to detailed guides
|
|
47
|
+
- **Tagline**: Updated to "CLI-first knowledge layer that gives AI persistent memory of your project"
|
|
48
|
+
- **Version Display**: Now reads directly from package.json (works with both npm and bun)
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
- **UI Version Display**: Fixed version showing "dev" or old version when built with bun
|
|
52
|
+
- Vite config now reads version directly from package.json instead of `npm_package_version`
|
|
53
|
+
- **Doc Mention Regex**: Fixed badge not rendering for `@doc/path` without `.md` extension
|
|
54
|
+
- Changed regex from `/@doc\/([^\s]+\.md)/g` to `/@docs?\/([^\s)]+)/g`
|
|
55
|
+
- Added `normalizeDocPath()` to automatically add `.md` extension
|
|
56
|
+
|
|
8
57
|
## [0.1.8] - 2025-12-27
|
|
9
58
|
|
|
10
59
|
### Added
|
|
@@ -198,6 +247,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
198
247
|
- CLAUDE.md with complete guidelines for AI agents
|
|
199
248
|
- Example workflows and patterns
|
|
200
249
|
|
|
250
|
+
[0.2.0]: https://github.com/knowns-dev/knowns/compare/v0.1.8...v0.2.0
|
|
201
251
|
[0.1.8]: https://github.com/knowns-dev/knowns/compare/v0.1.7...v0.1.8
|
|
202
252
|
[0.1.7]: https://github.com/knowns-dev/knowns/compare/v0.1.6...v0.1.7
|
|
203
253
|
[0.1.6]: https://github.com/knowns-dev/knowns/compare/v0.1.5...v0.1.6
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
CLI
|
|
12
|
+
CLI-first knowledge layer that gives AI persistent memory of your project.
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
@@ -17,198 +17,149 @@
|
|
|
17
17
|
<a href="https://www.npmjs.com/package/knowns"><img src="https://img.shields.io/npm/dm/knowns.svg?style=flat-square" alt="npm downloads"></a>
|
|
18
18
|
<a href="https://github.com/knowns-dev/knowns/actions"><img src="https://img.shields.io/github/actions/workflow/status/knowns-dev/knowns/ci.yml?branch=main&style=flat-square&label=CI" alt="CI"></a>
|
|
19
19
|
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" alt="License: MIT"></a>
|
|
20
|
+
<br>
|
|
21
|
+
<a href="#"><img src="https://img.shields.io/node/v/knowns?style=flat-square" alt="node version"></a>
|
|
22
|
+
<a href="#"><img src="https://img.shields.io/badge/TypeScript-5.0-blue?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"></a>
|
|
23
|
+
<a href="#"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey?style=flat-square" alt="platform"></a>
|
|
24
|
+
<a href="https://github.com/knowns-dev/knowns/stargazers"><img src="https://img.shields.io/github/stars/knowns-dev/knowns?style=flat-square" alt="GitHub stars"></a>
|
|
25
|
+
<a href="#"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square" alt="PRs Welcome"></a>
|
|
20
26
|
</p>
|
|
21
27
|
|
|
22
28
|
---
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
> **TL;DR:** Knowns is a CLI-first knowledge layer that lets AI reliably read and reuse your project context — instead of asking the same questions every session.
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
## The Problem
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
AI assistants are stateless — they forget your architecture, patterns, and decisions every session.
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
| Feature | Description |
|
|
33
|
-
|---------|-------------|
|
|
34
|
-
| 🎯 **Task Management** | Create, track, and manage tasks with acceptance criteria |
|
|
35
|
-
| 📚 **Documentation** | Nested folder structure with markdown support |
|
|
36
|
-
| ⏱️ **Time Tracking** | Built-in timers and time reports |
|
|
37
|
-
| 🔗 **Context Linking** | `@task-42` and `@doc/patterns/auth` references |
|
|
38
|
-
| 🤖 **AI Integration** | MCP Server for Claude Desktop, `--plain` output for AI |
|
|
39
|
-
| 🌐 **Web UI** | Kanban board, document browser, dark mode |
|
|
40
|
-
| 🔄 **Agent Sync** | Sync guidelines to Claude, Gemini, Copilot |
|
|
41
|
-
|
|
42
|
-
## Installation
|
|
36
|
+
```
|
|
37
|
+
Session 1: "Implement feature X" → AI: "How does your auth work?" → You explain
|
|
43
38
|
|
|
44
|
-
|
|
45
|
-
# Using npm
|
|
46
|
-
npm install -g knowns
|
|
39
|
+
Session 2: "Implement feature Y" → AI: "How does your auth work?" → You explain AGAIN
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
bun install -g knowns
|
|
41
|
+
Session 100: Still explaining the same thing...
|
|
50
42
|
```
|
|
51
43
|
|
|
52
|
-
##
|
|
44
|
+
## The Solution
|
|
53
45
|
|
|
54
46
|
```bash
|
|
55
|
-
#
|
|
56
|
-
knowns
|
|
57
|
-
|
|
58
|
-
# Create documentation
|
|
59
|
-
knowns doc create "Auth Pattern" -d "JWT authentication" -t "patterns" -f patterns
|
|
47
|
+
# Document once
|
|
48
|
+
knowns doc create "Auth Pattern" -d "JWT with guards" -f patterns
|
|
60
49
|
|
|
61
|
-
#
|
|
62
|
-
knowns task create "Add
|
|
63
|
-
-d "Implement JWT auth following @doc/patterns/auth-pattern" \
|
|
64
|
-
--ac "User can login" \
|
|
65
|
-
--ac "Session persists"
|
|
50
|
+
# Reference everywhere
|
|
51
|
+
knowns task create "Add login" -d "Follow @doc/patterns/auth-pattern"
|
|
66
52
|
|
|
67
|
-
#
|
|
68
|
-
knowns task view 1 --plain
|
|
69
|
-
|
|
70
|
-
# Open Web UI
|
|
71
|
-
knowns browser
|
|
53
|
+
# AI reads context automatically — never forgets
|
|
72
54
|
```
|
|
73
55
|
|
|
74
|
-
|
|
56
|
+
**How it works:**
|
|
75
57
|
|
|
76
|
-
|
|
58
|
+
1. **You plan** — Create tasks with acceptance criteria in Web UI or CLI
|
|
59
|
+
2. **You link** — Reference docs like `@doc/patterns/auth` in task descriptions
|
|
60
|
+
3. **AI executes** — Tell AI *"Work on task 42"*, it reads the task, follows the refs, and implements
|
|
77
61
|
|
|
78
|
-
|
|
79
|
-
knowns task create "Title" -d "Description" --ac "Criterion"
|
|
80
|
-
knowns task view <id> --plain
|
|
81
|
-
knowns task list --plain
|
|
82
|
-
knowns task edit <id> -s in-progress -a @me
|
|
83
|
-
knowns task edit <id> --check-ac 1 --check-ac 2
|
|
84
|
-
knowns task edit <id> --plan "1. Step 1\n2. Step 2"
|
|
85
|
-
knowns task edit <id> --notes "Implementation summary"
|
|
86
|
-
```
|
|
62
|
+
Knowns resolves `@doc/...` and `@task-...` into real files. AI reads them via [MCP](./docs/mcp-integration.md) or `--plain` output — no copy-paste needed.
|
|
87
63
|
|
|
88
|
-
|
|
64
|
+
## Install
|
|
89
65
|
|
|
90
66
|
```bash
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
knowns doc list --plain
|
|
94
|
-
knowns doc edit "doc-name" -c "New content"
|
|
95
|
-
knowns doc edit "doc-name" -a "Appended content"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Time Tracking
|
|
67
|
+
# using npm
|
|
68
|
+
npm install -g knowns
|
|
99
69
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
knowns time stop
|
|
103
|
-
knowns time status
|
|
104
|
-
knowns time report --from "2025-01-01" --to "2025-12-31"
|
|
105
|
-
```
|
|
70
|
+
# using bun
|
|
71
|
+
bun install -g knowns
|
|
106
72
|
|
|
107
|
-
### Search
|
|
108
73
|
|
|
109
|
-
|
|
110
|
-
knowns
|
|
111
|
-
knowns search "auth" --type task --plain
|
|
112
|
-
knowns search "patterns" --type doc --plain
|
|
74
|
+
knowns init
|
|
75
|
+
knowns browser # Open Web UI
|
|
113
76
|
```
|
|
114
77
|
|
|
115
|
-
|
|
78
|
+
---
|
|
116
79
|
|
|
117
|
-
|
|
118
|
-
knowns browser # Open Web UI
|
|
119
|
-
knowns agents --update-instructions # Sync AI guidelines
|
|
120
|
-
knowns mcp # Start MCP server
|
|
121
|
-
```
|
|
80
|
+
## Why Knowns over Notion / Jira / Obsidian?
|
|
122
81
|
|
|
123
|
-
|
|
82
|
+
| | Knowns | Notion/Jira | Obsidian |
|
|
83
|
+
|---|--------|-------------|----------|
|
|
84
|
+
| **AI-readable** | `--plain` output, MCP server | Copy-paste manually | Plugins needed |
|
|
85
|
+
| **File-based** | Git-friendly `.knowns/` folder | Cloud-locked | Local files |
|
|
86
|
+
| **CLI-first** | Full CLI + Web UI | Web only | GUI only |
|
|
87
|
+
| **Context linking** | `@doc/...` `@task-42` refs | Manual links | Wiki links |
|
|
88
|
+
| **Source of truth** | Local files (Git-versioned) | Remote database | Local vault |
|
|
89
|
+
| **Minimal setup** | `knowns init` and done | Complex setup | Many plugins |
|
|
124
90
|
|
|
125
|
-
|
|
91
|
+
**Best for:** Dev teams who pair with AI and want persistent project memory.
|
|
126
92
|
|
|
127
|
-
|
|
128
|
-
|------|-------|--------|
|
|
129
|
-
| Task | `@task-42` | `@.knowns/tasks/task-42 - Title.md` |
|
|
130
|
-
| Doc | `@doc/patterns/auth` | `@.knowns/docs/patterns/auth.md` |
|
|
93
|
+
## Features
|
|
131
94
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
95
|
+
| Feature | Description |
|
|
96
|
+
|---------|-------------|
|
|
97
|
+
| **Task Management** | Create, track tasks with acceptance criteria |
|
|
98
|
+
| **Documentation** | Nested folders with markdown support |
|
|
99
|
+
| **Time Tracking** | Built-in timers and reports |
|
|
100
|
+
| **Context Linking** | `@task-42` and `@doc/patterns/auth` references |
|
|
101
|
+
| **AI Integration** | MCP Server for Claude, `--plain` output |
|
|
102
|
+
| **Web UI** | Kanban board, doc browser, dark mode |
|
|
137
103
|
|
|
138
|
-
|
|
104
|
+
---
|
|
139
105
|
|
|
140
|
-
##
|
|
106
|
+
## Quick Reference
|
|
141
107
|
|
|
142
108
|
```bash
|
|
143
|
-
|
|
144
|
-
|
|
109
|
+
# Tasks
|
|
110
|
+
knowns task create "Title" -d "Description" --ac "Criterion"
|
|
111
|
+
knowns task list --plain
|
|
112
|
+
knowns task view <id> --plain
|
|
113
|
+
knowns task edit <id> -s in-progress -a @me
|
|
145
114
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
## MCP Server (Claude Desktop)
|
|
154
|
-
|
|
155
|
-
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
156
|
-
|
|
157
|
-
```json
|
|
158
|
-
{
|
|
159
|
-
"mcpServers": {
|
|
160
|
-
"knowns": {
|
|
161
|
-
"command": "knowns",
|
|
162
|
-
"args": ["mcp"]
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
115
|
+
# Documentation
|
|
116
|
+
knowns doc create "Title" -d "Description" -f "folder"
|
|
117
|
+
knowns doc view "doc-name" --plain
|
|
118
|
+
|
|
119
|
+
# Time & Search
|
|
120
|
+
knowns time start <id> && knowns time stop
|
|
121
|
+
knowns search "query" --plain
|
|
166
122
|
```
|
|
167
123
|
|
|
168
|
-
|
|
124
|
+
---
|
|
169
125
|
|
|
170
|
-
##
|
|
126
|
+
## Documentation
|
|
171
127
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
128
|
+
| Guide | Description |
|
|
129
|
+
|-------|-------------|
|
|
130
|
+
| [Command Reference](./docs/commands.md) | All CLI commands with examples |
|
|
131
|
+
| [Workflow Guide](./docs/workflow.md) | Task lifecycle from creation to completion |
|
|
132
|
+
| [Reference System](./docs/reference-system.md) | How `@doc/` and `@task-` linking works |
|
|
133
|
+
| [Web UI](./docs/web-ui.md) | Kanban board and document browser |
|
|
134
|
+
| [MCP Integration](./docs/mcp-integration.md) | Claude Desktop setup |
|
|
135
|
+
| [Configuration](./docs/configuration.md) | Project structure and options |
|
|
136
|
+
| [AI Workflow](./docs/ai-workflow.md) | Guide for AI agents |
|
|
181
137
|
|
|
182
|
-
|
|
138
|
+
---
|
|
183
139
|
|
|
184
|
-
|
|
185
|
-
# 1. Take task
|
|
186
|
-
knowns task edit <id> -s in-progress -a @me
|
|
140
|
+
## Roadmap
|
|
187
141
|
|
|
188
|
-
|
|
189
|
-
knowns time start <id>
|
|
142
|
+
### Self-Hosted Team Sync 🚧 (Planned)
|
|
190
143
|
|
|
191
|
-
|
|
192
|
-
knowns task edit <id> --plan "1. Research\n2. Implement\n3. Test"
|
|
144
|
+
Knowns will optionally support a self-hosted sync server — for teams that want shared visibility without giving up local-first workflows.
|
|
193
145
|
|
|
194
|
-
|
|
195
|
-
|
|
146
|
+
- **Real-time visibility** — See who is working on what
|
|
147
|
+
- **Shared knowledge** — Sync tasks and documentation across the team
|
|
148
|
+
- **Progress tracking** — Track activity over time
|
|
149
|
+
- **Full data control** — Self-hosted, no cloud dependency
|
|
196
150
|
|
|
197
|
-
|
|
198
|
-
|
|
151
|
+
The CLI and local `.knowns/` folder remain the source of truth.
|
|
152
|
+
The server acts only as a sync and visibility layer.
|
|
199
153
|
|
|
200
|
-
|
|
201
|
-
knowns time stop
|
|
202
|
-
knowns task edit <id> -s done
|
|
203
|
-
```
|
|
154
|
+
---
|
|
204
155
|
|
|
205
156
|
## Development
|
|
206
157
|
|
|
207
158
|
```bash
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
159
|
+
npm install
|
|
160
|
+
npm run dev # Dev mode
|
|
161
|
+
npm run build # Build
|
|
162
|
+
npm run test # Test
|
|
212
163
|
```
|
|
213
164
|
|
|
214
165
|
## Links
|
|
@@ -217,6 +168,10 @@ bun run lint # Lint
|
|
|
217
168
|
- [GitHub](https://github.com/knowns-dev/knowns)
|
|
218
169
|
- [Changelog](./CHANGELOG.md)
|
|
219
170
|
|
|
171
|
+
For design principles and long-term direction, see [Philosophy](./PHILOSOPHY.md).
|
|
172
|
+
|
|
173
|
+
For technical details, see [Architecture](./ARCHITECTURE.md) and [Contributing](./CONTRIBUTING.md).
|
|
174
|
+
|
|
220
175
|
---
|
|
221
176
|
|
|
222
177
|
<p align="center">
|
package/dist/index.js
CHANGED
|
@@ -43181,7 +43181,7 @@ import { join as join11 } from "node:path";
|
|
|
43181
43181
|
|
|
43182
43182
|
// src/server/index.ts
|
|
43183
43183
|
import { spawn } from "node:child_process";
|
|
43184
|
-
import { existsSync as existsSync7 } from "node:fs";
|
|
43184
|
+
import { existsSync as existsSync7, realpathSync } from "node:fs";
|
|
43185
43185
|
import { mkdir as mkdir5, readFile as readFile4, readdir as readdir4, writeFile as writeFile3 } from "node:fs/promises";
|
|
43186
43186
|
import { createServer } from "node:http";
|
|
43187
43187
|
import { basename as basename2, dirname as dirname3, join as join10, relative } from "node:path";
|
|
@@ -43211,7 +43211,7 @@ async function startServer(options2) {
|
|
|
43211
43211
|
}
|
|
43212
43212
|
}
|
|
43213
43213
|
};
|
|
43214
|
-
const currentFile = fileURLToPath(import.meta.url);
|
|
43214
|
+
const currentFile = realpathSync(fileURLToPath(import.meta.url));
|
|
43215
43215
|
const currentDir = dirname3(currentFile);
|
|
43216
43216
|
let packageRoot = currentDir;
|
|
43217
43217
|
const normalizedDir = currentDir.replace(/[/\\]+$/, "");
|
|
@@ -43633,7 +43633,7 @@ async function startServer(options2) {
|
|
|
43633
43633
|
app.get("/{*path}", (_req, res) => {
|
|
43634
43634
|
const indexPath = join10(uiDistPath, "index.html");
|
|
43635
43635
|
if (existsSync7(indexPath)) {
|
|
43636
|
-
res.sendFile(
|
|
43636
|
+
res.sendFile("index.html", { root: uiDistPath });
|
|
43637
43637
|
} else {
|
|
43638
43638
|
res.status(404).send("Not Found");
|
|
43639
43639
|
}
|
|
@@ -57785,7 +57785,7 @@ var configCommand = new Command("config").description("Manage configuration sett
|
|
|
57785
57785
|
// package.json
|
|
57786
57786
|
var package_default = {
|
|
57787
57787
|
name: "knowns",
|
|
57788
|
-
version: "0.1
|
|
57788
|
+
version: "0.2.1",
|
|
57789
57789
|
description: "CLI tool for dev teams to manage tasks and documentation",
|
|
57790
57790
|
module: "index.ts",
|
|
57791
57791
|
type: "module",
|
|
@@ -57798,6 +57798,9 @@ var package_default = {
|
|
|
57798
57798
|
keywords: ["cli", "task-management", "documentation", "knowledge-base", "team-tools", "developer-tools"],
|
|
57799
57799
|
author: "howznguyen <howznguyen@knowns.dev>",
|
|
57800
57800
|
license: "MIT",
|
|
57801
|
+
engines: {
|
|
57802
|
+
node: ">=18.0.0"
|
|
57803
|
+
},
|
|
57801
57804
|
repository: {
|
|
57802
57805
|
type: "git",
|
|
57803
57806
|
url: "https://github.com/knowns-dev/knowns.git"
|
|
@@ -57830,6 +57833,7 @@ var package_default = {
|
|
|
57830
57833
|
"@radix-ui/react-separator": "^1.1.8",
|
|
57831
57834
|
"@radix-ui/react-slot": "^1.2.4",
|
|
57832
57835
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
57836
|
+
"@types/cors": "^2.8.19",
|
|
57833
57837
|
"@uiw/react-md-editor": "^4.0.11",
|
|
57834
57838
|
chalk: "^5.3.0",
|
|
57835
57839
|
"class-variance-authority": "^0.7.1",
|