@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.
Files changed (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +634 -0
  5. package/claude/agents/architecture-supervisor.md +1351 -0
  6. package/claude/agents/backend-developer.md +997 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1432 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1268 -0
  15. package/claude/agents/frontend-developer.md +1234 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +963 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +352 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +746 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +440 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +500 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/changelog.md +115 -0
  77. package/claude/commands/session/close.md +225 -0
  78. package/claude/commands/session/commit.md +174 -0
  79. package/claude/commands/session/db-entity.md +206 -0
  80. package/claude/commands/session/db-fix.md +212 -0
  81. package/claude/commands/session/db-sample.md +206 -0
  82. package/claude/commands/session/demo.md +178 -0
  83. package/claude/commands/session/doc-bdd.md +207 -0
  84. package/claude/commands/session/doc-feature.md +218 -0
  85. package/claude/commands/session/doc-read.md +225 -0
  86. package/claude/commands/session/execute.md +204 -0
  87. package/claude/commands/session/explain.md +202 -0
  88. package/claude/commands/session/fix-bug.md +210 -0
  89. package/claude/commands/session/fix-build.md +182 -0
  90. package/claude/commands/session/fix-test.md +189 -0
  91. package/claude/commands/session/pending.md +232 -0
  92. package/claude/commands/session/refine.md +188 -0
  93. package/claude/commands/session/resume.md +192 -0
  94. package/claude/commands/session/review.md +192 -0
  95. package/claude/commands/session/scope-change.md +181 -0
  96. package/claude/commands/session/start-blocks.md +347 -0
  97. package/claude/commands/session/start.md +604 -0
  98. package/claude/commands/session/status.md +169 -0
  99. package/claude/commands/session/test-fix.md +221 -0
  100. package/claude/commands/session/test-run.md +203 -0
  101. package/claude/commands/session/test-write.md +242 -0
  102. package/claude/commands/session/validate.md +162 -0
  103. package/claude/config/context.json +40 -0
  104. package/claude/config/github.json +69 -0
  105. package/claude/config/github.schema.json +106 -0
  106. package/claude/config/team.json +46 -0
  107. package/claude/config/team.schema.json +106 -0
  108. package/claude/config/workspace.json +43 -0
  109. package/claude/config/workspace.schema.json +75 -0
  110. package/claude/skills/README.md +228 -0
  111. package/claude/skills/accessibility/SKILL.md +573 -0
  112. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  113. package/claude/skills/asana-integration/SKILL.md +499 -0
  114. package/claude/skills/better-auth/SKILL.md +666 -0
  115. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  116. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  117. package/claude/skills/clickup-integration/SKILL.md +434 -0
  118. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  119. package/claude/skills/create-plugin/SKILL.md +425 -0
  120. package/claude/skills/create-theme/SKILL.md +331 -0
  121. package/claude/skills/cypress-api/SKILL.md +511 -0
  122. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  124. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  125. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  126. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  127. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  128. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  129. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  130. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  131. package/claude/skills/database-migrations/SKILL.md +335 -0
  132. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  133. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  134. package/claude/skills/design-system/SKILL.md +682 -0
  135. package/claude/skills/documentation/SKILL.md +540 -0
  136. package/claude/skills/entity-api/SKILL.md +482 -0
  137. package/claude/skills/entity-system/SKILL.md +635 -0
  138. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  139. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  140. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  141. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  142. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  143. package/claude/skills/github/SKILL.md +467 -0
  144. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  145. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  146. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  147. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  148. package/claude/skills/impact-analysis/SKILL.md +203 -0
  149. package/claude/skills/jest-unit/SKILL.md +306 -0
  150. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  151. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  152. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  153. package/claude/skills/jira-integration/SKILL.md +539 -0
  154. package/claude/skills/media-library/SKILL.md +743 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +530 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +688 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +671 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +507 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +35 -0
  270. package/scripts/postinstall.mjs +198 -0
  271. package/scripts/setup.mjs +282 -0
  272. package/scripts/sync.mjs +209 -0
@@ -0,0 +1,539 @@
1
+ ---
2
+ name: jira-integration
3
+ description: |
4
+ Jira integration patterns for project management.
5
+ Covers REST API, webhooks, JQL queries, and automation.
6
+ Use this skill when implementing Jira features or syncing sessions with issues.
7
+ allowed-tools: Read, Glob, Grep, Bash
8
+ version: 1.0.0
9
+ ---
10
+
11
+ # Jira Integration Skill
12
+
13
+ Integration patterns for syncing development sessions with Jira issues.
14
+
15
+ ## Architecture Overview
16
+
17
+ ```
18
+ ┌─────────────────────────────────────────────────────────────────┐
19
+ │ JIRA INTEGRATION │
20
+ ├─────────────────────────────────────────────────────────────────┤
21
+ │ │
22
+ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
23
+ │ │ Claude │────►│ REST API │────►│ Jira │ │
24
+ │ │ Session │◄────│ Client │◄────│ Cloud │ │
25
+ │ └─────────────┘ └──────────────┘ └──────────────┘ │
26
+ │ │ │ │
27
+ │ ▼ ▼ │
28
+ │ ┌─────────────┐ ┌──────────────┐ │
29
+ │ │ Session │ │ Webhooks │ │
30
+ │ │ Files │ │ │ │
31
+ │ └─────────────┘ └──────────────┘ │
32
+ │ │
33
+ └─────────────────────────────────────────────────────────────────┘
34
+ ```
35
+
36
+ ---
37
+
38
+ ## When to Use This Skill
39
+
40
+ - Setting up Jira integration for the first time
41
+ - Syncing development sessions with Jira issues
42
+ - Creating issues from Claude sessions
43
+ - Updating issue status via transitions
44
+ - Querying issues with JQL
45
+
46
+ ---
47
+
48
+ ## Configuration
49
+
50
+ ### .claude/config/workspace.json
51
+
52
+ ```json
53
+ {
54
+ "taskManager": {
55
+ "enabled": true,
56
+ "provider": "jira",
57
+ "syncWithSession": true,
58
+ "autoUpdateStatus": true,
59
+ "config": {
60
+ "domain": "your-domain.atlassian.net",
61
+ "email": "${JIRA_EMAIL}",
62
+ "apiToken": "${JIRA_API_TOKEN}",
63
+ "defaultProject": "PROJ"
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### Environment Variables
70
+
71
+ ```bash
72
+ # .env.local
73
+ JIRA_EMAIL=your-email@company.com
74
+ JIRA_API_TOKEN=ATATT3xFfGF0...
75
+ JIRA_DOMAIN=your-domain.atlassian.net
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Authentication
81
+
82
+ ### API Token Authentication
83
+
84
+ ```typescript
85
+ // Basic auth with email:token
86
+ const auth = Buffer.from(
87
+ `${process.env.JIRA_EMAIL}:${process.env.JIRA_API_TOKEN}`
88
+ ).toString('base64');
89
+
90
+ const headers = {
91
+ 'Authorization': `Basic ${auth}`,
92
+ 'Content-Type': 'application/json',
93
+ 'Accept': 'application/json'
94
+ };
95
+
96
+ // Base URL
97
+ const BASE_URL = `https://${process.env.JIRA_DOMAIN}/rest/api/3`;
98
+ ```
99
+
100
+ ### OAuth 2.0 (Atlassian Connect)
101
+
102
+ ```typescript
103
+ // For Atlassian Connect apps
104
+ const headers = {
105
+ 'Authorization': `Bearer ${accessToken}`,
106
+ 'Content-Type': 'application/json'
107
+ };
108
+ ```
109
+
110
+ ---
111
+
112
+ ## API Patterns
113
+
114
+ ### Common Endpoints
115
+
116
+ | Endpoint | Method | Description |
117
+ |----------|--------|-------------|
118
+ | `/myself` | GET | Get current user |
119
+ | `/project` | GET | List all projects |
120
+ | `/project/{key}` | GET | Get project details |
121
+ | `/search` | GET/POST | Search issues (JQL) |
122
+ | `/issue` | POST | Create issue |
123
+ | `/issue/{issueKey}` | GET/PUT/DELETE | Issue operations |
124
+ | `/issue/{issueKey}/transitions` | GET/POST | Get/Execute transitions |
125
+ | `/issue/{issueKey}/comment` | GET/POST | Issue comments |
126
+
127
+ ### Issue Structure
128
+
129
+ ```typescript
130
+ interface JiraIssue {
131
+ id: string;
132
+ key: string;
133
+ self: string;
134
+ fields: {
135
+ summary: string;
136
+ description: {
137
+ type: 'doc';
138
+ version: 1;
139
+ content: Array<any>; // Atlassian Document Format
140
+ };
141
+ issuetype: {
142
+ id: string;
143
+ name: string;
144
+ };
145
+ status: {
146
+ id: string;
147
+ name: string;
148
+ statusCategory: {
149
+ key: string;
150
+ name: string;
151
+ };
152
+ };
153
+ priority: {
154
+ id: string;
155
+ name: string;
156
+ };
157
+ assignee: {
158
+ accountId: string;
159
+ displayName: string;
160
+ emailAddress: string;
161
+ } | null;
162
+ reporter: {
163
+ accountId: string;
164
+ displayName: string;
165
+ };
166
+ labels: string[];
167
+ customfield_XXXXX: any; // Custom fields
168
+ };
169
+ }
170
+ ```
171
+
172
+ ---
173
+
174
+ ## JQL Query Patterns
175
+
176
+ ### Basic Queries
177
+
178
+ ```jql
179
+ -- Issues in project
180
+ project = PROJ
181
+
182
+ -- My open issues
183
+ assignee = currentUser() AND status != Done
184
+
185
+ -- Recent issues
186
+ created >= -7d
187
+
188
+ -- By status category
189
+ statusCategory = "In Progress"
190
+
191
+ -- With labels
192
+ labels in (feature, urgent)
193
+ ```
194
+
195
+ ### Complex Queries
196
+
197
+ ```jql
198
+ -- Issues for sprint
199
+ project = PROJ
200
+ AND sprint in openSprints()
201
+ AND status != Done
202
+ ORDER BY priority DESC
203
+
204
+ -- Blocked issues
205
+ project = PROJ
206
+ AND status = Blocked
207
+ AND updated <= -2d
208
+
209
+ -- Search in text
210
+ project = PROJ
211
+ AND (summary ~ "authentication" OR description ~ "authentication")
212
+ ```
213
+
214
+ ### API Usage
215
+
216
+ ```typescript
217
+ // Search with JQL
218
+ const response = await fetch(
219
+ `${BASE_URL}/search?jql=${encodeURIComponent(jql)}&maxResults=50`,
220
+ { headers }
221
+ );
222
+ const { issues, total } = await response.json();
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Session Sync Patterns
228
+
229
+ ### Linking Session to Issue
230
+
231
+ ```markdown
232
+ # In requirements.md
233
+
234
+ ## Jira Issue
235
+ - **Issue Key:** PROJ-123
236
+ - **URL:** https://your-domain.atlassian.net/browse/PROJ-123
237
+ - **Status:** In Progress
238
+ ```
239
+
240
+ ### Status Transitions
241
+
242
+ ```typescript
243
+ // Get available transitions
244
+ const transitions = await fetch(
245
+ `${BASE_URL}/issue/PROJ-123/transitions`,
246
+ { headers }
247
+ );
248
+
249
+ // Execute transition
250
+ await fetch(
251
+ `${BASE_URL}/issue/PROJ-123/transitions`,
252
+ {
253
+ method: 'POST',
254
+ headers,
255
+ body: JSON.stringify({
256
+ transition: { id: "31" }, // "In Progress" transition ID
257
+ fields: {
258
+ // Optional: update fields during transition
259
+ assignee: { accountId: "xxx" }
260
+ },
261
+ update: {
262
+ comment: [{
263
+ add: {
264
+ body: {
265
+ type: "doc",
266
+ version: 1,
267
+ content: [{
268
+ type: "paragraph",
269
+ content: [{
270
+ type: "text",
271
+ text: "Started development session"
272
+ }]
273
+ }]
274
+ }
275
+ }
276
+ }]
277
+ }
278
+ })
279
+ }
280
+ );
281
+ ```
282
+
283
+ ### Auto-Update Status Map
284
+
285
+ | Session Event | Jira Transition |
286
+ |---------------|-----------------|
287
+ | Session created | "Start Progress" |
288
+ | Blocked | "Flag" or custom |
289
+ | Session closed (success) | "Done" |
290
+ | Session closed (partial) | "In Review" |
291
+
292
+ ---
293
+
294
+ ## Atlassian Document Format (ADF)
295
+
296
+ Jira uses ADF for rich text fields.
297
+
298
+ ### Basic Structure
299
+
300
+ ```typescript
301
+ const adfContent = {
302
+ type: "doc",
303
+ version: 1,
304
+ content: [
305
+ {
306
+ type: "paragraph",
307
+ content: [
308
+ { type: "text", text: "Hello " },
309
+ { type: "text", text: "world", marks: [{ type: "strong" }] }
310
+ ]
311
+ },
312
+ {
313
+ type: "bulletList",
314
+ content: [
315
+ {
316
+ type: "listItem",
317
+ content: [
318
+ {
319
+ type: "paragraph",
320
+ content: [{ type: "text", text: "Item 1" }]
321
+ }
322
+ ]
323
+ }
324
+ ]
325
+ }
326
+ ]
327
+ };
328
+ ```
329
+
330
+ ### Common Node Types
331
+
332
+ | Type | Usage |
333
+ |------|-------|
334
+ | `paragraph` | Text block |
335
+ | `heading` | H1-H6 headers |
336
+ | `bulletList` | Unordered list |
337
+ | `orderedList` | Numbered list |
338
+ | `codeBlock` | Code snippet |
339
+ | `table` | Table structure |
340
+ | `mention` | @mention user |
341
+
342
+ ---
343
+
344
+ ## Webhook Configuration
345
+
346
+ ### Setting Up Webhooks
347
+
348
+ Jira webhooks are configured in Project Settings > Webhooks.
349
+
350
+ ```typescript
351
+ // Webhook payload structure
352
+ interface JiraWebhook {
353
+ timestamp: number;
354
+ webhookEvent: string;
355
+ issue_event_type_name: string;
356
+ user: {
357
+ accountId: string;
358
+ displayName: string;
359
+ };
360
+ issue: JiraIssue;
361
+ changelog?: {
362
+ items: Array<{
363
+ field: string;
364
+ fromString: string;
365
+ toString: string;
366
+ }>;
367
+ };
368
+ }
369
+ ```
370
+
371
+ ### Webhook Events
372
+
373
+ | Event | Trigger |
374
+ |-------|---------|
375
+ | `jira:issue_created` | Issue created |
376
+ | `jira:issue_updated` | Issue updated |
377
+ | `jira:issue_deleted` | Issue deleted |
378
+ | `comment_created` | Comment added |
379
+ | `sprint_started` | Sprint started |
380
+ | `sprint_closed` | Sprint ended |
381
+
382
+ ### Handling Webhooks
383
+
384
+ ```typescript
385
+ // app/api/webhooks/jira/route.ts
386
+ export async function POST(request: Request) {
387
+ const payload: JiraWebhook = await request.json();
388
+
389
+ switch (payload.webhookEvent) {
390
+ case 'jira:issue_updated':
391
+ if (payload.changelog?.items.some(i => i.field === 'status')) {
392
+ // Handle status change
393
+ }
394
+ break;
395
+ case 'comment_created':
396
+ // Handle new comment
397
+ break;
398
+ }
399
+
400
+ return Response.json({ received: true });
401
+ }
402
+ ```
403
+
404
+ ---
405
+
406
+ ## Rate Limiting
407
+
408
+ ### Limits
409
+
410
+ | Type | Limit |
411
+ |------|-------|
412
+ | REST API | 100 requests/minute (varies by plan) |
413
+ | Concurrent | 10 concurrent requests |
414
+ | Bulk operations | 1000 issues/request |
415
+
416
+ ### Headers
417
+
418
+ ```typescript
419
+ // Check rate limit headers
420
+ const remaining = response.headers.get('X-RateLimit-Remaining');
421
+ const limit = response.headers.get('X-RateLimit-Limit');
422
+ ```
423
+
424
+ ---
425
+
426
+ ## Error Handling
427
+
428
+ ### Common Error Codes
429
+
430
+ | Code | Description | Resolution |
431
+ |------|-------------|------------|
432
+ | 400 | Bad request | Check request body |
433
+ | 401 | Unauthorized | Check credentials |
434
+ | 403 | Forbidden | Check permissions |
435
+ | 404 | Not found | Verify issue key |
436
+ | 429 | Rate limited | Wait and retry |
437
+
438
+ ### Error Response Format
439
+
440
+ ```json
441
+ {
442
+ "errorMessages": ["Issue does not exist or you do not have permission to see it."],
443
+ "errors": {}
444
+ }
445
+ ```
446
+
447
+ ---
448
+
449
+ ## Testing Patterns
450
+
451
+ ### Mock API Responses
452
+
453
+ ```typescript
454
+ // __mocks__/jira.ts
455
+ export const mockIssue = {
456
+ key: "PROJ-123",
457
+ fields: {
458
+ summary: "Test Issue",
459
+ status: { name: "Open" }
460
+ }
461
+ };
462
+
463
+ export const mockGetIssue = jest.fn().mockResolvedValue(mockIssue);
464
+ ```
465
+
466
+ ### Integration Tests
467
+
468
+ ```typescript
469
+ describe('Jira Integration', () => {
470
+ it('should fetch issue details', async () => {
471
+ const issue = await jira.getIssue('PROJ-123');
472
+ expect(issue.key).toBe('PROJ-123');
473
+ });
474
+
475
+ it('should transition issue', async () => {
476
+ await jira.transitionIssue('PROJ-123', 'In Progress');
477
+ const issue = await jira.getIssue('PROJ-123');
478
+ expect(issue.fields.status.name).toBe('In Progress');
479
+ });
480
+ });
481
+ ```
482
+
483
+ ---
484
+
485
+ ## Anti-Patterns
486
+
487
+ ### DON'T: Use Basic Auth in Frontend
488
+
489
+ ```typescript
490
+ // BAD - Exposes credentials
491
+ fetch('/api/jira', {
492
+ headers: { 'Authorization': `Basic ${btoa(email + ':' + token)}` }
493
+ });
494
+
495
+ // GOOD - Use backend proxy
496
+ fetch('/api/jira/issue/PROJ-123');
497
+ ```
498
+
499
+ ### DON'T: Ignore Pagination
500
+
501
+ ```typescript
502
+ // BAD
503
+ const { issues } = await searchIssues(jql);
504
+
505
+ // GOOD
506
+ async function* getAllIssues(jql: string) {
507
+ let startAt = 0;
508
+ const maxResults = 100;
509
+
510
+ while (true) {
511
+ const { issues, total } = await searchIssues(jql, startAt, maxResults);
512
+ yield* issues;
513
+ startAt += issues.length;
514
+ if (startAt >= total) break;
515
+ }
516
+ }
517
+ ```
518
+
519
+ ---
520
+
521
+ ## Checklist
522
+
523
+ Before using Jira integration:
524
+
525
+ - [ ] API token generated in Atlassian account
526
+ - [ ] Domain configured in `.claude/config/workspace.json`
527
+ - [ ] Default project set
528
+ - [ ] Transition IDs mapped for your workflow
529
+ - [ ] Webhooks configured (if needed)
530
+ - [ ] ADF formatting implemented for descriptions
531
+ - [ ] Error handling for all API calls
532
+
533
+ ---
534
+
535
+ ## Related Skills
536
+
537
+ - `session-management` - Session lifecycle
538
+ - `scheduled-actions` - Background task processing
539
+ - `service-layer` - API implementation patterns