clawck 0.1.3 → 0.4.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 (106) hide show
  1. package/README.md +251 -174
  2. package/dist/cli/index.js +947 -87
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/core/atp.d.ts +31 -0
  5. package/dist/core/atp.d.ts.map +1 -0
  6. package/dist/core/atp.js +96 -0
  7. package/dist/core/atp.js.map +1 -0
  8. package/dist/core/benchmarks.d.ts +20 -0
  9. package/dist/core/benchmarks.d.ts.map +1 -0
  10. package/dist/core/benchmarks.js +86 -0
  11. package/dist/core/benchmarks.js.map +1 -0
  12. package/dist/core/clawck.d.ts +39 -3
  13. package/dist/core/clawck.d.ts.map +1 -1
  14. package/dist/core/clawck.js +140 -18
  15. package/dist/core/clawck.js.map +1 -1
  16. package/dist/core/database.d.ts +16 -1
  17. package/dist/core/database.d.ts.map +1 -1
  18. package/dist/core/database.js +177 -8
  19. package/dist/core/database.js.map +1 -1
  20. package/dist/core/patterns.d.ts +7 -0
  21. package/dist/core/patterns.d.ts.map +1 -0
  22. package/dist/core/patterns.js +36 -0
  23. package/dist/core/patterns.js.map +1 -0
  24. package/dist/core/personal.d.ts +26 -0
  25. package/dist/core/personal.d.ts.map +1 -0
  26. package/dist/core/personal.js +60 -0
  27. package/dist/core/personal.js.map +1 -0
  28. package/dist/core/runtime.d.ts +17 -0
  29. package/dist/core/runtime.d.ts.map +1 -0
  30. package/dist/core/runtime.js +43 -0
  31. package/dist/core/runtime.js.map +1 -0
  32. package/dist/core/types.d.ts +93 -2
  33. package/dist/core/types.d.ts.map +1 -1
  34. package/dist/core/types.js +9 -2
  35. package/dist/core/types.js.map +1 -1
  36. package/dist/core/webhooks.d.ts +22 -0
  37. package/dist/core/webhooks.d.ts.map +1 -0
  38. package/dist/core/webhooks.js +70 -0
  39. package/dist/core/webhooks.js.map +1 -0
  40. package/dist/hooks/adapters.d.ts +8 -0
  41. package/dist/hooks/adapters.d.ts.map +1 -0
  42. package/dist/hooks/adapters.js +152 -0
  43. package/dist/hooks/adapters.js.map +1 -0
  44. package/dist/hooks/handler.d.ts +9 -0
  45. package/dist/hooks/handler.d.ts.map +1 -0
  46. package/dist/hooks/handler.js +93 -0
  47. package/dist/hooks/handler.js.map +1 -0
  48. package/dist/hooks/index.d.ts +10 -0
  49. package/dist/hooks/index.d.ts.map +1 -0
  50. package/dist/hooks/index.js +23 -0
  51. package/dist/hooks/index.js.map +1 -0
  52. package/dist/hooks/install.d.ts +16 -0
  53. package/dist/hooks/install.d.ts.map +1 -0
  54. package/dist/hooks/install.js +247 -0
  55. package/dist/hooks/install.js.map +1 -0
  56. package/dist/hooks/session.d.ts +10 -0
  57. package/dist/hooks/session.d.ts.map +1 -0
  58. package/dist/hooks/session.js +72 -0
  59. package/dist/hooks/session.js.map +1 -0
  60. package/dist/hooks/stdin.d.ts +6 -0
  61. package/dist/hooks/stdin.d.ts.map +1 -0
  62. package/dist/hooks/stdin.js +38 -0
  63. package/dist/hooks/stdin.js.map +1 -0
  64. package/dist/hooks/types.d.ts +26 -0
  65. package/dist/hooks/types.d.ts.map +1 -0
  66. package/dist/hooks/types.js +7 -0
  67. package/dist/hooks/types.js.map +1 -0
  68. package/dist/index.d.ts +10 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/reports/html.d.ts +14 -0
  73. package/dist/reports/html.d.ts.map +1 -0
  74. package/dist/reports/html.js +353 -0
  75. package/dist/reports/html.js.map +1 -0
  76. package/dist/reports/pdf.d.ts +14 -0
  77. package/dist/reports/pdf.d.ts.map +1 -0
  78. package/dist/reports/pdf.js +177 -0
  79. package/dist/reports/pdf.js.map +1 -0
  80. package/dist/reports/periods.d.ts +18 -0
  81. package/dist/reports/periods.d.ts.map +1 -0
  82. package/dist/reports/periods.js +55 -0
  83. package/dist/reports/periods.js.map +1 -0
  84. package/dist/server/api.d.ts.map +1 -1
  85. package/dist/server/api.js +156 -2
  86. package/dist/server/api.js.map +1 -1
  87. package/dist/server/mcp.d.ts.map +1 -1
  88. package/dist/server/mcp.js +31 -10
  89. package/dist/server/mcp.js.map +1 -1
  90. package/docs/atp-schema.json +298 -0
  91. package/docs/atp-spec-v0.2.md +216 -0
  92. package/docs/benchmarks-sources.md +202 -0
  93. package/docs/platform-testing-guide.md +423 -0
  94. package/docs/skills/clawck-setup.md +131 -0
  95. package/docs/skills/clawck-usage.md +148 -0
  96. package/docs/snippets/claude-md.txt +33 -0
  97. package/docs/snippets/hooks-claude.json +24 -0
  98. package/docs/snippets/hooks-cline.txt +10 -0
  99. package/docs/snippets/hooks-codex.json +16 -0
  100. package/docs/snippets/hooks-cursor.json +16 -0
  101. package/docs/snippets/hooks-gemini.json +16 -0
  102. package/docs/snippets/hooks-windsurf.json +16 -0
  103. package/docs/snippets/mcp-config.json +7 -0
  104. package/docs/snippets/openclaw-agent-md.txt +18 -0
  105. package/docs/snippets/openclaw-heartbeat-md.txt +17 -0
  106. package/package.json +4 -2
