@nextsparkjs/ai-workflow 0.1.0-beta.100
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/LICENSE +21 -0
- package/README.md +115 -0
- package/claude/_docs/workflows-optimizations.md +359 -0
- package/claude/agents/api-tester.md +634 -0
- package/claude/agents/architecture-supervisor.md +1351 -0
- package/claude/agents/backend-developer.md +997 -0
- package/claude/agents/backend-validator.md +417 -0
- package/claude/agents/bdd-docs-writer.md +737 -0
- package/claude/agents/block-developer.md +677 -0
- package/claude/agents/code-reviewer.md +1432 -0
- package/claude/agents/db-developer.md +721 -0
- package/claude/agents/db-validator.md +407 -0
- package/claude/agents/demo-video-generator.md +493 -0
- package/claude/agents/documentation-writer.md +1268 -0
- package/claude/agents/frontend-developer.md +1234 -0
- package/claude/agents/frontend-validator.md +777 -0
- package/claude/agents/functional-validator.md +630 -0
- package/claude/agents/mock-analyst.md +387 -0
- package/claude/agents/product-manager.md +963 -0
- package/claude/agents/qa-automation.md +1762 -0
- package/claude/agents/release-manager.md +634 -0
- package/claude/agents/selectors-translator.md +262 -0
- package/claude/agents/unit-test-writer.md +785 -0
- package/claude/agents/visual-comparator.md +329 -0
- package/claude/agents/workflow-maintainer.md +352 -0
- package/claude/commands/do/README.md +88 -0
- package/claude/commands/do/create-api.md +64 -0
- package/claude/commands/do/create-entity.md +66 -0
- package/claude/commands/do/create-migration.md +64 -0
- package/claude/commands/do/create-plugin.md +56 -0
- package/claude/commands/do/create-theme.md +70 -0
- package/claude/commands/do/mock-data.md +67 -0
- package/claude/commands/do/reset-db.md +71 -0
- package/claude/commands/do/setup-scheduled-action.md +75 -0
- package/claude/commands/do/sync-code-review.md +117 -0
- package/claude/commands/do/update-selectors.md +112 -0
- package/claude/commands/do/use-skills.md +90 -0
- package/claude/commands/do/validate-blocks.md +69 -0
- package/claude/commands/how-to/README.md +261 -0
- package/claude/commands/how-to/add-metadata.md +692 -0
- package/claude/commands/how-to/add-taxonomies.md +806 -0
- package/claude/commands/how-to/add-translations.md +571 -0
- package/claude/commands/how-to/create-api.md +577 -0
- package/claude/commands/how-to/create-block.md +575 -0
- package/claude/commands/how-to/create-child-entities.md +771 -0
- package/claude/commands/how-to/create-entity.md +597 -0
- package/claude/commands/how-to/create-migrations.md +605 -0
- package/claude/commands/how-to/create-plugin.md +654 -0
- package/claude/commands/how-to/customize-app.md +481 -0
- package/claude/commands/how-to/customize-dashboard.md +553 -0
- package/claude/commands/how-to/customize-theme.md +438 -0
- package/claude/commands/how-to/define-features-flows.md +632 -0
- package/claude/commands/how-to/deploy.md +507 -0
- package/claude/commands/how-to/handle-file-uploads.md +746 -0
- package/claude/commands/how-to/implement-search.md +1001 -0
- package/claude/commands/how-to/install-plugins.md +352 -0
- package/claude/commands/how-to/manage-test-coverage.md +984 -0
- package/claude/commands/how-to/run-tests.md +400 -0
- package/claude/commands/how-to/set-app-languages.md +601 -0
- package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
- package/claude/commands/how-to/set-scheduled-actions.md +527 -0
- package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
- package/claude/commands/how-to/setup-authentication.md +388 -0
- package/claude/commands/how-to/setup-claude-code.md +440 -0
- package/claude/commands/how-to/setup-database.md +274 -0
- package/claude/commands/how-to/setup-email-providers.md +598 -0
- package/claude/commands/how-to/setup-mobile-dev.md +627 -0
- package/claude/commands/how-to/start.md +500 -0
- package/claude/commands/how-to/use-devtools.md +639 -0
- package/claude/commands/how-to/use-superadmin.md +622 -0
- package/claude/commands/session/README.md +193 -0
- package/claude/commands/session/block-create.md +190 -0
- package/claude/commands/session/block-list.md +203 -0
- package/claude/commands/session/block-update.md +192 -0
- package/claude/commands/session/block-validate.md +218 -0
- package/claude/commands/session/changelog.md +115 -0
- package/claude/commands/session/close.md +225 -0
- package/claude/commands/session/commit.md +174 -0
- package/claude/commands/session/db-entity.md +206 -0
- package/claude/commands/session/db-fix.md +212 -0
- package/claude/commands/session/db-sample.md +206 -0
- package/claude/commands/session/demo.md +178 -0
- package/claude/commands/session/doc-bdd.md +207 -0
- package/claude/commands/session/doc-feature.md +218 -0
- package/claude/commands/session/doc-read.md +225 -0
- package/claude/commands/session/execute.md +204 -0
- package/claude/commands/session/explain.md +202 -0
- package/claude/commands/session/fix-bug.md +210 -0
- package/claude/commands/session/fix-build.md +182 -0
- package/claude/commands/session/fix-test.md +189 -0
- package/claude/commands/session/pending.md +232 -0
- package/claude/commands/session/refine.md +188 -0
- package/claude/commands/session/resume.md +192 -0
- package/claude/commands/session/review.md +192 -0
- package/claude/commands/session/scope-change.md +181 -0
- package/claude/commands/session/start-blocks.md +347 -0
- package/claude/commands/session/start.md +604 -0
- package/claude/commands/session/status.md +169 -0
- package/claude/commands/session/test-fix.md +221 -0
- package/claude/commands/session/test-run.md +203 -0
- package/claude/commands/session/test-write.md +242 -0
- package/claude/commands/session/validate.md +162 -0
- package/claude/config/context.json +40 -0
- package/claude/config/github.json +69 -0
- package/claude/config/github.schema.json +106 -0
- package/claude/config/team.json +46 -0
- package/claude/config/team.schema.json +106 -0
- package/claude/config/workspace.json +43 -0
- package/claude/config/workspace.schema.json +75 -0
- package/claude/skills/README.md +228 -0
- package/claude/skills/accessibility/SKILL.md +573 -0
- package/claude/skills/api-bypass-layers/SKILL.md +550 -0
- package/claude/skills/asana-integration/SKILL.md +499 -0
- package/claude/skills/better-auth/SKILL.md +666 -0
- package/claude/skills/billing-subscriptions/SKILL.md +660 -0
- package/claude/skills/block-decision-matrix/SKILL.md +359 -0
- package/claude/skills/clickup-integration/SKILL.md +434 -0
- package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
- package/claude/skills/create-plugin/SKILL.md +425 -0
- package/claude/skills/create-theme/SKILL.md +331 -0
- package/claude/skills/cypress-api/SKILL.md +511 -0
- package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
- package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
- package/claude/skills/cypress-e2e/SKILL.md +526 -0
- package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
- package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
- package/claude/skills/cypress-selectors/SKILL.md +309 -0
- package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
- package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
- package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
- package/claude/skills/database-migrations/SKILL.md +335 -0
- package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
- package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
- package/claude/skills/design-system/SKILL.md +682 -0
- package/claude/skills/documentation/SKILL.md +540 -0
- package/claude/skills/entity-api/SKILL.md +482 -0
- package/claude/skills/entity-system/SKILL.md +635 -0
- package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
- package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
- package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
- package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
- package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
- package/claude/skills/github/SKILL.md +467 -0
- package/claude/skills/i18n-nextintl/SKILL.md +302 -0
- package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
- package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
- package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
- package/claude/skills/impact-analysis/SKILL.md +203 -0
- package/claude/skills/jest-unit/SKILL.md +306 -0
- package/claude/skills/jest-unit/references/component-testing.md +371 -0
- package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
- package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
- package/claude/skills/jira-integration/SKILL.md +539 -0
- package/claude/skills/media-library/SKILL.md +743 -0
- package/claude/skills/mock-analysis/SKILL.md +276 -0
- package/claude/skills/monorepo-architecture/SKILL.md +162 -0
- package/claude/skills/nextjs-api-development/SKILL.md +364 -0
- package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
- package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
- package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
- package/claude/skills/notion-integration/SKILL.md +641 -0
- package/claude/skills/npm-development-workflow/SKILL.md +480 -0
- package/claude/skills/page-builder-blocks/SKILL.md +530 -0
- package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
- package/claude/skills/permissions-system/SKILL.md +619 -0
- package/claude/skills/plugins/SKILL.md +340 -0
- package/claude/skills/plugins/references/plugin-templates.md +414 -0
- package/claude/skills/plugins/references/plugin-testing.md +353 -0
- package/claude/skills/plugins/references/plugin-types.md +198 -0
- package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
- package/claude/skills/pom-patterns/SKILL.md +452 -0
- package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
- package/claude/skills/rate-limiting/SKILL.md +342 -0
- package/claude/skills/react-best-practices/AGENTS.md +2410 -0
- package/claude/skills/react-best-practices/README.md +123 -0
- package/claude/skills/react-best-practices/SKILL.md +125 -0
- package/claude/skills/react-best-practices/metadata.json +15 -0
- package/claude/skills/react-best-practices/rules/_sections.md +46 -0
- package/claude/skills/react-best-practices/rules/_template.md +28 -0
- package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/claude/skills/react-patterns/SKILL.md +688 -0
- package/claude/skills/registry-system/SKILL.md +331 -0
- package/claude/skills/scheduled-actions/SKILL.md +671 -0
- package/claude/skills/scope-enforcement/SKILL.md +542 -0
- package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
- package/claude/skills/server-actions/SKILL.md +493 -0
- package/claude/skills/service-layer/SKILL.md +587 -0
- package/claude/skills/session-management/SKILL.md +266 -0
- package/claude/skills/session-management/scripts/create-session.py +166 -0
- package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
- package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
- package/claude/skills/session-management/scripts/session-archive.sh +87 -0
- package/claude/skills/session-management/scripts/session-close.sh +133 -0
- package/claude/skills/session-management/scripts/session-init.sh +225 -0
- package/claude/skills/session-management/scripts/session-list.sh +163 -0
- package/claude/skills/session-management/scripts/split-plan.sh +116 -0
- package/claude/skills/shadcn-components/SKILL.md +586 -0
- package/claude/skills/shadcn-theming/SKILL.md +446 -0
- package/claude/skills/suspense-loading/SKILL.md +280 -0
- package/claude/skills/tailwind-theming/SKILL.md +507 -0
- package/claude/skills/tanstack-query/SKILL.md +608 -0
- package/claude/skills/test-coverage/SKILL.md +239 -0
- package/claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/claude/skills/zod-validation/SKILL.md +537 -0
- package/claude/templates/blocks/progress.md +86 -0
- package/claude/templates/iteration/changes.md +61 -0
- package/claude/templates/iteration/progress.md +55 -0
- package/claude/templates/log.md +31 -0
- package/claude/templates/story/context.md +77 -0
- package/claude/templates/story/pendings.md +37 -0
- package/claude/templates/story/plan.md +299 -0
- package/claude/templates/story/requirements.md +109 -0
- package/claude/templates/story/scope.json +10 -0
- package/claude/templates/story/tests.md +91 -0
- package/claude/templates/task/progress.md +58 -0
- package/claude/templates/task/requirements.md +54 -0
- package/claude/workflows/README.md +154 -0
- package/claude/workflows/blocks.md +614 -0
- package/claude/workflows/story.md +1207 -0
- package/claude/workflows/task.md +927 -0
- package/claude/workflows/tweak.md +527 -0
- package/cursor/.gitkeep +0 -0
- package/package.json +35 -0
- package/scripts/postinstall.mjs +198 -0
- package/scripts/setup.mjs +282 -0
- package/scripts/sync.mjs +209 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clickup-integration
|
|
3
|
+
description: |
|
|
4
|
+
ClickUp integration patterns for task management.
|
|
5
|
+
Covers API authentication, webhooks, task sync, and MCP integration.
|
|
6
|
+
Use this skill when implementing ClickUp features or syncing sessions with tasks.
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ClickUp Integration Skill
|
|
12
|
+
|
|
13
|
+
Integration patterns for syncing development sessions with ClickUp tasks.
|
|
14
|
+
|
|
15
|
+
## Architecture Overview
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
19
|
+
│ CLICKUP INTEGRATION │
|
|
20
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
21
|
+
│ │
|
|
22
|
+
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
23
|
+
│ │ Claude │────►│ MCP Server │────►│ ClickUp │ │
|
|
24
|
+
│ │ Session │◄────│ (clickup) │◄────│ API │ │
|
|
25
|
+
│ └─────────────┘ └──────────────┘ └──────────────┘ │
|
|
26
|
+
│ │ │ │
|
|
27
|
+
│ ▼ ▼ │
|
|
28
|
+
│ ┌─────────────┐ ┌──────────────┐ │
|
|
29
|
+
│ │ Session │ │ Webhooks │ │
|
|
30
|
+
│ │ Files │ │ (optional) │ │
|
|
31
|
+
│ └─────────────┘ └──────────────┘ │
|
|
32
|
+
│ │
|
|
33
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## When to Use This Skill
|
|
39
|
+
|
|
40
|
+
- Setting up ClickUp integration for the first time
|
|
41
|
+
- Syncing development sessions with ClickUp tasks
|
|
42
|
+
- Creating tasks from Claude sessions
|
|
43
|
+
- Updating task status automatically
|
|
44
|
+
- Reading task details and comments
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Configuration
|
|
49
|
+
|
|
50
|
+
### .claude/config/workspace.json
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"taskManager": {
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"provider": "clickup",
|
|
57
|
+
"syncWithSession": true,
|
|
58
|
+
"autoUpdateStatus": true,
|
|
59
|
+
"config": {
|
|
60
|
+
"apiKey": "${CLICKUP_API_KEY}",
|
|
61
|
+
"workspaceId": "your-workspace-id",
|
|
62
|
+
"defaultSpace": "your-default-space-id",
|
|
63
|
+
"useMcp": true,
|
|
64
|
+
"mcpFallback": true
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Environment Variables
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# .env.local
|
|
74
|
+
CLICKUP_API_KEY=pk_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## MCP Server Integration
|
|
80
|
+
|
|
81
|
+
ClickUp provides an MCP server for Claude Code integration.
|
|
82
|
+
|
|
83
|
+
### Setup
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Add MCP server to Claude Code
|
|
87
|
+
claude mcp add clickup
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Available MCP Tools
|
|
91
|
+
|
|
92
|
+
| Tool | Description | Parameters |
|
|
93
|
+
|------|-------------|------------|
|
|
94
|
+
| `clickup_get_task` | Get task details | `task_id` |
|
|
95
|
+
| `clickup_create_task` | Create new task | `list_id`, `name`, `description`, etc. |
|
|
96
|
+
| `clickup_update_task` | Update task | `task_id`, fields to update |
|
|
97
|
+
| `clickup_create_task_comment` | Add comment | `task_id`, `comment_text` |
|
|
98
|
+
| `clickup_get_lists` | Get lists in folder | `folder_id` |
|
|
99
|
+
| `clickup_get_folders` | Get folders in space | `space_id` |
|
|
100
|
+
|
|
101
|
+
### Example Usage
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// Get task details via MCP
|
|
105
|
+
const task = await mcp.clickup.get_task({ task_id: "abc123" });
|
|
106
|
+
|
|
107
|
+
// Create task via MCP
|
|
108
|
+
const newTask = await mcp.clickup.create_task({
|
|
109
|
+
list_id: "12345678",
|
|
110
|
+
name: "Implement user authentication",
|
|
111
|
+
description: "Add OAuth2 support",
|
|
112
|
+
priority: 2,
|
|
113
|
+
tags: ["feature", "auth"]
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## API Patterns
|
|
120
|
+
|
|
121
|
+
### Authentication
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// API Key authentication
|
|
125
|
+
const headers = {
|
|
126
|
+
'Authorization': process.env.CLICKUP_API_KEY,
|
|
127
|
+
'Content-Type': 'application/json'
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// Base URL
|
|
131
|
+
const BASE_URL = 'https://api.clickup.com/api/v2';
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Common Endpoints
|
|
135
|
+
|
|
136
|
+
| Endpoint | Method | Description |
|
|
137
|
+
|----------|--------|-------------|
|
|
138
|
+
| `/team` | GET | Get authorized teams/workspaces |
|
|
139
|
+
| `/team/{team_id}/space` | GET | Get spaces in workspace |
|
|
140
|
+
| `/space/{space_id}/folder` | GET | Get folders in space |
|
|
141
|
+
| `/folder/{folder_id}/list` | GET | Get lists in folder |
|
|
142
|
+
| `/list/{list_id}/task` | GET/POST | Get/Create tasks |
|
|
143
|
+
| `/task/{task_id}` | GET/PUT/DELETE | Task operations |
|
|
144
|
+
| `/task/{task_id}/comment` | GET/POST | Task comments |
|
|
145
|
+
|
|
146
|
+
### Task Structure
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
interface ClickUpTask {
|
|
150
|
+
id: string;
|
|
151
|
+
custom_id: string | null;
|
|
152
|
+
name: string;
|
|
153
|
+
description: string;
|
|
154
|
+
status: {
|
|
155
|
+
status: string;
|
|
156
|
+
color: string;
|
|
157
|
+
type: string;
|
|
158
|
+
};
|
|
159
|
+
priority: {
|
|
160
|
+
id: string;
|
|
161
|
+
priority: string;
|
|
162
|
+
color: string;
|
|
163
|
+
};
|
|
164
|
+
assignees: Array<{
|
|
165
|
+
id: number;
|
|
166
|
+
username: string;
|
|
167
|
+
email: string;
|
|
168
|
+
}>;
|
|
169
|
+
tags: Array<{
|
|
170
|
+
name: string;
|
|
171
|
+
tag_fg: string;
|
|
172
|
+
tag_bg: string;
|
|
173
|
+
}>;
|
|
174
|
+
due_date: string | null;
|
|
175
|
+
start_date: string | null;
|
|
176
|
+
time_estimate: number | null;
|
|
177
|
+
custom_fields: Array<{
|
|
178
|
+
id: string;
|
|
179
|
+
name: string;
|
|
180
|
+
value: any;
|
|
181
|
+
}>;
|
|
182
|
+
url: string;
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Session Sync Patterns
|
|
189
|
+
|
|
190
|
+
### Linking Session to Task
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
# In requirements.md
|
|
194
|
+
|
|
195
|
+
## ClickUp Task
|
|
196
|
+
- **Task ID:** abc123
|
|
197
|
+
- **URL:** https://app.clickup.com/t/abc123
|
|
198
|
+
- **Status:** In Progress
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Auto-Update Status
|
|
202
|
+
|
|
203
|
+
When `autoUpdateStatus: true`, Claude updates task status:
|
|
204
|
+
|
|
205
|
+
| Session Event | ClickUp Status |
|
|
206
|
+
|---------------|----------------|
|
|
207
|
+
| Session created | "In Progress" |
|
|
208
|
+
| Blocked | "Blocked" |
|
|
209
|
+
| Session closed (success) | "Complete" |
|
|
210
|
+
| Session closed (partial) | "Review" |
|
|
211
|
+
|
|
212
|
+
### Comment Sync
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Post session progress as comment
|
|
216
|
+
await mcp.clickup.create_task_comment({
|
|
217
|
+
task_id: "abc123",
|
|
218
|
+
comment_text: `
|
|
219
|
+
## Session Progress Update
|
|
220
|
+
|
|
221
|
+
**Phase:** Backend Development
|
|
222
|
+
**Progress:** 60%
|
|
223
|
+
|
|
224
|
+
### Completed
|
|
225
|
+
- API endpoints created
|
|
226
|
+
- Tests written
|
|
227
|
+
|
|
228
|
+
### In Progress
|
|
229
|
+
- Frontend components
|
|
230
|
+
|
|
231
|
+
### Blocked
|
|
232
|
+
- None
|
|
233
|
+
`.trim()
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Webhook Configuration
|
|
240
|
+
|
|
241
|
+
### Setting Up Webhooks
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
// Create webhook for task updates
|
|
245
|
+
POST /team/{team_id}/webhook
|
|
246
|
+
{
|
|
247
|
+
"endpoint": "https://your-app.com/api/webhooks/clickup",
|
|
248
|
+
"events": [
|
|
249
|
+
"taskCreated",
|
|
250
|
+
"taskUpdated",
|
|
251
|
+
"taskDeleted",
|
|
252
|
+
"taskStatusUpdated",
|
|
253
|
+
"taskCommentPosted"
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Webhook Events
|
|
259
|
+
|
|
260
|
+
| Event | Trigger |
|
|
261
|
+
|-------|---------|
|
|
262
|
+
| `taskCreated` | New task created |
|
|
263
|
+
| `taskUpdated` | Task details changed |
|
|
264
|
+
| `taskStatusUpdated` | Status changed |
|
|
265
|
+
| `taskCommentPosted` | New comment added |
|
|
266
|
+
| `taskAssigneeUpdated` | Assignee changed |
|
|
267
|
+
| `taskDueDateUpdated` | Due date changed |
|
|
268
|
+
|
|
269
|
+
### Handling Webhooks
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// app/api/webhooks/clickup/route.ts
|
|
273
|
+
export async function POST(request: Request) {
|
|
274
|
+
const payload = await request.json();
|
|
275
|
+
|
|
276
|
+
switch (payload.event) {
|
|
277
|
+
case 'taskStatusUpdated':
|
|
278
|
+
// Handle status change
|
|
279
|
+
break;
|
|
280
|
+
case 'taskCommentPosted':
|
|
281
|
+
// Handle new comment
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return Response.json({ received: true });
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Rate Limiting
|
|
292
|
+
|
|
293
|
+
### Limits
|
|
294
|
+
|
|
295
|
+
| Plan | Rate Limit |
|
|
296
|
+
|------|------------|
|
|
297
|
+
| Free | 100 requests/minute |
|
|
298
|
+
| Unlimited | 100 requests/minute |
|
|
299
|
+
| Business | 100 requests/minute |
|
|
300
|
+
| Enterprise | 1000 requests/minute |
|
|
301
|
+
|
|
302
|
+
### Handling Rate Limits
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
// Check rate limit headers
|
|
306
|
+
const remaining = response.headers.get('X-RateLimit-Remaining');
|
|
307
|
+
const reset = response.headers.get('X-RateLimit-Reset');
|
|
308
|
+
|
|
309
|
+
if (remaining === '0') {
|
|
310
|
+
const waitTime = parseInt(reset) - Date.now();
|
|
311
|
+
await sleep(waitTime);
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Error Handling
|
|
318
|
+
|
|
319
|
+
### Common Error Codes
|
|
320
|
+
|
|
321
|
+
| Code | Description | Resolution |
|
|
322
|
+
|------|-------------|------------|
|
|
323
|
+
| 401 | Unauthorized | Check API key |
|
|
324
|
+
| 403 | Forbidden | Check permissions |
|
|
325
|
+
| 404 | Not found | Verify task/list ID |
|
|
326
|
+
| 429 | Rate limited | Wait and retry |
|
|
327
|
+
| 500 | Server error | Retry with backoff |
|
|
328
|
+
|
|
329
|
+
### Error Response Format
|
|
330
|
+
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"err": "Task not found",
|
|
334
|
+
"ECODE": "TASK_024"
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Testing Patterns
|
|
341
|
+
|
|
342
|
+
### Mock API Responses
|
|
343
|
+
|
|
344
|
+
```typescript
|
|
345
|
+
// __mocks__/clickup.ts
|
|
346
|
+
export const mockTask = {
|
|
347
|
+
id: "abc123",
|
|
348
|
+
name: "Test Task",
|
|
349
|
+
status: { status: "Open", color: "#d3d3d3" },
|
|
350
|
+
priority: { priority: "normal" }
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
export const mockGetTask = jest.fn().mockResolvedValue(mockTask);
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Integration Tests
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
describe('ClickUp Integration', () => {
|
|
360
|
+
it('should fetch task details', async () => {
|
|
361
|
+
const task = await clickup.getTask('abc123');
|
|
362
|
+
expect(task.name).toBeDefined();
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
it('should create task', async () => {
|
|
366
|
+
const task = await clickup.createTask({
|
|
367
|
+
listId: '12345',
|
|
368
|
+
name: 'New Task'
|
|
369
|
+
});
|
|
370
|
+
expect(task.id).toBeDefined();
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Anti-Patterns
|
|
378
|
+
|
|
379
|
+
### DON'T: Hardcode API Keys
|
|
380
|
+
|
|
381
|
+
```typescript
|
|
382
|
+
// BAD
|
|
383
|
+
const apiKey = 'pk_12345_abcdef';
|
|
384
|
+
|
|
385
|
+
// GOOD
|
|
386
|
+
const apiKey = process.env.CLICKUP_API_KEY;
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### DON'T: Ignore Rate Limits
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
// BAD
|
|
393
|
+
for (const task of tasks) {
|
|
394
|
+
await updateTask(task);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// GOOD
|
|
398
|
+
for (const task of tasks) {
|
|
399
|
+
await updateTask(task);
|
|
400
|
+
await sleep(100); // Respect rate limits
|
|
401
|
+
}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### DON'T: Store Sensitive Data in Tasks
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
// BAD - Don't put secrets in task descriptions
|
|
408
|
+
description: `API Key: ${apiKey}`
|
|
409
|
+
|
|
410
|
+
// GOOD - Reference environment variables
|
|
411
|
+
description: `Uses API key from CLICKUP_API_KEY env var`
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Checklist
|
|
417
|
+
|
|
418
|
+
Before using ClickUp integration:
|
|
419
|
+
|
|
420
|
+
- [ ] API key configured in environment
|
|
421
|
+
- [ ] Workspace ID set in `.claude/config/workspace.json`
|
|
422
|
+
- [ ] Default space configured
|
|
423
|
+
- [ ] MCP server added (if using MCP)
|
|
424
|
+
- [ ] Webhook endpoint set up (if using webhooks)
|
|
425
|
+
- [ ] Error handling implemented
|
|
426
|
+
- [ ] Rate limiting considered
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## Related Skills
|
|
431
|
+
|
|
432
|
+
- `session-management` - Session lifecycle
|
|
433
|
+
- `scheduled-actions` - Background task processing
|
|
434
|
+
- `service-layer` - API implementation patterns
|