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.
@@ -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
+ }