plc-cli 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +386 -0
- package/dist/cli.js +5379 -0
- package/examples/config.yaml +95 -0
- package/examples/keybindings.yaml +27 -0
- package/package.json +90 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Full configuration reference: docs/CONFIGURATION.md
|
|
2
|
+
|
|
3
|
+
active_profile: production
|
|
4
|
+
|
|
5
|
+
# Credentials live in a separate file (~/.config/plane-cli/hosts.yaml) and are
|
|
6
|
+
# managed with `plc auth login` / `plc auth logout`. This file is meant to
|
|
7
|
+
# be safe to commit.
|
|
8
|
+
|
|
9
|
+
profiles:
|
|
10
|
+
production:
|
|
11
|
+
server:
|
|
12
|
+
base_url: https://plane.company.com
|
|
13
|
+
workspace_slug: acme
|
|
14
|
+
timeout_ms: 10000
|
|
15
|
+
headers:
|
|
16
|
+
X-Forwarded-Proto: https
|
|
17
|
+
tls:
|
|
18
|
+
reject_unauthorized: true
|
|
19
|
+
|
|
20
|
+
defaults:
|
|
21
|
+
# This profile's project universe. The TUI scans all of them by default;
|
|
22
|
+
# the CLI (plc issue list without --project) uses the first one.
|
|
23
|
+
projects: ["ENG", "OPS", "DESIGN"]
|
|
24
|
+
# TUI auto-refresh interval for every view. Omit for the 15s default;
|
|
25
|
+
# set 0 to disable (manual refresh still works).
|
|
26
|
+
auto_refresh_seconds: 15
|
|
27
|
+
# Profile-wide default sort, inherited by any view that declares no `sort`
|
|
28
|
+
# of its own. A view's `sort` replaces this wholesale (no merging).
|
|
29
|
+
sort:
|
|
30
|
+
- project: asc
|
|
31
|
+
- priority: desc
|
|
32
|
+
- state: asc
|
|
33
|
+
- updated_at: desc
|
|
34
|
+
|
|
35
|
+
cache:
|
|
36
|
+
provider: sqlite
|
|
37
|
+
ttl: 300
|
|
38
|
+
redis:
|
|
39
|
+
url: redis://localhost:6379
|
|
40
|
+
key_prefix: plc
|
|
41
|
+
|
|
42
|
+
# Semantic color theme. A built-in preset plus optional per-token overrides.
|
|
43
|
+
# Applies to the TUI and the `plc issue list` table. Omit for the default look.
|
|
44
|
+
theme:
|
|
45
|
+
preset: catppuccin # default | catppuccin | gruvbox | tokyonight
|
|
46
|
+
colors:
|
|
47
|
+
accent: "#89b4fa" # override a single token on top of the preset
|
|
48
|
+
priority:
|
|
49
|
+
urgent: "#f38ba8"
|
|
50
|
+
|
|
51
|
+
views:
|
|
52
|
+
# No `projects`: inherits defaults.projects and aggregates issues from all
|
|
53
|
+
# of them. The legacy scalar `sort` still works (read as priority desc).
|
|
54
|
+
- name: "My open"
|
|
55
|
+
filters:
|
|
56
|
+
assignee: me
|
|
57
|
+
state_group: [unstarted, started]
|
|
58
|
+
sort: priority
|
|
59
|
+
|
|
60
|
+
# Multi-level sort: each key breaks ties of the ones above it. This view's
|
|
61
|
+
# own `sort` overrides defaults.sort entirely.
|
|
62
|
+
- name: "Triage"
|
|
63
|
+
projects: ["ENG", "OPS"]
|
|
64
|
+
sort:
|
|
65
|
+
- assign: asc # group by assignee; unassigned issues last
|
|
66
|
+
- priority: desc # urgent first within each assignee
|
|
67
|
+
- updated_at: desc
|
|
68
|
+
|
|
69
|
+
# `projects` restricts to a subset of defaults.projects. cycle/module are
|
|
70
|
+
# only allowed when the view resolves to a single project.
|
|
71
|
+
- name: "Current sprint"
|
|
72
|
+
projects: ["ENG"]
|
|
73
|
+
filters:
|
|
74
|
+
cycle: current
|
|
75
|
+
state_group: [started]
|
|
76
|
+
|
|
77
|
+
# Multi-project view: aggregates critical bugs from ENG and OPS into one set.
|
|
78
|
+
- name: "Critical bugs"
|
|
79
|
+
projects: ["ENG", "OPS"]
|
|
80
|
+
filters:
|
|
81
|
+
labels: [bug]
|
|
82
|
+
priority: [urgent, high]
|
|
83
|
+
# Per-column layout (TUI only): hide STATE, widen ASSIGN, TITLE grows.
|
|
84
|
+
# The responsive solver still drops columns if the terminal is too narrow.
|
|
85
|
+
layout:
|
|
86
|
+
state: { hidden: true }
|
|
87
|
+
assign: { width: 24 }
|
|
88
|
+
title: { grow: true }
|
|
89
|
+
|
|
90
|
+
staging:
|
|
91
|
+
server:
|
|
92
|
+
base_url: https://plane-staging.company.com
|
|
93
|
+
workspace_slug: acme-staging
|
|
94
|
+
# Authenticate with `plc auth login` (writes to hosts.yaml). For a config file
|
|
95
|
+
# that holds the key directly, set `auth.api_key` here instead.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# ~/.config/plane-cli/keybindings.yaml
|
|
2
|
+
#
|
|
3
|
+
# Configuration reference (config.yaml, profiles, views): docs/CONFIGURATION.md
|
|
4
|
+
#
|
|
5
|
+
# Each entry maps an action id to a key spec. Action ids are stable strings;
|
|
6
|
+
# the full list is shown inside the TUI when you press `?`.
|
|
7
|
+
#
|
|
8
|
+
# Key spec grammar:
|
|
9
|
+
# single character: "j", "G", "?"
|
|
10
|
+
# special key: enter, escape, tab, space, backspace, delete,
|
|
11
|
+
# up, down, left, right, pageUp, pageDown, home, end,
|
|
12
|
+
# f1..f12
|
|
13
|
+
# modifiers: ctrl+x, shift+f1, ctrl+shift+r
|
|
14
|
+
#
|
|
15
|
+
# Unknown action ids fail at startup so typos surface immediately.
|
|
16
|
+
|
|
17
|
+
list.next: down
|
|
18
|
+
list.prev: up
|
|
19
|
+
list.page-down: pageDown
|
|
20
|
+
list.page-up: pageUp
|
|
21
|
+
list.top: g
|
|
22
|
+
list.bottom: G
|
|
23
|
+
|
|
24
|
+
global.refresh: r
|
|
25
|
+
global.refresh-all: R
|
|
26
|
+
global.help: "?"
|
|
27
|
+
global.quit: q
|
package/package.json
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "plc-cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "CLI and TUI for Plane (Cloud and self-hosted), inspired by gh and gh dash.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Bruno Mariano",
|
|
7
|
+
"homepage": "https://github.com/brunoomariano/PlaneCockpit#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/brunoomariano/PlaneCockpit.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/brunoomariano/PlaneCockpit/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"plane",
|
|
17
|
+
"cli",
|
|
18
|
+
"tui",
|
|
19
|
+
"project-management",
|
|
20
|
+
"issues",
|
|
21
|
+
"ink",
|
|
22
|
+
"terminal"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"bin": {
|
|
26
|
+
"plc": "./dist/cli.js"
|
|
27
|
+
},
|
|
28
|
+
"main": "./dist/cli.js",
|
|
29
|
+
"files": [
|
|
30
|
+
"dist/cli.js",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"examples"
|
|
34
|
+
],
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=24.0.0"
|
|
37
|
+
},
|
|
38
|
+
"packageManager": "pnpm@11.4.0",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "pnpm run gen:schema && tsup",
|
|
41
|
+
"gen:schema": "tsx scripts/gen-schema.ts",
|
|
42
|
+
"schema:check": "tsx scripts/gen-schema.ts --check",
|
|
43
|
+
"dev": "tsx src/cli.ts",
|
|
44
|
+
"fmt": "prettier --write .",
|
|
45
|
+
"fmt:check": "prettier --check .",
|
|
46
|
+
"lint": "eslint .",
|
|
47
|
+
"typecheck": "tsc --noEmit",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:watch": "vitest",
|
|
50
|
+
"test:cov": "vitest run --coverage",
|
|
51
|
+
"audit": "pnpm audit --prod --audit-level high",
|
|
52
|
+
"deadcode": "knip --include files,dependencies",
|
|
53
|
+
"deadcode:strict": "knip",
|
|
54
|
+
"quality": "pnpm run lint && pnpm run deadcode:strict",
|
|
55
|
+
"secrets:scan": "bash scripts/scan-secrets.sh",
|
|
56
|
+
"ci": "pnpm run fmt:check && pnpm run lint && pnpm run typecheck && pnpm run build && pnpm run test:cov && pnpm run deadcode:strict && pnpm run audit && pnpm run schema:check && pnpm run secrets:scan",
|
|
57
|
+
"prepublishOnly": "pnpm run ci"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@inquirer/prompts": "^8.5.0",
|
|
61
|
+
"better-sqlite3": "^12.10.0",
|
|
62
|
+
"cli-table3": "^0.6.5",
|
|
63
|
+
"commander": "^14.0.3",
|
|
64
|
+
"ink": "^7.0.4",
|
|
65
|
+
"ioredis": "^5.11.0",
|
|
66
|
+
"marked": "^18.0.4",
|
|
67
|
+
"open": "^11.0.0",
|
|
68
|
+
"react": "^19.2.6",
|
|
69
|
+
"turndown": "^7.2.4",
|
|
70
|
+
"yaml": "^2.9.0",
|
|
71
|
+
"zod": "^4.4.3"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
75
|
+
"@types/node": "^24.12.4",
|
|
76
|
+
"@types/react": "^19.2.15",
|
|
77
|
+
"@types/turndown": "^5.0.6",
|
|
78
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
79
|
+
"eslint": "^10.4.0",
|
|
80
|
+
"ink-testing-library": "^4.0.0",
|
|
81
|
+
"knip": "^6.14.2",
|
|
82
|
+
"prettier": "^3.8.3",
|
|
83
|
+
"tsup": "^8.5.1",
|
|
84
|
+
"tsx": "^4.22.3",
|
|
85
|
+
"typescript": "^6.0.3",
|
|
86
|
+
"typescript-eslint": "^8.60.0",
|
|
87
|
+
"vite": "^8.0.14",
|
|
88
|
+
"vitest": "^4.1.7"
|
|
89
|
+
}
|
|
90
|
+
}
|