feat(atlassian): implement milestone M1 - scaffold skill and shared runtime
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,2 +1,6 @@
|
||||
/ai_plan/
|
||||
/.worktrees/
|
||||
/skills/atlassian/shared/scripts/.env
|
||||
/skills/atlassian/shared/scripts/node_modules/
|
||||
/skills/atlassian/*/scripts/.env
|
||||
/skills/atlassian/*/scripts/node_modules/
|
||||
|
||||
12
README.md
12
README.md
@@ -16,12 +16,19 @@ ai-coding-skills/
|
||||
├── README.md
|
||||
├── docs/
|
||||
│ ├── README.md
|
||||
│ ├── ATLASSIAN.md
|
||||
│ ├── CREATE-PLAN.md
|
||||
│ ├── IMPLEMENT-PLAN.md
|
||||
│ └── WEB-AUTOMATION.md
|
||||
├── skills/
|
||||
│ ├── _template/
|
||||
│ │ └── SKILL.md
|
||||
│ ├── atlassian/
|
||||
│ │ ├── codex/
|
||||
│ │ ├── claude-code/
|
||||
│ │ ├── cursor/
|
||||
│ │ ├── opencode/
|
||||
│ │ └── shared/
|
||||
│ ├── create-plan/
|
||||
│ │ ├── codex/
|
||||
│ │ ├── claude-code/
|
||||
@@ -49,6 +56,10 @@ ai-coding-skills/
|
||||
|
||||
| Skill | Agent Variant | Purpose | Status | Docs |
|
||||
|---|---|---|---|---|
|
||||
| atlassian | codex | Portable Jira and Confluence workflows through a shared Cloud-first CLI | In Progress | [ATLASSIAN](docs/ATLASSIAN.md) |
|
||||
| atlassian | claude-code | Portable Jira and Confluence workflows through a shared Cloud-first CLI | In Progress | [ATLASSIAN](docs/ATLASSIAN.md) |
|
||||
| atlassian | opencode | Portable Jira and Confluence workflows through a shared Cloud-first CLI | In Progress | [ATLASSIAN](docs/ATLASSIAN.md) |
|
||||
| atlassian | cursor | Portable Jira and Confluence workflows through a shared Cloud-first CLI | In Progress | [ATLASSIAN](docs/ATLASSIAN.md) |
|
||||
| create-plan | codex | Structured planning with milestones, iterative cross-model review, and runbook-first execution workflow | Ready | [CREATE-PLAN](docs/CREATE-PLAN.md) |
|
||||
| create-plan | claude-code | Structured planning with milestones, iterative cross-model review, and runbook-first execution workflow | Ready | [CREATE-PLAN](docs/CREATE-PLAN.md) |
|
||||
| create-plan | opencode | Structured planning with milestones, iterative cross-model review, and runbook-first execution workflow | Ready | [CREATE-PLAN](docs/CREATE-PLAN.md) |
|
||||
@@ -62,6 +73,7 @@ ai-coding-skills/
|
||||
| web-automation | opencode | Playwright + Camoufox browsing/scraping/auth automation | Ready | [WEB-AUTOMATION](docs/WEB-AUTOMATION.md) |
|
||||
|
||||
- Docs index: `docs/README.md`
|
||||
- Atlassian guide: `docs/ATLASSIAN.md`
|
||||
- Create-plan guide: `docs/CREATE-PLAN.md`
|
||||
- Implement-plan guide: `docs/IMPLEMENT-PLAN.md`
|
||||
- Web-automation guide: `docs/WEB-AUTOMATION.md`
|
||||
|
||||
134
docs/ATLASSIAN.md
Normal file
134
docs/ATLASSIAN.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# ATLASSIAN
|
||||
|
||||
## Purpose
|
||||
|
||||
Provide a portable Atlassian Cloud skill for Codex, Claude Code, Cursor Agent, and OpenCode using one shared CLI surface for common Jira and Confluence workflows.
|
||||
|
||||
## Why This Skill Exists
|
||||
|
||||
The repo targets multiple agent environments with uneven MCP availability. This skill packages a consistent CLI contract so the same task-oriented workflows can be used across all supported agents without depending on MCP-specific integrations.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Atlassian Cloud access
|
||||
- `ATLASSIAN_BASE_URL`
|
||||
- `ATLASSIAN_EMAIL`
|
||||
- `ATLASSIAN_API_TOKEN`
|
||||
|
||||
Optional:
|
||||
|
||||
- `ATLASSIAN_JIRA_BASE_URL`
|
||||
- `ATLASSIAN_CONFLUENCE_BASE_URL`
|
||||
- `ATLASSIAN_DEFAULT_PROJECT`
|
||||
- `ATLASSIAN_DEFAULT_SPACE`
|
||||
|
||||
## Supported Commands
|
||||
|
||||
- `health`
|
||||
- `jira-search`
|
||||
- `jira-get`
|
||||
- `jira-create`
|
||||
- `jira-update`
|
||||
- `jira-comment`
|
||||
- `jira-transitions`
|
||||
- `jira-transition`
|
||||
- `conf-search`
|
||||
- `conf-get`
|
||||
- `conf-create`
|
||||
- `conf-update`
|
||||
- `conf-comment`
|
||||
- `conf-children`
|
||||
- `raw`
|
||||
|
||||
## Safety Model
|
||||
|
||||
- Default output is JSON.
|
||||
- Mutating commands support `--dry-run`.
|
||||
- Jira long-text fields are converted to ADF locally.
|
||||
- Confluence page writes are storage-first in v1.
|
||||
- `raw` is restricted to `GET|POST|PUT`.
|
||||
- `--body-file` must stay within the active workspace.
|
||||
|
||||
## Install
|
||||
|
||||
### Codex
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.codex/skills/atlassian
|
||||
cp -R skills/atlassian/codex/* ~/.codex/skills/atlassian/
|
||||
cd ~/.codex/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### Claude Code
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/skills/atlassian
|
||||
cp -R skills/atlassian/claude-code/* ~/.claude/skills/atlassian/
|
||||
cd ~/.claude/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### OpenCode
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/opencode/skills/atlassian
|
||||
cp -R skills/atlassian/opencode/* ~/.config/opencode/skills/atlassian/
|
||||
cd ~/.config/opencode/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### Cursor
|
||||
|
||||
Repo-local install:
|
||||
|
||||
```bash
|
||||
mkdir -p .cursor/skills/atlassian
|
||||
cp -R skills/atlassian/cursor/* .cursor/skills/atlassian/
|
||||
cd .cursor/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Global install:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.cursor/skills/atlassian
|
||||
cp -R skills/atlassian/cursor/* ~/.cursor/skills/atlassian/
|
||||
cd ~/.cursor/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Verify Installation
|
||||
|
||||
Run in the installed `scripts/` folder:
|
||||
|
||||
```bash
|
||||
node -e "require.resolve('commander');require.resolve('dotenv');console.log('OK: runtime dependencies installed')"
|
||||
test -n \"$ATLASSIAN_BASE_URL\"
|
||||
test -n \"$ATLASSIAN_EMAIL\"
|
||||
test -n \"$ATLASSIAN_API_TOKEN\"
|
||||
pnpm atlassian health
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
- Search Jira issues:
|
||||
- `pnpm atlassian jira-search --jql "project = ENG ORDER BY updated DESC" --max-results 25`
|
||||
- Inspect an issue:
|
||||
- `pnpm atlassian jira-get --issue ENG-123`
|
||||
- Dry-run a Jira comment:
|
||||
- `pnpm atlassian jira-comment --issue ENG-123 --body-file comment.md --dry-run`
|
||||
- Search Confluence pages:
|
||||
- `pnpm atlassian conf-search --query "title ~ \\\"Runbook\\\""`
|
||||
- Dry-run a Confluence page update:
|
||||
- `pnpm atlassian conf-update --page 12345 --title "Runbook" --body-file page.storage.html --dry-run`
|
||||
- Use bounded raw mode:
|
||||
- `pnpm atlassian raw --product jira --method GET --path "/rest/api/3/issue/ENG-123"`
|
||||
|
||||
## Scope Notes
|
||||
|
||||
- Atlassian Cloud is first-class in v1.
|
||||
- Data Center support is future work.
|
||||
- Full `mcp-atlassian` parity is not the goal in v1; the initial scope is the approved core workflow set above.
|
||||
@@ -4,6 +4,7 @@ This directory contains user-facing docs for each skill.
|
||||
|
||||
## Index
|
||||
|
||||
- [ATLASSIAN.md](./ATLASSIAN.md) — Includes requirements, install, auth, safety rules, and usage examples for the Atlassian skill.
|
||||
- [CREATE-PLAN.md](./CREATE-PLAN.md) — Includes requirements, install, verification, and execution workflow for create-plan.
|
||||
- [IMPLEMENT-PLAN.md](./IMPLEMENT-PLAN.md) — Includes requirements, install, verification, and milestone review workflow for implement-plan.
|
||||
- [WEB-AUTOMATION.md](./WEB-AUTOMATION.md) — Includes requirements, install, dependency verification, and usage examples for web-automation.
|
||||
|
||||
72
skills/atlassian/claude-code/SKILL.md
Normal file
72
skills/atlassian/claude-code/SKILL.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: atlassian
|
||||
description: Interact with Atlassian Cloud Jira and Confluence through a portable task-oriented CLI for search, issue/page edits, comments, transitions, and bounded raw requests.
|
||||
---
|
||||
|
||||
# Atlassian (Claude Code)
|
||||
|
||||
Portable Atlassian workflows for Claude Code using a shared TypeScript CLI.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Atlassian Cloud account access
|
||||
- `ATLASSIAN_BASE_URL`
|
||||
- `ATLASSIAN_EMAIL`
|
||||
- `ATLASSIAN_API_TOKEN`
|
||||
|
||||
## First-Time Setup
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/skills/atlassian
|
||||
cp -R skills/atlassian/claude-code/* ~/.claude/skills/atlassian/
|
||||
cd ~/.claude/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Prerequisite Check (MANDATORY)
|
||||
|
||||
```bash
|
||||
cd ~/.claude/skills/atlassian/scripts
|
||||
node -e "require.resolve('commander');require.resolve('dotenv');console.log('OK: runtime dependencies installed')"
|
||||
test -n \"$ATLASSIAN_BASE_URL\"
|
||||
test -n \"$ATLASSIAN_EMAIL\"
|
||||
test -n \"$ATLASSIAN_API_TOKEN\"
|
||||
pnpm atlassian health
|
||||
```
|
||||
|
||||
If any check fails, stop and return:
|
||||
|
||||
`Missing dependency/config: atlassian requires installed CLI dependencies and valid Atlassian Cloud credentials. Run setup and configure ATLASSIAN_* env vars, then retry.`
|
||||
|
||||
## Supported Commands
|
||||
|
||||
- `pnpm atlassian health`
|
||||
- `pnpm atlassian jira-search --jql "..."`
|
||||
- `pnpm atlassian jira-get --issue ABC-123`
|
||||
- `pnpm atlassian jira-create ... [--dry-run]`
|
||||
- `pnpm atlassian jira-update ... [--dry-run]`
|
||||
- `pnpm atlassian jira-comment ... [--dry-run]`
|
||||
- `pnpm atlassian jira-transitions --issue ABC-123`
|
||||
- `pnpm atlassian jira-transition ... [--dry-run]`
|
||||
- `pnpm atlassian conf-search --query "..."`
|
||||
- `pnpm atlassian conf-get --page 12345`
|
||||
- `pnpm atlassian conf-create ... [--dry-run]`
|
||||
- `pnpm atlassian conf-update ... [--dry-run]`
|
||||
- `pnpm atlassian conf-comment ... [--dry-run]`
|
||||
- `pnpm atlassian conf-children --page 12345`
|
||||
- `pnpm atlassian raw --product jira|confluence --method GET|POST|PUT --path ...`
|
||||
|
||||
## Safety Rules
|
||||
|
||||
- Default output is JSON; only switch to text output when the user needs a human-readable summary.
|
||||
- Use `--dry-run` before any write unless the user clearly asked for the mutation.
|
||||
- Treat `raw` as an escape hatch, not the default API surface.
|
||||
- `--body-file` must stay inside the current workspace.
|
||||
- Confluence write bodies should be storage-format inputs in v1.
|
||||
|
||||
## Notes
|
||||
|
||||
- Atlassian Cloud is the primary supported platform in v1.
|
||||
- The portable CLI exists so the same skill works consistently across multiple agent environments.
|
||||
75
skills/atlassian/codex/SKILL.md
Normal file
75
skills/atlassian/codex/SKILL.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: atlassian
|
||||
description: Interact with Atlassian Cloud Jira and Confluence through a portable task-oriented CLI for search, issue/page edits, comments, transitions, and bounded raw requests.
|
||||
---
|
||||
|
||||
# Atlassian (Codex)
|
||||
|
||||
Portable Atlassian workflows for Codex using a shared TypeScript CLI.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Atlassian Cloud account access
|
||||
- `ATLASSIAN_BASE_URL`
|
||||
- `ATLASSIAN_EMAIL`
|
||||
- `ATLASSIAN_API_TOKEN`
|
||||
|
||||
## First-Time Setup
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.codex/skills/atlassian
|
||||
cp -R skills/atlassian/codex/* ~/.codex/skills/atlassian/
|
||||
cd ~/.codex/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Prerequisite Check (MANDATORY)
|
||||
|
||||
Run before using the skill:
|
||||
|
||||
```bash
|
||||
cd ~/.codex/skills/atlassian/scripts
|
||||
node -e "require.resolve('commander');require.resolve('dotenv');console.log('OK: runtime dependencies installed')"
|
||||
test -n \"$ATLASSIAN_BASE_URL\"
|
||||
test -n \"$ATLASSIAN_EMAIL\"
|
||||
test -n \"$ATLASSIAN_API_TOKEN\"
|
||||
pnpm atlassian health
|
||||
```
|
||||
|
||||
If any check fails, stop and return:
|
||||
|
||||
`Missing dependency/config: atlassian requires installed CLI dependencies and valid Atlassian Cloud credentials. Run setup and configure ATLASSIAN_* env vars, then retry.`
|
||||
|
||||
## Supported Commands
|
||||
|
||||
- `pnpm atlassian health`
|
||||
- `pnpm atlassian jira-search --jql "..."`
|
||||
- `pnpm atlassian jira-get --issue ABC-123`
|
||||
- `pnpm atlassian jira-create ... [--dry-run]`
|
||||
- `pnpm atlassian jira-update ... [--dry-run]`
|
||||
- `pnpm atlassian jira-comment ... [--dry-run]`
|
||||
- `pnpm atlassian jira-transitions --issue ABC-123`
|
||||
- `pnpm atlassian jira-transition ... [--dry-run]`
|
||||
- `pnpm atlassian conf-search --query "..."`
|
||||
- `pnpm atlassian conf-get --page 12345`
|
||||
- `pnpm atlassian conf-create ... [--dry-run]`
|
||||
- `pnpm atlassian conf-update ... [--dry-run]`
|
||||
- `pnpm atlassian conf-comment ... [--dry-run]`
|
||||
- `pnpm atlassian conf-children --page 12345`
|
||||
- `pnpm atlassian raw --product jira|confluence --method GET|POST|PUT --path ...`
|
||||
|
||||
## Safety Rules
|
||||
|
||||
- Default output is JSON; prefer that for agent workflows.
|
||||
- Use `--dry-run` before any mutating command unless the user clearly wants the write to happen immediately.
|
||||
- Jira long-text fields are converted to ADF locally.
|
||||
- Confluence page bodies are storage-first in v1.
|
||||
- `--body-file` must point to workspace-scoped files only; do not use arbitrary system paths.
|
||||
- `raw` is for explicit edge cases only and does not allow `DELETE`.
|
||||
|
||||
## Notes
|
||||
|
||||
- Atlassian Cloud is the only first-class target in v1.
|
||||
- This skill exists so Codex, Claude Code, Cursor Agent, and OpenCode can share the same command surface even when MCP access differs.
|
||||
87
skills/atlassian/cursor/SKILL.md
Normal file
87
skills/atlassian/cursor/SKILL.md
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
name: atlassian
|
||||
description: Interact with Atlassian Cloud Jira and Confluence through a portable task-oriented CLI for search, issue/page edits, comments, transitions, and bounded raw requests.
|
||||
---
|
||||
|
||||
# Atlassian (Cursor Agent CLI)
|
||||
|
||||
Portable Atlassian workflows for Cursor Agent CLI using a shared TypeScript CLI.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Cursor Agent CLI skill discovery via `.cursor/skills/` or `~/.cursor/skills/`
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Atlassian Cloud account access
|
||||
- `ATLASSIAN_BASE_URL`
|
||||
- `ATLASSIAN_EMAIL`
|
||||
- `ATLASSIAN_API_TOKEN`
|
||||
|
||||
## First-Time Setup
|
||||
|
||||
Repo-local install:
|
||||
|
||||
```bash
|
||||
mkdir -p .cursor/skills/atlassian
|
||||
cp -R skills/atlassian/cursor/* .cursor/skills/atlassian/
|
||||
cd .cursor/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Global install:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.cursor/skills/atlassian
|
||||
cp -R skills/atlassian/cursor/* ~/.cursor/skills/atlassian/
|
||||
cd ~/.cursor/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Prerequisite Check (MANDATORY)
|
||||
|
||||
Repo-local form:
|
||||
|
||||
```bash
|
||||
cursor-agent --version
|
||||
cd .cursor/skills/atlassian/scripts
|
||||
node -e "require.resolve('commander');require.resolve('dotenv');console.log('OK: runtime dependencies installed')"
|
||||
test -n \"$ATLASSIAN_BASE_URL\"
|
||||
test -n \"$ATLASSIAN_EMAIL\"
|
||||
test -n \"$ATLASSIAN_API_TOKEN\"
|
||||
pnpm atlassian health
|
||||
```
|
||||
|
||||
If any check fails, stop and return:
|
||||
|
||||
`Missing dependency/config: atlassian requires installed CLI dependencies and valid Atlassian Cloud credentials. Run setup and configure ATLASSIAN_* env vars, then retry.`
|
||||
|
||||
## Supported Commands
|
||||
|
||||
- `pnpm atlassian health`
|
||||
- `pnpm atlassian jira-search --jql "..."`
|
||||
- `pnpm atlassian jira-get --issue ABC-123`
|
||||
- `pnpm atlassian jira-create ... [--dry-run]`
|
||||
- `pnpm atlassian jira-update ... [--dry-run]`
|
||||
- `pnpm atlassian jira-comment ... [--dry-run]`
|
||||
- `pnpm atlassian jira-transitions --issue ABC-123`
|
||||
- `pnpm atlassian jira-transition ... [--dry-run]`
|
||||
- `pnpm atlassian conf-search --query "..."`
|
||||
- `pnpm atlassian conf-get --page 12345`
|
||||
- `pnpm atlassian conf-create ... [--dry-run]`
|
||||
- `pnpm atlassian conf-update ... [--dry-run]`
|
||||
- `pnpm atlassian conf-comment ... [--dry-run]`
|
||||
- `pnpm atlassian conf-children --page 12345`
|
||||
- `pnpm atlassian raw --product jira|confluence --method GET|POST|PUT --path ...`
|
||||
|
||||
## Safety Rules
|
||||
|
||||
- Prefer JSON output for agent use.
|
||||
- Use `--dry-run` before writes unless the user explicitly wants the change applied.
|
||||
- Keep `--body-file` inputs within the current workspace.
|
||||
- Use `raw` only for user-requested unsupported endpoints.
|
||||
- `raw` does not allow `DELETE`.
|
||||
|
||||
## Notes
|
||||
|
||||
- Cursor discovers this skill from `.cursor/skills/` or `~/.cursor/skills/`.
|
||||
- Atlassian Cloud is the supported platform in v1.
|
||||
72
skills/atlassian/opencode/SKILL.md
Normal file
72
skills/atlassian/opencode/SKILL.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: atlassian
|
||||
description: Interact with Atlassian Cloud Jira and Confluence through a portable task-oriented CLI for search, issue/page edits, comments, transitions, and bounded raw requests.
|
||||
---
|
||||
|
||||
# Atlassian (OpenCode)
|
||||
|
||||
Portable Atlassian workflows for OpenCode using a shared TypeScript CLI.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Atlassian Cloud account access
|
||||
- `ATLASSIAN_BASE_URL`
|
||||
- `ATLASSIAN_EMAIL`
|
||||
- `ATLASSIAN_API_TOKEN`
|
||||
|
||||
## First-Time Setup
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/opencode/skills/atlassian
|
||||
cp -R skills/atlassian/opencode/* ~/.config/opencode/skills/atlassian/
|
||||
cd ~/.config/opencode/skills/atlassian/scripts
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Prerequisite Check (MANDATORY)
|
||||
|
||||
```bash
|
||||
cd ~/.config/opencode/skills/atlassian/scripts
|
||||
node -e "require.resolve('commander');require.resolve('dotenv');console.log('OK: runtime dependencies installed')"
|
||||
test -n \"$ATLASSIAN_BASE_URL\"
|
||||
test -n \"$ATLASSIAN_EMAIL\"
|
||||
test -n \"$ATLASSIAN_API_TOKEN\"
|
||||
pnpm atlassian health
|
||||
```
|
||||
|
||||
If any check fails, stop and return:
|
||||
|
||||
`Missing dependency/config: atlassian requires installed CLI dependencies and valid Atlassian Cloud credentials. Run setup and configure ATLASSIAN_* env vars, then retry.`
|
||||
|
||||
## Supported Commands
|
||||
|
||||
- `pnpm atlassian health`
|
||||
- `pnpm atlassian jira-search --jql "..."`
|
||||
- `pnpm atlassian jira-get --issue ABC-123`
|
||||
- `pnpm atlassian jira-create ... [--dry-run]`
|
||||
- `pnpm atlassian jira-update ... [--dry-run]`
|
||||
- `pnpm atlassian jira-comment ... [--dry-run]`
|
||||
- `pnpm atlassian jira-transitions --issue ABC-123`
|
||||
- `pnpm atlassian jira-transition ... [--dry-run]`
|
||||
- `pnpm atlassian conf-search --query "..."`
|
||||
- `pnpm atlassian conf-get --page 12345`
|
||||
- `pnpm atlassian conf-create ... [--dry-run]`
|
||||
- `pnpm atlassian conf-update ... [--dry-run]`
|
||||
- `pnpm atlassian conf-comment ... [--dry-run]`
|
||||
- `pnpm atlassian conf-children --page 12345`
|
||||
- `pnpm atlassian raw --product jira|confluence --method GET|POST|PUT --path ...`
|
||||
|
||||
## Safety Rules
|
||||
|
||||
- Prefer JSON output for machine consumption.
|
||||
- Use `--dry-run` on writes unless the user explicitly asks to commit the remote mutation.
|
||||
- Restrict `--body-file` to project files.
|
||||
- Use `raw` only for unsupported edge cases.
|
||||
- `DELETE` is intentionally unsupported in raw mode.
|
||||
|
||||
## Notes
|
||||
|
||||
- Atlassian Cloud is first-class in v1; Data Center support is future work.
|
||||
- The CLI contract is shared across all agent variants so the same usage pattern works everywhere.
|
||||
22
skills/atlassian/shared/scripts/package.json
Normal file
22
skills/atlassian/shared/scripts/package.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "atlassian-skill-scripts",
|
||||
"version": "1.0.0",
|
||||
"description": "Shared runtime for the Atlassian skill",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"atlassian": "tsx src/cli.ts",
|
||||
"test": "node --import tsx --test tests/*.test.ts",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"sync:agents": "tsx scripts/sync-agents.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": "^13.1.0",
|
||||
"dotenv": "^16.4.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.3.0",
|
||||
"tsx": "^4.20.5",
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
"packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34"
|
||||
}
|
||||
361
skills/atlassian/shared/scripts/pnpm-lock.yaml
generated
Normal file
361
skills/atlassian/shared/scripts/pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,361 @@
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
commander:
|
||||
specifier: ^13.1.0
|
||||
version: 13.1.0
|
||||
dotenv:
|
||||
specifier: ^16.4.7
|
||||
version: 16.6.1
|
||||
devDependencies:
|
||||
'@types/node':
|
||||
specifier: ^24.3.0
|
||||
version: 24.12.0
|
||||
tsx:
|
||||
specifier: ^4.20.5
|
||||
version: 4.21.0
|
||||
typescript:
|
||||
specifier: ^5.9.2
|
||||
version: 5.9.3
|
||||
|
||||
packages:
|
||||
|
||||
'@esbuild/aix-ppc64@0.27.3':
|
||||
resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [aix]
|
||||
|
||||
'@esbuild/android-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-arm@0.27.3':
|
||||
resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-x64@0.27.3':
|
||||
resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/darwin-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/darwin-x64@0.27.3':
|
||||
resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/freebsd-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/freebsd-x64@0.27.3':
|
||||
resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/linux-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-arm@0.27.3':
|
||||
resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ia32@0.27.3':
|
||||
resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-loong64@0.27.3':
|
||||
resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-mips64el@0.27.3':
|
||||
resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ppc64@0.27.3':
|
||||
resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-riscv64@0.27.3':
|
||||
resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-s390x@0.27.3':
|
||||
resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-x64@0.27.3':
|
||||
resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/netbsd-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/netbsd-x64@0.27.3':
|
||||
resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/openbsd-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openbsd-x64@0.27.3':
|
||||
resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openharmony-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@esbuild/sunos-x64@0.27.3':
|
||||
resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
|
||||
'@esbuild/win32-arm64@0.27.3':
|
||||
resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-ia32@0.27.3':
|
||||
resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-x64@0.27.3':
|
||||
resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@types/node@24.12.0':
|
||||
resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==}
|
||||
|
||||
commander@13.1.0:
|
||||
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
dotenv@16.6.1:
|
||||
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
esbuild@0.27.3:
|
||||
resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
fsevents@2.3.3:
|
||||
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
|
||||
get-tsconfig@4.13.6:
|
||||
resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
|
||||
|
||||
resolve-pkg-maps@1.0.0:
|
||||
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
|
||||
|
||||
tsx@4.21.0:
|
||||
resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
typescript@5.9.3:
|
||||
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
undici-types@7.16.0:
|
||||
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@esbuild/aix-ppc64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ia32@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-loong64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-mips64el@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ppc64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-riscv64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-s390x@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openharmony-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/sunos-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-arm64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-ia32@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-x64@0.27.3':
|
||||
optional: true
|
||||
|
||||
'@types/node@24.12.0':
|
||||
dependencies:
|
||||
undici-types: 7.16.0
|
||||
|
||||
commander@13.1.0: {}
|
||||
|
||||
dotenv@16.6.1: {}
|
||||
|
||||
esbuild@0.27.3:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.27.3
|
||||
'@esbuild/android-arm': 0.27.3
|
||||
'@esbuild/android-arm64': 0.27.3
|
||||
'@esbuild/android-x64': 0.27.3
|
||||
'@esbuild/darwin-arm64': 0.27.3
|
||||
'@esbuild/darwin-x64': 0.27.3
|
||||
'@esbuild/freebsd-arm64': 0.27.3
|
||||
'@esbuild/freebsd-x64': 0.27.3
|
||||
'@esbuild/linux-arm': 0.27.3
|
||||
'@esbuild/linux-arm64': 0.27.3
|
||||
'@esbuild/linux-ia32': 0.27.3
|
||||
'@esbuild/linux-loong64': 0.27.3
|
||||
'@esbuild/linux-mips64el': 0.27.3
|
||||
'@esbuild/linux-ppc64': 0.27.3
|
||||
'@esbuild/linux-riscv64': 0.27.3
|
||||
'@esbuild/linux-s390x': 0.27.3
|
||||
'@esbuild/linux-x64': 0.27.3
|
||||
'@esbuild/netbsd-arm64': 0.27.3
|
||||
'@esbuild/netbsd-x64': 0.27.3
|
||||
'@esbuild/openbsd-arm64': 0.27.3
|
||||
'@esbuild/openbsd-x64': 0.27.3
|
||||
'@esbuild/openharmony-arm64': 0.27.3
|
||||
'@esbuild/sunos-x64': 0.27.3
|
||||
'@esbuild/win32-arm64': 0.27.3
|
||||
'@esbuild/win32-ia32': 0.27.3
|
||||
'@esbuild/win32-x64': 0.27.3
|
||||
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
get-tsconfig@4.13.6:
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
resolve-pkg-maps@1.0.0: {}
|
||||
|
||||
tsx@4.21.0:
|
||||
dependencies:
|
||||
esbuild: 0.27.3
|
||||
get-tsconfig: 4.13.6
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
typescript@5.9.3: {}
|
||||
|
||||
undici-types@7.16.0: {}
|
||||
1
skills/atlassian/shared/scripts/scripts/sync-agents.ts
Normal file
1
skills/atlassian/shared/scripts/scripts/sync-agents.ts
Normal file
@@ -0,0 +1 @@
|
||||
console.log("sync-agents not implemented yet");
|
||||
22
skills/atlassian/shared/scripts/src/cli.ts
Normal file
22
skills/atlassian/shared/scripts/src/cli.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { Command } from "commander";
|
||||
|
||||
const program = new Command()
|
||||
.name("atlassian")
|
||||
.description("Portable Atlassian CLI for multi-agent skills")
|
||||
.version("0.1.0");
|
||||
|
||||
program
|
||||
.command("health")
|
||||
.description("Validate configuration and Atlassian connectivity")
|
||||
.option("--format <format>", "Output format", "json")
|
||||
.action((options) => {
|
||||
const payload = {
|
||||
ok: false,
|
||||
message: "health is not implemented yet",
|
||||
format: options.format,
|
||||
};
|
||||
|
||||
console.log(JSON.stringify(payload, null, 2));
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
14
skills/atlassian/shared/scripts/tests/cli-help.test.ts
Normal file
14
skills/atlassian/shared/scripts/tests/cli-help.test.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
test("CLI help prints the Atlassian skill banner", () => {
|
||||
const result = spawnSync("pnpm", ["exec", "tsx", "src/cli.ts", "--help"], {
|
||||
cwd: new URL("../", import.meta.url),
|
||||
encoding: "utf8",
|
||||
});
|
||||
|
||||
assert.equal(result.status, 0, result.stderr);
|
||||
assert.match(result.stdout, /Portable Atlassian CLI for multi-agent skills/);
|
||||
assert.match(result.stdout, /Usage:/);
|
||||
});
|
||||
15
skills/atlassian/shared/scripts/tsconfig.json
Normal file
15
skills/atlassian/shared/scripts/tsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"resolveJsonModule": true,
|
||||
"types": ["node"],
|
||||
"outDir": "dist"
|
||||
},
|
||||
"include": ["src/**/*.ts", "scripts/**/*.ts", "tests/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user