@trendai-crem/claude-skills 0.1.0 → 0.3.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.
- package/README.md +1 -1
- package/cli.js +13 -1
- package/package.json +2 -2
- package/skills/atlassian-tools/SKILL.md +361 -0
- package/skills/atlassian-tools/__pycache__/storage_utils.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_cli.py +796 -0
- package/skills/atlassian-tools/confluence_client/README.md +154 -0
- package/skills/atlassian-tools/confluence_client/__init__.py +44 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/client.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/commands.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/converter.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/exceptions.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/__pycache__/storage.cpython-313.pyc +0 -0
- package/skills/atlassian-tools/confluence_client/client.py +577 -0
- package/skills/atlassian-tools/confluence_client/commands.py +613 -0
- package/skills/atlassian-tools/confluence_client/converter.py +892 -0
- package/skills/atlassian-tools/confluence_client/exceptions.py +52 -0
- package/skills/atlassian-tools/confluence_client/storage.py +718 -0
- package/skills/atlassian-tools/jira_cli.py +891 -0
- package/skills/atlassian-tools/jira_client/README.md +235 -0
- package/skills/atlassian-tools/jira_client/__init__.py +34 -0
- package/skills/atlassian-tools/jira_client/adf_converter.py +845 -0
- package/skills/atlassian-tools/jira_client/client.py +366 -0
- package/skills/atlassian-tools/jira_client/commands.py +792 -0
- package/skills/atlassian-tools/jira_client/exceptions.py +48 -0
- package/skills/atlassian-tools/jira_client/storage.py +701 -0
- package/skills/atlassian-tools/pyproject.toml +20 -0
- package/skills/atlassian-tools/references/reference.md +473 -0
- package/skills/atlassian-tools/storage_utils.py +29 -0
- package/skills/atlassian-tools/tests/__init__.py +1 -0
- package/skills/atlassian-tools/tests/test_adf_converter.py +1521 -0
- package/skills/atlassian-tools/tests/test_converter.py +1243 -0
- package/skills/atlassian-tools/tests/test_storage_path.py +125 -0
- package/skills/code-review/README.md +215 -0
- package/skills/code-review/SKILL.md +870 -0
- package/skills/code-review/TEST_PLAN.md +378 -0
- package/skills/cpp/SKILL.md +350 -0
- package/skills/cpp/references/best-practices.md +299 -0
- package/skills/cpp/references/formatting.md +298 -0
- package/skills/cpp/references/naming.md +280 -0
- package/skills/go/SKILL.md +337 -0
- package/skills/go/references/best-practices.md +262 -0
- package/skills/go/references/formatting.md +247 -0
- package/skills/go/references/naming.md +286 -0
- package/skills/java/SKILL.md +289 -0
- package/skills/java/references/best-practices.md +295 -0
- package/skills/java/references/formatting.md +315 -0
- package/skills/java/references/naming.md +211 -0
- package/skills/javascript/SKILL.md +246 -0
- package/skills/javascript/references/best-practices.md +289 -0
- package/skills/javascript/references/formatting.md +256 -0
- package/skills/javascript/references/naming.md +172 -0
- package/skills/python/SKILL.md +250 -0
- package/skills/python/references/best-practices.md +275 -0
- package/skills/python/references/formatting.md +230 -0
- package/skills/python/references/naming.md +218 -0
- package/skills/reviewing-prs/SKILL.md +91 -0
- package/skills/shell/SKILL.md +239 -0
- package/skills/shell/references/best-practices.md +256 -0
- package/skills/shell/references/formatting.md +287 -0
- package/skills/shell/references/naming.md +202 -0
- package/skills/typescript/SKILL.md +262 -0
- package/skills/typescript/references/best-practices.md +304 -0
- package/skills/typescript/references/formatting.md +218 -0
- package/skills/typescript/references/naming.md +198 -0
- package/skills/wiki-generation/SKILL.md +121 -0
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ npx @trendai-crem/claude-skills
|
|
|
10
10
|
|
|
11
11
|
That's it. The command installs:
|
|
12
12
|
|
|
13
|
-
1. **External skills** — [superpowers](https://github.com/obra/superpowers)
|
|
13
|
+
1. **External skills** — [superpowers](https://github.com/obra/superpowers))
|
|
14
14
|
2. **Team skills** — custom skills maintained in this repo (override same-named externals)
|
|
15
15
|
|
|
16
16
|
## Update
|
package/cli.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { execFileSync } from 'child_process';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
4
5
|
import { fileURLToPath } from 'url';
|
|
5
|
-
import { dirname } from 'path';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
6
7
|
|
|
7
8
|
const __dir = dirname(fileURLToPath(import.meta.url));
|
|
8
9
|
|
|
@@ -44,3 +45,14 @@ const externalFailed = externalResults.filter(r => !r.ok);
|
|
|
44
45
|
if (externalFailed.length > 0) {
|
|
45
46
|
console.warn(`\nWARN: ${externalFailed.length} external source(s) failed — team skills installed successfully.`);
|
|
46
47
|
}
|
|
48
|
+
|
|
49
|
+
// Check for updates
|
|
50
|
+
try {
|
|
51
|
+
const { version: current } = JSON.parse(readFileSync(join(__dir, 'package.json'), 'utf8'));
|
|
52
|
+
const res = await fetch('https://registry.npmjs.org/@trendai-crem/claude-skills/latest');
|
|
53
|
+
const { version: latest } = await res.json();
|
|
54
|
+
if (current !== latest) {
|
|
55
|
+
console.log(`\nUpdate available: ${current} → ${latest}`);
|
|
56
|
+
console.log(`Run: npx @trendai-crem/claude-skills@latest`);
|
|
57
|
+
}
|
|
58
|
+
} catch { /* ignore update check failures */ }
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trendai-crem/claude-skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Claude Code skills installer for the trendai-crem team",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/
|
|
8
|
+
"url": "git+https://adc.github.trendmicro.com/CoreTech-SASEDL/claude-skills.git"
|
|
9
9
|
},
|
|
10
10
|
"bin": {
|
|
11
11
|
"claude-skills": "cli.js"
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: atlassian-tools
|
|
3
|
+
description: |
|
|
4
|
+
Confluence wiki and Jira issue management. ALWAYS use this skill (not WebFetch)
|
|
5
|
+
for any atlassian.net URL, Confluence page, or Jira issue. Use for: wiki pages,
|
|
6
|
+
documentation, search/find wiki pages, retrieve wiki, create/update/delete pages,
|
|
7
|
+
Jira tickets, issues, bugs, sprints.
|
|
8
|
+
allowed-tools: [Bash, Read, Write, Glob]
|
|
9
|
+
metadata:
|
|
10
|
+
short-description: Confluence and Jira CLI tools with bidirectional sync
|
|
11
|
+
version: "1.5.1"
|
|
12
|
+
author: Hank Liao
|
|
13
|
+
license: MIT
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Atlassian Tools
|
|
17
|
+
|
|
18
|
+
## RULES (MUST FOLLOW)
|
|
19
|
+
|
|
20
|
+
1. Run all commands from the skill directory (where this SKILL.md is located)
|
|
21
|
+
2. ALWAYS use `-o <USER_CWD>/.atlassian` BEFORE the subcommand (not after)
|
|
22
|
+
3. Replace `<USER_CWD>` with the user's working directory (where they invoked the skill)
|
|
23
|
+
4. **UPDATE WORKFLOW: Always check local storage first before updating**
|
|
24
|
+
- Before updating any wiki page or Jira issue, check if it exists in local storage
|
|
25
|
+
- If found locally: Edit the local `.md` file, then use `update --file` with that file
|
|
26
|
+
- If not found locally: First `retrieve`/`get` it, then edit the local file, then update
|
|
27
|
+
- **NEVER use inline `-d` or description arguments when a local file exists**
|
|
28
|
+
|
|
29
|
+
Correct: `uv run python confluence_cli.py -o /user/project/.atlassian retrieve 123456`
|
|
30
|
+
Wrong: `uv run python confluence_cli.py retrieve 123456 -o /path` (will fail)
|
|
31
|
+
|
|
32
|
+
## TRIGGERS (When to Use This Skill)
|
|
33
|
+
|
|
34
|
+
ALWAYS use this skill (never WebFetch) when you see:
|
|
35
|
+
- URLs containing `atlassian.net` or `/wiki/`
|
|
36
|
+
- Jira issue keys like `PROJ-123`
|
|
37
|
+
- Keywords: Confluence, wiki, Jira, Atlassian, ticket, issue
|
|
38
|
+
|
|
39
|
+
User intent mapping:
|
|
40
|
+
- "get/download/retrieve wiki/page" → `confluence_cli.py retrieve`
|
|
41
|
+
- "get all child pages" → `confluence_cli.py retrieve -r`
|
|
42
|
+
- "search/find wiki pages" → `confluence_cli.py search`
|
|
43
|
+
- "create wiki page" → `confluence_cli.py create`
|
|
44
|
+
- "update/edit wiki" → **check local first**, then `confluence_cli.py update --file`
|
|
45
|
+
- "get issue/ticket" → `jira_cli.py get`
|
|
46
|
+
- "get epic with children" → `jira_cli.py get -r`
|
|
47
|
+
- "create ticket/issue" → `jira_cli.py create`
|
|
48
|
+
- "update issue" → **check local first**, then `jira_cli.py update --description-file`
|
|
49
|
+
- "add comment" → `jira_cli.py comment`
|
|
50
|
+
- "change status" → `jira_cli.py transition`
|
|
51
|
+
|
|
52
|
+
## UPDATE WORKFLOW (CRITICAL)
|
|
53
|
+
|
|
54
|
+
**Always prefer editing local files over inline arguments.** This ensures content integrity and proper version tracking.
|
|
55
|
+
|
|
56
|
+
### Confluence Page Update
|
|
57
|
+
|
|
58
|
+
1. **Check local storage**: `ls <USER_CWD>/.atlassian/confluence/pages/`
|
|
59
|
+
2. **If page exists locally**:
|
|
60
|
+
- Read: `<USER_CWD>/.atlassian/confluence/pages/<page-title>/<page-title>.md`
|
|
61
|
+
- Edit the markdown file with requested changes
|
|
62
|
+
- Update: `confluence_cli.py update <page_id> --file <USER_CWD>/.atlassian/confluence/pages/<page-title>/<page-title>.md`
|
|
63
|
+
3. **If page NOT found locally**:
|
|
64
|
+
- First retrieve: `confluence_cli.py retrieve <page_id_or_url>`
|
|
65
|
+
- Then follow step 2 (page will now exist at `<USER_CWD>/.atlassian/confluence/pages/<page-title>/`)
|
|
66
|
+
|
|
67
|
+
### Jira Issue Update
|
|
68
|
+
|
|
69
|
+
1. **Check local storage**: `ls <USER_CWD>/.atlassian/jira/issues/`
|
|
70
|
+
2. **If issue exists locally**:
|
|
71
|
+
- Read: `<USER_CWD>/.atlassian/jira/issues/<ISSUE-KEY>/description.md`
|
|
72
|
+
- Edit the markdown file with requested changes
|
|
73
|
+
- Update: `jira_cli.py update <ISSUE-KEY> --description-file <USER_CWD>/.atlassian/jira/issues/<ISSUE-KEY>/description.md`
|
|
74
|
+
3. **If issue NOT found locally**:
|
|
75
|
+
- First retrieve: `jira_cli.py get <issue_key>`
|
|
76
|
+
- Then follow step 2 (issue will now exist at `<USER_CWD>/.atlassian/jira/issues/<ISSUE-KEY>/`)
|
|
77
|
+
|
|
78
|
+
### Why This Matters
|
|
79
|
+
|
|
80
|
+
- Preserves full document context (macros, formatting, images)
|
|
81
|
+
- Enables accurate incremental edits
|
|
82
|
+
- Maintains sync between local cache and remote
|
|
83
|
+
- Avoids data loss from partial inline updates
|
|
84
|
+
|
|
85
|
+
## CONFLUENCE CLI
|
|
86
|
+
|
|
87
|
+
Base: `uv run python confluence_cli.py -o <USER_CWD>/.atlassian <command>`
|
|
88
|
+
|
|
89
|
+
### Commands
|
|
90
|
+
|
|
91
|
+
**retrieve** `<page_id_or_url>` `[-r]` `[-f]`
|
|
92
|
+
Download page to local storage. Accepts page ID or full URL.
|
|
93
|
+
- `-r` recursive (include all child pages)
|
|
94
|
+
- `-f` force re-fetch even if cached
|
|
95
|
+
|
|
96
|
+
**create** `<file>` `-s <space_key>` `[-t <title>]` `[-p <parent_id>]` `[-f markdown|html]`
|
|
97
|
+
Create new page from .md or .html file.
|
|
98
|
+
- `-s` space key (required, or set CONFLUENCE_SPACE_KEY env var)
|
|
99
|
+
- `-t` page title (defaults to filename)
|
|
100
|
+
- `-p` parent page ID (for subpages)
|
|
101
|
+
- `-f` force format (auto-detected from extension)
|
|
102
|
+
|
|
103
|
+
**update** `<page_id>` `--file <file>` `[-t <title>]` `[-m <message>]` `[-f markdown|html]`
|
|
104
|
+
Update existing page. Auto-syncs local cache after update.
|
|
105
|
+
- `--file` source file with new content
|
|
106
|
+
- `-t` new title
|
|
107
|
+
- `-m` version message
|
|
108
|
+
- `-f` force format
|
|
109
|
+
|
|
110
|
+
**sync** `[<page_id>]` `[--all]` — Fetch latest from remote to local cache
|
|
111
|
+
- `<page_id>` page ID or URL (required unless --all is used)
|
|
112
|
+
- `--all` sync all locally cached pages
|
|
113
|
+
**list** — List locally cached pages
|
|
114
|
+
**info** `<page_id>` — Show local page metadata
|
|
115
|
+
**delete** `<page_id>` — Remove from local storage only
|
|
116
|
+
**delete-from-confluence** `<page_id>` `[--local-only]` — Delete from Confluence (and local)
|
|
117
|
+
**storage** — Show storage stats
|
|
118
|
+
|
|
119
|
+
**search** `<query>` `[--limit N]` `[--space KEY]` `[--cursor TOKEN]` `[--retrieve N]` `[--json]`
|
|
120
|
+
Search Confluence pages by keyword using CQL full-text search.
|
|
121
|
+
- `<query>` search text (required)
|
|
122
|
+
- `--limit` results per page (1-50, default: 10)
|
|
123
|
+
- `--space` filter by space key (e.g., DEV, DOCS)
|
|
124
|
+
- `--cursor` pagination cursor from previous search
|
|
125
|
+
- `--retrieve` auto-retrieve top N results to local storage (1-20)
|
|
126
|
+
- `--json` output JSON format instead of table
|
|
127
|
+
|
|
128
|
+
### Examples
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Get page by URL
|
|
132
|
+
uv run python confluence_cli.py -o /project/.atlassian retrieve "https://domain.atlassian.net/wiki/spaces/SPACE/pages/123456"
|
|
133
|
+
|
|
134
|
+
# Get page and all children
|
|
135
|
+
uv run python confluence_cli.py -o /project/.atlassian retrieve 123456 -r
|
|
136
|
+
|
|
137
|
+
# Create page from markdown
|
|
138
|
+
uv run python confluence_cli.py -o /project/.atlassian create doc.md -s DDIT -t "API Docs"
|
|
139
|
+
|
|
140
|
+
# Create subpage
|
|
141
|
+
uv run python confluence_cli.py -o /project/.atlassian create doc.md -s DDIT -t "API Docs" -p 789012
|
|
142
|
+
|
|
143
|
+
# Update page (preferred: edit local file first)
|
|
144
|
+
# 1. Check if exists: ls /project/.atlassian/confluence/pages/
|
|
145
|
+
# 2. Edit the local markdown file
|
|
146
|
+
# 3. Update from file:
|
|
147
|
+
uv run python confluence_cli.py -o /project/.atlassian update 123456 --file /project/.atlassian/confluence/pages/API-Docs/API-Docs.md -m "Fixed typos"
|
|
148
|
+
|
|
149
|
+
# Sync all cached pages with latest from Confluence
|
|
150
|
+
uv run python confluence_cli.py -o /project/.atlassian sync --all
|
|
151
|
+
|
|
152
|
+
# Search for pages containing "OAuth"
|
|
153
|
+
uv run python confluence_cli.py -o /project/.atlassian search "OAuth"
|
|
154
|
+
|
|
155
|
+
# Search with limit and space filter
|
|
156
|
+
uv run python confluence_cli.py -o /project/.atlassian search "API documentation" --limit 20 --space DEV
|
|
157
|
+
|
|
158
|
+
# Search and auto-retrieve top 3 results
|
|
159
|
+
uv run python confluence_cli.py -o /project/.atlassian search "deployment guide" --retrieve 3
|
|
160
|
+
|
|
161
|
+
# Search with JSON output for scripting
|
|
162
|
+
uv run python confluence_cli.py -o /project/.atlassian search "testing" --json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## JIRA CLI
|
|
166
|
+
|
|
167
|
+
Base: `uv run python jira_cli.py -o <USER_CWD>/.atlassian <command>`
|
|
168
|
+
|
|
169
|
+
### Commands
|
|
170
|
+
|
|
171
|
+
**get** `<issue_key>` `[-r]` `[-f]`
|
|
172
|
+
Download issue to local storage.
|
|
173
|
+
- `-r` recursive (include all child issues)
|
|
174
|
+
- `-f` force re-fetch even if cached
|
|
175
|
+
|
|
176
|
+
**create** `<project>` `<type>` `<summary>` `[-d <desc>]` `[--description-file <file>]` `[--parent <key>]` `[-p <priority>]` `[-l <labels>]` `[--no-sprint]`
|
|
177
|
+
Create new issue. Auto-saves to local storage. Auto-adds to sprint and applies default labels if configured.
|
|
178
|
+
- `<project>` project key (e.g., PROJ)
|
|
179
|
+
- `<type>` issue type (Task, Bug, Story, Epic)
|
|
180
|
+
- `<summary>` issue title
|
|
181
|
+
- `-d` description text
|
|
182
|
+
- `--description-file` markdown file for description
|
|
183
|
+
- `--parent` parent issue key
|
|
184
|
+
- `-p` priority (Highest, High, Medium, Low, Lowest)
|
|
185
|
+
- `-l` comma-separated labels (merged with JIRA_DEFAULT_LABELS)
|
|
186
|
+
- `--no-sprint` skip auto-adding to sprint
|
|
187
|
+
|
|
188
|
+
**update** `<issue_key>` `[-s <summary>]` `[-d <desc>]` `[--description-file <file>]` `[-p <priority>]` `[-l <labels>]`
|
|
189
|
+
Update issue fields. Auto-syncs local cache.
|
|
190
|
+
- `--description-file` markdown file for description (**preferred over -d**)
|
|
191
|
+
|
|
192
|
+
**comment** `<issue_key>` `<text>` — Add comment. Auto-syncs local cache.
|
|
193
|
+
|
|
194
|
+
**transition** `<issue_key>` `<status>` — Change status (e.g., "In Progress", "Done"). Auto-syncs local cache.
|
|
195
|
+
|
|
196
|
+
**assign-to-me** `<issue_key>` — Assign to current user. Auto-syncs local cache.
|
|
197
|
+
|
|
198
|
+
**set-parent** `<issue_key>` `[parent_key]` `[--clear]` — Set or clear parent relationship
|
|
199
|
+
|
|
200
|
+
**search** `<jql>` `[-l <limit>]` — Search with JQL query
|
|
201
|
+
- `-l` max results (default 50)
|
|
202
|
+
|
|
203
|
+
**types** `<project>` — List available issue types for project
|
|
204
|
+
|
|
205
|
+
**add-to-sprint** `<issue_keys>` `[-s <sprint_name>]` `[-p <project>]`
|
|
206
|
+
Add issues to a sprint.
|
|
207
|
+
- `<issue_keys>` comma-separated issue keys (e.g., PROJ-1,PROJ-2)
|
|
208
|
+
- `-s` sprint name (uses JIRA_SPRINT_NAME_PATTERN if not specified)
|
|
209
|
+
- `-p` project key (defaults to JIRA_PROJECT_KEY)
|
|
210
|
+
|
|
211
|
+
**add-label** `<issue_keys>` `<labels>`
|
|
212
|
+
Add labels to multiple issues.
|
|
213
|
+
- `<issue_keys>` comma-separated issue keys
|
|
214
|
+
- `<labels>` comma-separated labels to add
|
|
215
|
+
|
|
216
|
+
**delete-issue** `<issue_key>` — Delete from Jira (and local if present)
|
|
217
|
+
**list** — List locally cached issues
|
|
218
|
+
**info** `<issue_key>` — Show local issue details
|
|
219
|
+
**sync** `[<issue_key>]` `[--all]` — Fetch latest from remote
|
|
220
|
+
- `<issue_key>` issue key (required unless --all is used)
|
|
221
|
+
- `--all` sync all locally cached issues
|
|
222
|
+
**delete** `<issue_key>` — Remove from local storage only
|
|
223
|
+
**storage** — Show storage stats
|
|
224
|
+
|
|
225
|
+
### Examples
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Get single issue
|
|
229
|
+
uv run python jira_cli.py -o /project/.atlassian get PROJ-123
|
|
230
|
+
|
|
231
|
+
# Get epic with all children
|
|
232
|
+
uv run python jira_cli.py -o /project/.atlassian get PROJ-100 -r
|
|
233
|
+
|
|
234
|
+
# Create task
|
|
235
|
+
uv run python jira_cli.py create PROJ Task "Implement feature" -d "Description here"
|
|
236
|
+
|
|
237
|
+
# Create from spec file
|
|
238
|
+
uv run python jira_cli.py create PROJ Story "User auth" --description-file spec.md --parent PROJ-100
|
|
239
|
+
|
|
240
|
+
# Update issue (preferred: edit local file first)
|
|
241
|
+
# 1. Check if exists: ls /project/.atlassian/jira/issues/PROJ-123/
|
|
242
|
+
# 2. Edit: /project/.atlassian/jira/issues/PROJ-123/description.md
|
|
243
|
+
# 3. Update from file:
|
|
244
|
+
uv run python jira_cli.py -o /project/.atlassian update PROJ-123 --description-file /project/.atlassian/jira/issues/PROJ-123/description.md
|
|
245
|
+
|
|
246
|
+
# Update issue (simple field changes only)
|
|
247
|
+
uv run python jira_cli.py -o /project/.atlassian update PROJ-123 -s "New title" -p High
|
|
248
|
+
|
|
249
|
+
# Add comment
|
|
250
|
+
uv run python jira_cli.py comment PROJ-123 "Fixed in commit abc123"
|
|
251
|
+
|
|
252
|
+
# Change status
|
|
253
|
+
uv run python jira_cli.py transition PROJ-123 "In Progress"
|
|
254
|
+
|
|
255
|
+
# Search
|
|
256
|
+
uv run python jira_cli.py search "project = PROJ AND status = 'To Do'" -l 20
|
|
257
|
+
|
|
258
|
+
# Sync all cached issues with latest from Jira
|
|
259
|
+
uv run python jira_cli.py -o /project/.atlassian sync --all
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## REFERENCE
|
|
263
|
+
|
|
264
|
+
### Format Support
|
|
265
|
+
- Input: Markdown (.md) or HTML (.html), auto-detected by extension
|
|
266
|
+
- Output: Pages saved as both .html and .md
|
|
267
|
+
- Supported: headings, lists, tables, code blocks, links, bold/italic, Mermaid diagrams
|
|
268
|
+
|
|
269
|
+
### Confluence Macros & Elements
|
|
270
|
+
|
|
271
|
+
**Fully Converted (lossless round-trip):**
|
|
272
|
+
- Code blocks → markdown fenced blocks (```language)
|
|
273
|
+
- Mermaid diagrams → ```mermaid blocks
|
|
274
|
+
- Status macros → `<!-- status: TITLE ;; colour: COLOR -->`
|
|
275
|
+
- Jira macros → `<!-- jira: KEY ;; server: NAME ;; serverId: ID -->`
|
|
276
|
+
- Expand macros → `<details data-confluence-expand="true"><summary>Title</summary>content</details>`
|
|
277
|
+
- User mentions → `<!-- @user:ACCOUNT_ID -->`
|
|
278
|
+
- Page links → `<!-- @page:SPACE|TITLE|DISPLAY_TEXT -->`
|
|
279
|
+
- Emoticons → `<!-- @emoji:NAME|ID|SHORTNAME -->`
|
|
280
|
+
- Images → `<!-- confluence-image filename: NAME ac:width: N ... -->`
|
|
281
|
+
|
|
282
|
+
**Preserved as Comments:**
|
|
283
|
+
- TOC, Children, Info, Warning, Note, and other macros
|
|
284
|
+
- Format: `<!-- confluence-macro: toc\nstyle: none\ncontent:\n-->`
|
|
285
|
+
|
|
286
|
+
**Special Handling:**
|
|
287
|
+
- Pipe characters in link text auto-escaped for markdown table compatibility
|
|
288
|
+
- Code blocks inside expand macros preserved and restored
|
|
289
|
+
|
|
290
|
+
### Storage Structure
|
|
291
|
+
|
|
292
|
+
```text
|
|
293
|
+
<USER_CWD>/.atlassian/
|
|
294
|
+
├── confluence/pages/<page-title>/
|
|
295
|
+
│ ├── metadata.json
|
|
296
|
+
│ ├── <page-title>.html
|
|
297
|
+
│ └── <page-title>.md
|
|
298
|
+
└── jira/issues/<ISSUE-KEY>/
|
|
299
|
+
├── metadata.json
|
|
300
|
+
├── full_data.json
|
|
301
|
+
└── description.md
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Recursive retrieval creates nested folders for parent/child relationships.
|
|
305
|
+
|
|
306
|
+
### Credentials
|
|
307
|
+
|
|
308
|
+
Configure in `~/.claude/settings.json`:
|
|
309
|
+
|
|
310
|
+
```json
|
|
311
|
+
{
|
|
312
|
+
"env": {
|
|
313
|
+
"ATLASSIAN_DOMAIN": "trendmicro.atlassian.net",
|
|
314
|
+
"ATLASSIAN_EMAIL": "your-email@trendmicro.com",
|
|
315
|
+
"ATLASSIAN_API_TOKEN": "your_api_token",
|
|
316
|
+
"CONFLUENCE_SPACE_KEY": "MYSPACE",
|
|
317
|
+
"JIRA_PROJECT_KEY": "PROJ",
|
|
318
|
+
"JIRA_SPRINT_NAME_PATTERN": "📜 TLC Sprint *",
|
|
319
|
+
"JIRA_DEFAULT_LABELS": "tpa,backend"
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Get API token: <https://id.atlassian.com/manage-profile/security/api-tokens>
|
|
325
|
+
|
|
326
|
+
## Version History
|
|
327
|
+
|
|
328
|
+
### v1.5.0 (2025-12-24)
|
|
329
|
+
- **Enhanced**: Lossless round-trip conversion for Confluence elements
|
|
330
|
+
- Status macros (with colour parameter)
|
|
331
|
+
- Jira issue macros (with server/serverId)
|
|
332
|
+
- Expand/collapse macros (full content preservation)
|
|
333
|
+
- User mentions (@user)
|
|
334
|
+
- Page links (cross-space supported)
|
|
335
|
+
- Emoticons (with emoji-id and shortname)
|
|
336
|
+
- Image attachments (all attributes preserved)
|
|
337
|
+
- **Fixed**: Pipe characters in link text breaking markdown tables
|
|
338
|
+
- **Fixed**: Code blocks inside expand macros now properly restored
|
|
339
|
+
- **Fixed**: Image restoration pattern for single-line format
|
|
340
|
+
|
|
341
|
+
### v1.4.0 (2025-12-23)
|
|
342
|
+
- **Added**: `search` command for Confluence pages using CQL full-text search
|
|
343
|
+
- Search by keyword with ranked results
|
|
344
|
+
- Pagination support via `--cursor`
|
|
345
|
+
- Filter by space with `--space`
|
|
346
|
+
- Auto-retrieve top N results with `--retrieve`
|
|
347
|
+
- JSON output format with `--json`
|
|
348
|
+
|
|
349
|
+
### v1.3.0 (2025-12-22)
|
|
350
|
+
- **Added**: `--all` flag to `sync` command for batch operations
|
|
351
|
+
|
|
352
|
+
### v1.2.0
|
|
353
|
+
- **Added**: Project-level storage with configurable `-o` flag
|
|
354
|
+
- **Added**: Hierarchical Jira issue storage
|
|
355
|
+
|
|
356
|
+
### v1.1.0
|
|
357
|
+
- **Added**: Recursive page retrieval with `-r` flag
|
|
358
|
+
- **Added**: HTML/Markdown conversion with macro preservation
|
|
359
|
+
|
|
360
|
+
### v1.0.0
|
|
361
|
+
- Initial release with Confluence and Jira CLI tools
|
|
Binary file
|