diff --git a/.gitignore b/.gitignore index 812be66..01611d3 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/README.md b/README.md index 76246c1..b78fee8 100644 --- a/README.md +++ b/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` diff --git a/docs/ATLASSIAN.md b/docs/ATLASSIAN.md new file mode 100644 index 0000000..0b2e5ff --- /dev/null +++ b/docs/ATLASSIAN.md @@ -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. diff --git a/docs/README.md b/docs/README.md index 6c6451a..6823a22 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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. diff --git a/skills/atlassian/claude-code/SKILL.md b/skills/atlassian/claude-code/SKILL.md new file mode 100644 index 0000000..3e4cd97 --- /dev/null +++ b/skills/atlassian/claude-code/SKILL.md @@ -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. diff --git a/skills/atlassian/codex/SKILL.md b/skills/atlassian/codex/SKILL.md new file mode 100644 index 0000000..d0829ba --- /dev/null +++ b/skills/atlassian/codex/SKILL.md @@ -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. diff --git a/skills/atlassian/cursor/SKILL.md b/skills/atlassian/cursor/SKILL.md new file mode 100644 index 0000000..accb8cf --- /dev/null +++ b/skills/atlassian/cursor/SKILL.md @@ -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. diff --git a/skills/atlassian/opencode/SKILL.md b/skills/atlassian/opencode/SKILL.md new file mode 100644 index 0000000..141e2ef --- /dev/null +++ b/skills/atlassian/opencode/SKILL.md @@ -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. diff --git a/skills/atlassian/shared/scripts/package.json b/skills/atlassian/shared/scripts/package.json new file mode 100644 index 0000000..4f48a5c --- /dev/null +++ b/skills/atlassian/shared/scripts/package.json @@ -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" +} diff --git a/skills/atlassian/shared/scripts/pnpm-lock.yaml b/skills/atlassian/shared/scripts/pnpm-lock.yaml new file mode 100644 index 0000000..76a55ac --- /dev/null +++ b/skills/atlassian/shared/scripts/pnpm-lock.yaml @@ -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: {} diff --git a/skills/atlassian/shared/scripts/scripts/sync-agents.ts b/skills/atlassian/shared/scripts/scripts/sync-agents.ts new file mode 100644 index 0000000..9169363 --- /dev/null +++ b/skills/atlassian/shared/scripts/scripts/sync-agents.ts @@ -0,0 +1 @@ +console.log("sync-agents not implemented yet"); diff --git a/skills/atlassian/shared/scripts/src/cli.ts b/skills/atlassian/shared/scripts/src/cli.ts new file mode 100644 index 0000000..1d695a9 --- /dev/null +++ b/skills/atlassian/shared/scripts/src/cli.ts @@ -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 ", "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); diff --git a/skills/atlassian/shared/scripts/tests/cli-help.test.ts b/skills/atlassian/shared/scripts/tests/cli-help.test.ts new file mode 100644 index 0000000..f0d4536 --- /dev/null +++ b/skills/atlassian/shared/scripts/tests/cli-help.test.ts @@ -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:/); +}); diff --git a/skills/atlassian/shared/scripts/tsconfig.json b/skills/atlassian/shared/scripts/tsconfig.json new file mode 100644 index 0000000..6a0692b --- /dev/null +++ b/skills/atlassian/shared/scripts/tsconfig.json @@ -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"] +}