@@ -0,0 +1,131 @@
1
+ # Clawck Setup Guide
2
+
3
+ Integrate Clawck generation time tracking into your AI agent platform. Clawck measures how long an AI agent's computation, reasoning, and response generation take per turn — it is NOT human time tracking.
4
+
5
+ ## Claude Code
6
+
7
+ ### 1. Add MCP Server
8
+
9
+ Add to your `mcp_servers.json` (or `~/.claude/mcp_servers.json` for global):
10
+
11
+ ```json
12
+ {
13
+ "clawck": {
14
+ "command": "npx",
15
+ "args": ["-y", "clawck", "mcp"],
16
+ "env": {}
17
+ }
18
+ }
19
+ ```
20
+
21
+ ### 2. Add CLAUDE.md Instructions
22
+
23
+ Add the following to your project's `CLAUDE.md` (or `~/.claude/CLAUDE.md` for global):
24
+
25
+ ```markdown
26
+ ## Generation Time Tracking (Clawck)
27
+
28
+ You have Clawck tools via MCP that measure YOUR generation time — how long your computation, reasoning, tool calls, and response generation take. This is NOT human time tracking. You are timing your own AI processing.
29
+
30
+ You MUST time every turn automatically:
31
+
32
+ 1. **Start of every turn**: Call `clawck_start_task` IMMEDIATELY when you receive a message, BEFORE doing any other work.
33
+ 2. **End of every turn**: Call `clawck_stop_task` as the LAST action before sending your reply.
34
+ 3. **Every turn**: Each user message = one generation cycle. A 5-message conversation = 5 time entries.
35
+ 4. **Errors**: Always stop the timer even on failure — use `status: "failed"`.
36
+ 5. **Forgot to start?** Use `clawck_log_task` with an estimated duration.
37
+ ```
38
+
39
+ Run `clawck setup claude` to get the full snippet.
40
+
41
+ ## OpenClaw
42
+
43
+ OpenClaw agents use behavioral files for persistent integration:
44
+
45
+ ### AGENT.md
46
+
47
+ Add clawck rules to your `AGENT.md`. Run `clawck setup openclaw` for the snippet.
48
+
49
+ ### HEARTBEAT.md
50
+
51
+ Add per-turn hooks to your `HEARTBEAT.md`. Run `clawck setup openclaw` for the snippet.
52
+
53
+ ### SOUL.md
54
+
55
+ Add accountability identity to your `SOUL.md`:
56
+
57
+ ```markdown
58
+ I track my own work time using Clawck. Every turn I clock in and out automatically.
59
+ This is part of my accountability to the humans I work for — they deserve to know
60
+ how their AI resources are being spent.
61
+ ```
62
+
63
+ ## Cursor / Cline / Windsurf
64
+
65
+ These editors support MCP servers. Add the clawck MCP config to:
66
+
67
+ - **Cursor**: `.cursor/mcp.json` in your project root
68
+ - **Cline**: VS Code settings → Cline → MCP Servers
69
+ - **Windsurf**: `.windsurf/mcp.json` in your project root
70
+
71
+ The MCP config block is the same for all:
72
+
73
+ ```json
74
+ {
75
+ "clawck": {
76
+ "command": "npx",
77
+ "args": ["-y", "clawck", "mcp"],
78
+ "env": {}
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## API Agents (Python / n8n / LangGraph)
84
+
85
+ For agents that don't support MCP natively, use the Clawck REST API:
86
+
87
+ ### Start the server
88
+
89
+ ```bash
90
+ clawck serve --port 3456
91
+ ```
92
+
93
+ ### Python wrapper
94
+
95
+ ```python
96
+ import requests
97
+ import time
98
+
99
+ CLAWCK_URL = "http://localhost:3456/api"
100
+
101
+ def clawck_start(task, project="", client="", category="code"):
102
+ r = requests.post(f"{CLAWCK_URL}/start", json={
103
+ "task": task, "project": project, "client": client, "category": category
104
+ })
105
+ return r.json()["id"]
106
+
107
+ def clawck_stop(entry_id, status="completed", summary=""):
108
+ requests.post(f"{CLAWCK_URL}/stop", json={
109
+ "id": entry_id, "status": status, "summary": summary
110
+ })
111
+ ```
112
+
113
+ ### n8n / LangGraph
114
+
115
+ Use HTTP Request nodes to call the REST API at `http://localhost:3456/api/start` and `/api/stop` at the beginning and end of each agent turn.
116
+
117
+ ## Quick Start CLI
118
+
119
+ ```bash
120
+ # See all setup options
121
+ clawck setup
122
+
123
+ # Get CLAUDE.md snippet
124
+ clawck setup claude
125
+
126
+ # Get MCP config JSON
127
+ clawck setup mcp
128
+
129
+ # Get OpenClaw snippets
130
+ clawck setup openclaw
131
+ ```
@@ -0,0 +1,148 @@
1
+ # Clawck Usage Protocol
2
+
3
+ Detailed guide for AI agents using Clawck to measure their own generation time.
4
+
5
+ ## What Clawck Measures
6
+
7
+ Clawck measures **your active generation/computation time** — the wall-clock duration from when you start processing a user message to when you finish generating your response. This is NOT human time tracking. Typical durations are seconds to minutes. Think of it as a stopwatch on your own CPU.
8
+
9
+ The resulting data enables:
10
+ - **Billing**: How much compute time each task consumed
11
+ - **Cost analysis**: Tokens + cost per task/project/client
12
+ - **Human-equivalent estimates**: How long this work would take a human (calculated from the `category`)
13
+ - **ROI reporting**: Agent cost vs. human-equivalent cost
14
+
15
+ ## Generation Lifecycle
16
+
17
+ Every agent turn follows this lifecycle:
18
+
19
+ ```
20
+ User message received
21
+
22
+
23
+ ┌─ clawck_start_task ──────────┐
24
+ │ (start generation timer) │
25
+ └──────────────────────────────┘
26
+
27
+
28
+ ┌─ Process request ────────────┐
29
+ │ • Reason / plan │
30
+ │ • Call tools │
31
+ │ • Write code │
32
+ │ • Generate output │
33
+ │ (all ONE generation cycle) │
34
+ └──────────────────────────────┘
35
+
36
+
37
+ ┌─ clawck_stop_task ───────────┐
38
+ │ (stop generation timer) │
39
+ └──────────────────────────────┘
40
+
41
+
42
+ Send response to user
43
+ ```
44
+
45
+ ## Multi-Message Tracking
46
+
47
+ Each turn in a conversation is timed independently:
48
+
49
+ | Turn | User Says | Agent Times |
50
+ |------|-----------|-------------|
51
+ | 1 | "Fix the login bug" | start → generate → stop (entry 1) |
52
+ | 2 | "Add tests for it" | start → generate → stop (entry 2) |
53
+ | 3 | "Deploy to staging" | start → generate → stop (entry 3) |
54
+
55
+ A 5-message session produces 5 time entries. This gives granular visibility into what each generation cycle cost.
56
+
57
+ ## Field Guidelines
58
+
59
+ ### task
60
+ Describe what YOU (the agent) are doing, not what the user asked:
61
+ - Good: "Refactor auth module to use JWT tokens"
62
+ - Bad: "User asked me to fix authentication"
63
+
64
+ ### project
65
+ The project being worked on. Infer from context, directory name, or ask once and reuse:
66
+ - "website-rebuild", "grant-research", "api-v2"
67
+
68
+ ### client
69
+ The client or organization. Infer from context or prior entries:
70
+ - "acme-corp", "internal", "my-company"
71
+
72
+ ### category
73
+ Classify the type of work. Available categories:
74
+ - `code` — Writing, reviewing, or refactoring code
75
+ - `research` — Searching, reading, analyzing information
76
+ - `content` — Writing docs, emails, copy, blog posts
77
+ - `analysis` — Data analysis, reporting, insights
78
+ - `data_entry` — Data migration, formatting, entry
79
+ - `communication` — Emails, messages, outreach
80
+ - `testing` — Writing or running tests
81
+ - `design` — UI/UX design, mockups, wireframes
82
+
83
+ ### summary (on stop)
84
+ Brief description of what was accomplished:
85
+ - "Fixed JWT token refresh logic and added error handling"
86
+ - "Searched 3 grant databases, found 2 relevant opportunities"
87
+
88
+ ### tokens / cost (on stop)
89
+ Report if your platform provides this data:
90
+ - `tokens_in`: Input tokens consumed this turn
91
+ - `tokens_out`: Output tokens generated this turn
92
+ - `cost_usd`: Estimated cost in USD
93
+
94
+ ## Edge Cases
95
+
96
+ ### Errors / Failures
97
+ Always stop the timer even when things go wrong:
98
+ ```
99
+ clawck_stop_task({ id: "...", status: "failed", summary: "Build failed due to missing dependency" })
100
+ ```
101
+
102
+ ### Forgot to Start the Timer
103
+ Use retroactive logging:
104
+ ```
105
+ clawck_log_task({ task: "Debug API timeout", duration_minutes: 3, project: "api-v2", category: "code" })
106
+ ```
107
+
108
+ ### Long Generations
109
+ If a turn takes unusually long (e.g., large codebase analysis), that's fine — one turn = one entry regardless of duration.
110
+
111
+ ### Idle Time Between Turns
112
+ Do NOT track time between turns. Only measure your active generation time within a turn. The time between your response and the user's next message is NOT your computation — don't record it.
113
+
114
+ ### Sub-Tasks Within a Turn
115
+ All work within one turn is a single entry. If you call 10 tools during one turn, that's still ONE generation cycle. Don't create separate entries for each tool call.
116
+
117
+ ## Examples
118
+
119
+ ### Basic Turn
120
+ ```
121
+ 1. Receive: "Add input validation to the signup form"
122
+ 2. clawck_start_task({ task: "Add input validation to signup form", project: "website", client: "acme-corp", category: "code" })
123
+ → Timer starts. Your generation begins.
124
+ 3. Read files, write code, run tests
125
+ 4. clawck_stop_task({ id: "abc-123", status: "completed", summary: "Added email format and password strength validation", tokens_out: 1500 })
126
+ → Timer stops. Your generation is complete.
127
+ 5. Send response
128
+ ```
129
+
130
+ ### Failed Task
131
+ ```
132
+ 1. Receive: "Deploy to production"
133
+ 2. clawck_start_task({ task: "Deploy to production", project: "api-v2", client: "acme-corp", category: "code" })
134
+ 3. Attempt deployment, encounter error
135
+ 4. clawck_stop_task({ id: "def-456", status: "failed", summary: "Deploy failed: missing ENV vars on production server" })
136
+ 5. Send error response to user
137
+ ```
138
+
139
+ ### Retroactive Log
140
+ ```
141
+ 1. Receive: "What was that error about?"
142
+ 2. Realize forgot to start timer on previous turn
143
+ 3. clawck_log_task({ task: "Diagnosed API timeout in payment service", duration_minutes: 2, project: "api-v2", category: "code" })
144
+ 4. clawck_start_task({ task: "Explain previous API timeout diagnosis", project: "api-v2", category: "communication" })
145
+ 5. Explain the error
146
+ 6. clawck_stop_task({ id: "ghi-789", status: "completed", summary: "Explained root cause of API timeout to user" })
147
+ 7. Send response
148
+ ```
@@ -0,0 +1,33 @@
1
+ ## Generation Time Tracking (Clawck)
2
+
3
+ If you have Clawck hooks configured (UserPromptSubmit/Stop), your generation time is tracked automatically — no action needed on your part.
4
+
5
+ You also have Clawck MCP tools available for explicit control. Use these when you want to:
6
+ - Set a more descriptive task name than the auto-captured prompt
7
+ - Add specific project/client/category metadata
8
+ - Log a retroactive entry with `clawck_log_task`
9
+
10
+ ### Available MCP Tools
11
+ - `clawck_start_task` — Start a timer (overrides the hook's auto-start for this turn)
12
+ - `clawck_stop_task` — Stop a timer with status and summary
13
+ - `clawck_log_task` — Log a completed task retroactively
14
+ - `clawck_status` — Check running tasks
15
+ - `clawck_timesheet` — Get timesheet summary
16
+
17
+ ### When to use MCP tools explicitly
18
+ - You do NOT need to call start/stop every turn if hooks are active
19
+ - Use them when you have better context about what the task actually is
20
+ - Always include project/client/category when you have that context
21
+
22
+ ### Field Guidelines
23
+ - `task`: Describe what YOU are doing (e.g., "Refactor auth module"), not what the user asked.
24
+ - `project` / `client`: Include if known from context or previous entries.
25
+ - `category`: Classify the work type (code, research, content, analysis, etc.).
26
+ - `summary`: Brief description of what was accomplished when stopping.
27
+ - `tokens_in` / `tokens_out` / `cost_usd`: Report if available.
28
+
29
+ ### Important
30
+ - Do NOT ask the user for permission to track. Just do it.
31
+ - All tool calls within one turn are ONE generation cycle, not separate entries.
32
+ - Do NOT skip tracking on "simple" turns — time everything.
33
+ - Do NOT track time between turns — only measure your active generation.
@@ -0,0 +1,24 @@
1
+ {
2
+ "hooks": {
3
+ "UserPromptSubmit": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "clawck hook start"
9
+ }
10
+ ]
11
+ }
12
+ ],
13
+ "Stop": [
14
+ {
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "clawck hook stop"
19
+ }
20
+ ]
21
+ }
22
+ ]
23
+ }
24
+ }
@@ -0,0 +1,10 @@
1
+ # Cline Hook Scripts
2
+ # Place these as executable scripts in .clinerules/hooks/
3
+
4
+ # --- .clinerules/hooks/TaskStart ---
5
+ #!/bin/bash
6
+ clawck hook start
7
+
8
+ # --- .clinerules/hooks/PostToolUse ---
9
+ #!/bin/bash
10
+ clawck hook stop
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "turn-start": [
4
+ {
5
+ "type": "command",
6
+ "command": "clawck hook start"
7
+ }
8
+ ],
9
+ "agent-turn-complete": [
10
+ {
11
+ "type": "command",
12
+ "command": "clawck hook stop"
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "pre_user_prompt": [
4
+ {
5
+ "type": "command",
6
+ "command": "clawck hook start"
7
+ }
8
+ ],
9
+ "stop": [
10
+ {
11
+ "type": "command",
12
+ "command": "clawck hook stop"
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "BeforeAgent": [
4
+ {
5
+ "type": "command",
6
+ "command": "clawck hook start"
7
+ }
8
+ ],
9
+ "AfterAgent": [
10
+ {
11
+ "type": "command",
12
+ "command": "clawck hook stop"
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "pre_user_prompt": [
4
+ {
5
+ "type": "command",
6
+ "command": "clawck hook start"
7
+ }
8
+ ],
9
+ "post_agent": [
10
+ {
11
+ "type": "command",
12
+ "command": "clawck hook stop"
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "clawck": {
3
+ "command": "npx",
4
+ "args": ["-y", "clawck", "mcp"],
5
+ "env": {}
6
+ }
7
+ }
@@ -0,0 +1,18 @@
1
+ ## Generation Time Tracking (Clawck)
2
+
3
+ You are responsible for measuring your own generation time using Clawck MCP tools. This is NOT human time tracking — you are timing how long YOUR computation, reasoning, and response generation take per turn. Think of it as a stopwatch on your own processing.
4
+
5
+ ### Rules
6
+ - Start the timer (`clawck_start_task`) at the START of every generation turn.
7
+ - Stop the timer (`clawck_stop_task`) at the END of every generation turn.
8
+ - One turn = one time entry. Multiple tool calls within a turn are one generation cycle.
9
+ - Always stop the timer on failure with `status: "failed"`.
10
+ - If you forgot to start the timer, use `clawck_log_task` with an estimated duration.
11
+ - Never skip timing. Never ask permission. Never track idle time between turns.
12
+
13
+ ### Fields
14
+ - `task`: What you are doing this turn.
15
+ - `project` / `client`: From context or prior entries.
16
+ - `category`: code | research | content | analysis | data_entry | communication | testing | design
17
+ - `summary`: What was accomplished (on stop).
18
+ - Token counts and cost if available.
@@ -0,0 +1,17 @@
1
+ ## Per-Turn Generation Timing (Clawck)
2
+
3
+ ### On Message Received
4
+ 1. Call `clawck_start_task` with task description, project, client, and category.
5
+ 2. Store the returned entry ID for stopping the timer later.
6
+ 3. This marks the START of your generation — the moment you begin processing.
7
+
8
+ ### On Response Complete
9
+ 1. Call `clawck_stop_task` with the entry ID, status, summary, and token/cost data.
10
+ 2. This marks the END of your generation — the moment you finish producing output.
11
+ 3. This MUST happen even if the turn resulted in an error.
12
+
13
+ ### On Error
14
+ 1. Call `clawck_stop_task` with `status: "failed"` and a summary of what went wrong.
15
+
16
+ ### Missed Timer Start
17
+ 1. Call `clawck_log_task` with estimated `duration_minutes` and task details.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawck",
3
- "version": "0.1.3",
3
+ "version": "0.4.1",
4
4
  "description": "⏱️🦀 Time tracking for AI agents. Toggl for the agentic era.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -38,8 +38,8 @@
38
38
  "homepage": "https://clawck.dev",
39
39
  "dependencies": {
40
40
  "better-sqlite3": "^12.6.2",
41
- "chalk": "^5.3.0",
42
41
  "commander": "^12.0.0",
42
+ "pdfkit": "^0.15.0",
43
43
  "cors": "^2.8.5",
44
44
  "express": "^4.21.0",
45
45
  "uuid": "^10.0.0"
@@ -49,6 +49,7 @@
49
49
  "@types/cors": "^2.8.0",
50
50
  "@types/express": "^4.17.0",
51
51
  "@types/node": "^22.0.0",
52
+ "@types/pdfkit": "^0.13.0",
52
53
  "@types/supertest": "^7.2.0",
53
54
  "@types/uuid": "^10.0.0",
54
55
  "supertest": "^7.2.2",
@@ -61,6 +62,7 @@
61
62
  },
62
63
  "files": [
63
64
  "dist/",
65
+ "docs/",
64
66
  "README.md",
65
67
  "LICENSE"
66
68
  ]