@clidey/dory 0.9.0 → 0.10.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.
@@ -0,0 +1,29 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(find:*)",
5
+ "Bash(grep:*)",
6
+ "Bash(rg:*)",
7
+ "Bash(npm run generate:*)",
8
+ "Bash(ls:*)",
9
+ "Bash(rm:*)",
10
+ "Bash(npm run build:*)",
11
+ "Bash(npx tsc:*)",
12
+ "Bash(npx typescript:*)",
13
+ "Bash(npm install:*)",
14
+ "Bash(pnpm install:*)",
15
+ "Bash(pnpm run:*)",
16
+ "Bash(node*)",
17
+ "Bash(git config*)",
18
+ "Bash(git checkout -b*)",
19
+ "Bash(git add*)",
20
+ "Bash(git commit -m*)",
21
+ "Bash(git push*)",
22
+ "Bash(gh pr create*)",
23
+ "Bash(git status*)",
24
+ "Bash(git diff*)",
25
+ "Bash(git log*)"
26
+ ]
27
+ },
28
+ "enableAllProjectMcpServers": false
29
+ }
package/CLAUDE.md ADDED
@@ -0,0 +1,161 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ Dory is a lightweight static site generator for technical documentation, published as `@clidey/dory` on npm. It uses Preact, Vite, TypeScript, and Tailwind CSS.
8
+
9
+ ## Essential Commands
10
+
11
+ ```bash
12
+ # Install dependencies
13
+ pnpm install
14
+
15
+ # Development server with hot reload
16
+ pnpm run dev
17
+
18
+ # Build the project (includes TypeScript checking)
19
+ pnpm run build
20
+
21
+ # Preview built site
22
+ pnpm run preview
23
+
24
+ # Publish to npm
25
+ pnpm run publish
26
+
27
+ # CLI commands (after build)
28
+ node bin/dory.js build # Build documentation site
29
+ node bin/dory.js preview # Serve built site
30
+ ```
31
+
32
+ ## High-Level Architecture
33
+
34
+ ### Core Technologies
35
+ - **Frontend**: Preact (React-compatible)
36
+ - **Build**: Vite with custom plugins
37
+ - **Styling**: Tailwind CSS v4 + SCSS
38
+ - **Content**: MDX (Markdown + JSX)
39
+ - **Language**: TypeScript (strict mode)
40
+
41
+ ### Key Directories
42
+ - `bin/` - CLI tool implementation
43
+ - `src/components/` - UI components (Header, Footer, Search, etc.)
44
+ - `src/mdx/` - MDX-specific components (Code, Tabs, Mermaid)
45
+ - `src/plugins/` - Custom Vite plugins for LLM support
46
+ - `docs/` - Documentation content (MDX files)
47
+
48
+ ### Important Files
49
+ - `dory.json` - Site configuration (navigation, branding)
50
+ - `vite.config.ts` - Build configuration with custom plugins
51
+ - `src/main.tsx` - Application entry point
52
+ - `src/store.ts` - Global state management
53
+
54
+ ### Custom Vite Plugins
55
+ 1. **llm-txt-generator**: Generates `llms.txt` files for AI consumption
56
+ 2. **llm-txt-dev-server**: Serves LLM-friendly content in development
57
+ 3. **remarkSafeVars**: Sanitizes MDX content for security
58
+
59
+ ### Development Patterns
60
+ - Functional components with hooks
61
+ - MDX Provider pattern for content rendering
62
+ - Custom store for state management (dark mode, search)
63
+ - Tailwind utilities for styling
64
+ - No test framework currently configured
65
+
66
+ ### Key Features to Maintain
67
+ - MDX support with custom components
68
+ - Client-side search with FlexSearch
69
+ - API Playground for OpenAPI specs
70
+ - Mermaid diagram rendering
71
+ - LaTeX math with KaTeX
72
+ - Dark mode toggle
73
+ - Responsive navigation
74
+
75
+ When making changes:
76
+ - Ensure TypeScript strict mode compliance
77
+ - Follow existing component patterns in `src/components/`
78
+ - Update `dory.json` for navigation changes
79
+ - Test both light and dark modes
80
+ - Verify MDX content renders correctly
81
+
82
+ ## Common Command Guidelines
83
+
84
+ ### Git Commands
85
+ ```bash
86
+ # Check current status before making changes
87
+ git status
88
+
89
+ # View uncommitted changes
90
+ git diff
91
+ git diff --staged # for staged changes
92
+
93
+ # Stage and commit changes
94
+ git add -A # Stage all changes
95
+ git commit -m "feat(component): add new feature" # Use conventional commits
96
+
97
+ # Branch operations
98
+ git checkout -b feature/new-feature # Create and switch to new branch
99
+ git push -u origin feature/new-feature # Push new branch to remote
100
+
101
+ # View recent commits
102
+ git log --oneline -10 # Last 10 commits
103
+ ```
104
+
105
+ ### npm/pnpm Commands
106
+ ```bash
107
+ # Always use pnpm in this project (not npm or yarn)
108
+ pnpm install # Install dependencies
109
+ pnpm add <package> # Add new dependency
110
+ pnpm add -D <package> # Add dev dependency
111
+ pnpm remove <package> # Remove dependency
112
+
113
+ # Check for outdated packages
114
+ pnpm outdated
115
+
116
+ # Run scripts from package.json
117
+ pnpm run <script-name>
118
+ ```
119
+
120
+ ### Bash/Shell Commands
121
+ ```bash
122
+ # Navigate directories
123
+ cd src/components # Change to components directory
124
+ pwd # Show current directory
125
+
126
+ # File operations
127
+ ls -la # List all files with details
128
+ mkdir -p src/new-feature # Create directories recursively
129
+ rm -rf dist # Remove build directory (be careful!)
130
+
131
+ # Search and find
132
+ grep -r "searchTerm" src/ # Search in source files
133
+ find . -name "*.tsx" -type f # Find all TSX files
134
+
135
+ # Process management
136
+ lsof -i :5173 # Check what's using the dev server port
137
+ kill -9 <PID> # Force kill a process if needed
138
+ ```
139
+
140
+ ### Development Workflow Commands
141
+ ```bash
142
+ # Start fresh development session
143
+ git pull origin main
144
+ pnpm install
145
+ pnpm run dev
146
+
147
+ # Before committing
148
+ pnpm run build # Ensure build passes
149
+ git status # Review changes
150
+ git diff # Check modifications
151
+
152
+ # After making changes
153
+ git add -A
154
+ git commit -m "type(scope): description"
155
+ git push
156
+
157
+ # Publishing new version
158
+ pnpm version patch/minor/major
159
+ pnpm run build
160
+ pnpm run publish
161
+ ```
@@ -0,0 +1,324 @@
1
+ {
2
+ "asyncapi": "3.0.0",
3
+ "info": {
4
+ "title": "Chat WebSocket API",
5
+ "version": "1.0.0",
6
+ "description": "Real-time chat API using WebSocket for bidirectional communication"
7
+ },
8
+ "servers": {
9
+ "development": {
10
+ "host": "localhost:8080",
11
+ "pathname": "/ws",
12
+ "protocol": "ws",
13
+ "description": "Development WebSocket server"
14
+ },
15
+ "production": {
16
+ "host": "api.example.com",
17
+ "pathname": "/ws",
18
+ "protocol": "wss",
19
+ "description": "Production WebSocket server"
20
+ }
21
+ },
22
+ "channels": {
23
+ "/chat": {
24
+ "address": "/chat",
25
+ "title": "Chat Channel",
26
+ "description": "Channel for sending and receiving chat messages",
27
+ "subscribe": {
28
+ "operationId": "receiveChatMessage",
29
+ "summary": "Receive chat messages",
30
+ "description": "Subscribe to receive chat messages from other users",
31
+ "message": {
32
+ "$ref": "#/components/messages/ChatMessage"
33
+ }
34
+ },
35
+ "publish": {
36
+ "operationId": "sendChatMessage",
37
+ "summary": "Send chat message",
38
+ "description": "Send a chat message to other users",
39
+ "message": {
40
+ "$ref": "#/components/messages/ChatMessage"
41
+ }
42
+ }
43
+ },
44
+ "/notifications": {
45
+ "address": "/notifications",
46
+ "title": "Notifications Channel",
47
+ "description": "Channel for receiving system notifications",
48
+ "subscribe": {
49
+ "operationId": "receiveNotification",
50
+ "summary": "Receive notifications",
51
+ "description": "Subscribe to receive system notifications",
52
+ "message": {
53
+ "$ref": "#/components/messages/Notification"
54
+ }
55
+ }
56
+ },
57
+ "/presence": {
58
+ "address": "/presence",
59
+ "title": "Presence Channel",
60
+ "description": "Channel for user presence updates",
61
+ "subscribe": {
62
+ "operationId": "receivePresenceUpdate",
63
+ "summary": "Receive presence updates",
64
+ "description": "Subscribe to receive user presence updates",
65
+ "message": {
66
+ "$ref": "#/components/messages/PresenceUpdate"
67
+ }
68
+ },
69
+ "publish": {
70
+ "operationId": "sendPresenceUpdate",
71
+ "summary": "Send presence update",
72
+ "description": "Send a presence update",
73
+ "message": {
74
+ "$ref": "#/components/messages/PresenceUpdate"
75
+ }
76
+ }
77
+ }
78
+ },
79
+ "components": {
80
+ "messages": {
81
+ "ChatMessage": {
82
+ "name": "ChatMessage",
83
+ "title": "Chat Message",
84
+ "summary": "Message sent in a chat conversation",
85
+ "description": "A message sent by a user in a chat conversation",
86
+ "contentType": "application/json",
87
+ "payload": {
88
+ "$ref": "#/components/schemas/ChatMessagePayload"
89
+ },
90
+ "headers": {
91
+ "$ref": "#/components/schemas/MessageHeaders"
92
+ },
93
+ "examples": [
94
+ {
95
+ "id": "msg_123",
96
+ "type": "message",
97
+ "content": "Hello, how are you?",
98
+ "userId": "user_456",
99
+ "username": "john_doe",
100
+ "timestamp": "2024-01-15T10:30:00Z",
101
+ "channel": "general"
102
+ }
103
+ ]
104
+ },
105
+ "Notification": {
106
+ "name": "Notification",
107
+ "title": "System Notification",
108
+ "summary": "System-generated notification",
109
+ "description": "A notification sent by the system to inform users about events",
110
+ "contentType": "application/json",
111
+ "payload": {
112
+ "$ref": "#/components/schemas/NotificationPayload"
113
+ },
114
+ "headers": {
115
+ "$ref": "#/components/schemas/MessageHeaders"
116
+ },
117
+ "examples": [
118
+ {
119
+ "id": "notif_789",
120
+ "type": "notification",
121
+ "title": "New Message",
122
+ "message": "You have a new message from Alice",
123
+ "level": "info",
124
+ "timestamp": "2024-01-15T10:35:00Z",
125
+ "userId": "user_456"
126
+ }
127
+ ]
128
+ },
129
+ "PresenceUpdate": {
130
+ "name": "PresenceUpdate",
131
+ "title": "Presence Update",
132
+ "summary": "User presence status update",
133
+ "description": "Update about a user's presence status (online, offline, away)",
134
+ "contentType": "application/json",
135
+ "payload": {
136
+ "$ref": "#/components/schemas/PresenceUpdatePayload"
137
+ },
138
+ "headers": {
139
+ "$ref": "#/components/schemas/MessageHeaders"
140
+ },
141
+ "examples": [
142
+ {
143
+ "id": "presence_101",
144
+ "type": "presence",
145
+ "userId": "user_456",
146
+ "username": "john_doe",
147
+ "status": "online",
148
+ "lastSeen": "2024-01-15T10:40:00Z",
149
+ "timestamp": "2024-01-15T10:40:00Z"
150
+ }
151
+ ]
152
+ }
153
+ },
154
+ "schemas": {
155
+ "ChatMessagePayload": {
156
+ "type": "object",
157
+ "required": ["id", "type", "content", "userId", "username", "timestamp"],
158
+ "properties": {
159
+ "id": {
160
+ "type": "string",
161
+ "description": "Unique identifier for the message",
162
+ "example": "msg_123"
163
+ },
164
+ "type": {
165
+ "type": "string",
166
+ "enum": ["message"],
167
+ "description": "Message type identifier",
168
+ "example": "message"
169
+ },
170
+ "content": {
171
+ "type": "string",
172
+ "description": "The message content",
173
+ "example": "Hello, how are you?"
174
+ },
175
+ "userId": {
176
+ "type": "string",
177
+ "description": "ID of the user who sent the message",
178
+ "example": "user_456"
179
+ },
180
+ "username": {
181
+ "type": "string",
182
+ "description": "Username of the sender",
183
+ "example": "john_doe"
184
+ },
185
+ "timestamp": {
186
+ "type": "string",
187
+ "format": "date-time",
188
+ "description": "When the message was sent",
189
+ "example": "2024-01-15T10:30:00Z"
190
+ },
191
+ "channel": {
192
+ "type": "string",
193
+ "description": "Channel where the message was sent",
194
+ "example": "general"
195
+ },
196
+ "replyTo": {
197
+ "type": "string",
198
+ "description": "ID of the message this is replying to",
199
+ "example": "msg_122"
200
+ }
201
+ }
202
+ },
203
+ "NotificationPayload": {
204
+ "type": "object",
205
+ "required": ["id", "type", "title", "message", "timestamp"],
206
+ "properties": {
207
+ "id": {
208
+ "type": "string",
209
+ "description": "Unique identifier for the notification",
210
+ "example": "notif_789"
211
+ },
212
+ "type": {
213
+ "type": "string",
214
+ "enum": ["notification"],
215
+ "description": "Message type identifier",
216
+ "example": "notification"
217
+ },
218
+ "title": {
219
+ "type": "string",
220
+ "description": "Notification title",
221
+ "example": "New Message"
222
+ },
223
+ "message": {
224
+ "type": "string",
225
+ "description": "Notification message content",
226
+ "example": "You have a new message from Alice"
227
+ },
228
+ "level": {
229
+ "type": "string",
230
+ "enum": ["info", "warning", "error", "success"],
231
+ "description": "Notification level",
232
+ "example": "info"
233
+ },
234
+ "timestamp": {
235
+ "type": "string",
236
+ "format": "date-time",
237
+ "description": "When the notification was created",
238
+ "example": "2024-01-15T10:35:00Z"
239
+ },
240
+ "userId": {
241
+ "type": "string",
242
+ "description": "ID of the user receiving the notification",
243
+ "example": "user_456"
244
+ },
245
+ "actionUrl": {
246
+ "type": "string",
247
+ "description": "URL to navigate to when notification is clicked",
248
+ "example": "/chat/general"
249
+ }
250
+ }
251
+ },
252
+ "PresenceUpdatePayload": {
253
+ "type": "object",
254
+ "required": ["id", "type", "userId", "username", "status", "timestamp"],
255
+ "properties": {
256
+ "id": {
257
+ "type": "string",
258
+ "description": "Unique identifier for the presence update",
259
+ "example": "presence_101"
260
+ },
261
+ "type": {
262
+ "type": "string",
263
+ "enum": ["presence"],
264
+ "description": "Message type identifier",
265
+ "example": "presence"
266
+ },
267
+ "userId": {
268
+ "type": "string",
269
+ "description": "ID of the user whose presence is being updated",
270
+ "example": "user_456"
271
+ },
272
+ "username": {
273
+ "type": "string",
274
+ "description": "Username of the user",
275
+ "example": "john_doe"
276
+ },
277
+ "status": {
278
+ "type": "string",
279
+ "enum": ["online", "offline", "away", "busy"],
280
+ "description": "User's presence status",
281
+ "example": "online"
282
+ },
283
+ "lastSeen": {
284
+ "type": "string",
285
+ "format": "date-time",
286
+ "description": "When the user was last seen",
287
+ "example": "2024-01-15T10:40:00Z"
288
+ },
289
+ "timestamp": {
290
+ "type": "string",
291
+ "format": "date-time",
292
+ "description": "When the presence update was sent",
293
+ "example": "2024-01-15T10:40:00Z"
294
+ }
295
+ }
296
+ },
297
+ "MessageHeaders": {
298
+ "type": "object",
299
+ "properties": {
300
+ "correlation-id": {
301
+ "type": "string",
302
+ "description": "Correlation ID for request tracking",
303
+ "example": "corr_123"
304
+ },
305
+ "user-id": {
306
+ "type": "string",
307
+ "description": "ID of the user sending the message",
308
+ "example": "user_456"
309
+ },
310
+ "session-id": {
311
+ "type": "string",
312
+ "description": "Session ID for the connection",
313
+ "example": "sess_789"
314
+ },
315
+ "client-version": {
316
+ "type": "string",
317
+ "description": "Version of the client application",
318
+ "example": "1.0.0"
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ }
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'SUBSCRIBE /chat'
3
+ description: 'Subscribe to receive chat messages from other users'
4
+ asyncapi: 'subscribe /chat'
5
+ ---
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'SUBSCRIBE /notifications'
3
+ description: 'Subscribe to receive system notifications'
4
+ asyncapi: 'subscribe /notifications'
5
+ ---
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'SUBSCRIBE /presence'
3
+ description: 'Subscribe to receive user presence updates'
4
+ asyncapi: 'subscribe /presence'
5
+ ---
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'PUBLISH /chat'
3
+ description: 'Send a chat message to other users'
4
+ asyncapi: 'publish /chat'
5
+ ---
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: 'PUBLISH /presence'
3
+ description: 'Send a presence update'
4
+ asyncapi: 'publish /presence'
5
+ ---
package/docs/dory.json CHANGED
@@ -23,6 +23,12 @@
23
23
  "features"
24
24
  ]
25
25
  },
26
+ {
27
+ "group": "Playground",
28
+ "pages": [
29
+ "websocket-playground-demo"
30
+ ]
31
+ },
26
32
  {
27
33
  "group": "API Reference",
28
34
  "pages": [
@@ -31,6 +37,16 @@
31
37
  "api-reference/operations/update",
32
38
  "api-reference/operations/delete"
33
39
  ]
40
+ },
41
+ {
42
+ "group": "WebSocket API Reference",
43
+ "pages": [
44
+ "api-reference/websocket-operations/send-chat-message",
45
+ "api-reference/websocket-operations/receive-chat-message",
46
+ "api-reference/websocket-operations/receive-notifications",
47
+ "api-reference/websocket-operations/send-presence-update",
48
+ "api-reference/websocket-operations/receive-presence-update"
49
+ ]
34
50
  }
35
51
  ]
36
52
  }