@lkangd/cc-settings-preset 1.0.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/LICENSE +15 -0
- package/README.md +304 -0
- package/README.zh-hans.md +304 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.js +547 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/args.d.ts +5 -0
- package/dist/core/args.js +20 -0
- package/dist/core/args.js.map +1 -0
- package/dist/core/errors.d.ts +4 -0
- package/dist/core/errors.js +9 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/json.d.ts +3 -0
- package/dist/core/json.js +46 -0
- package/dist/core/json.js.map +1 -0
- package/dist/core/name.d.ts +15 -0
- package/dist/core/name.js +58 -0
- package/dist/core/name.js.map +1 -0
- package/dist/core/paths.d.ts +26 -0
- package/dist/core/paths.js +79 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/schema.d.ts +137 -0
- package/dist/core/schema.js +70 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/spawn.d.ts +1 -0
- package/dist/core/spawn.js +32 -0
- package/dist/core/spawn.js.map +1 -0
- package/dist/core/terminal.d.ts +2 -0
- package/dist/core/terminal.js +5 -0
- package/dist/core/terminal.js.map +1 -0
- package/dist/flows/create-flow.d.ts +14 -0
- package/dist/flows/create-flow.js +13 -0
- package/dist/flows/create-flow.js.map +1 -0
- package/dist/flows/manage-flow.d.ts +9 -0
- package/dist/flows/manage-flow.js +8 -0
- package/dist/flows/manage-flow.js.map +1 -0
- package/dist/flows/project-launch-flow.d.ts +79 -0
- package/dist/flows/project-launch-flow.js +217 -0
- package/dist/flows/project-launch-flow.js.map +1 -0
- package/dist/flows/run-flow.d.ts +52 -0
- package/dist/flows/run-flow.js +167 -0
- package/dist/flows/run-flow.js.map +1 -0
- package/dist/flows/settings-select-flow.d.ts +21 -0
- package/dist/flows/settings-select-flow.js +20 -0
- package/dist/flows/settings-select-flow.js.map +1 -0
- package/dist/ink/components/global-shortcut-handler.d.ts +10 -0
- package/dist/ink/components/global-shortcut-handler.js +9 -0
- package/dist/ink/components/global-shortcut-handler.js.map +1 -0
- package/dist/ink/components/json-tree-view.d.ts +3 -0
- package/dist/ink/components/json-tree-view.js +52 -0
- package/dist/ink/components/json-tree-view.js.map +1 -0
- package/dist/ink/components/resize-context.d.ts +8 -0
- package/dist/ink/components/resize-context.js +10 -0
- package/dist/ink/components/resize-context.js.map +1 -0
- package/dist/ink/components/text-input-editing.d.ts +23 -0
- package/dist/ink/components/text-input-editing.js +42 -0
- package/dist/ink/components/text-input-editing.js.map +1 -0
- package/dist/ink/components/text-input-field.d.ts +15 -0
- package/dist/ink/components/text-input-field.js +127 -0
- package/dist/ink/components/text-input-field.js.map +1 -0
- package/dist/ink/components/text-input.d.ts +10 -0
- package/dist/ink/components/text-input.js +22 -0
- package/dist/ink/components/text-input.js.map +1 -0
- package/dist/ink/components/toggle-column.d.ts +8 -0
- package/dist/ink/components/toggle-column.js +30 -0
- package/dist/ink/components/toggle-column.js.map +1 -0
- package/dist/ink/components/truncate-text.d.ts +3 -0
- package/dist/ink/components/truncate-text.js +6 -0
- package/dist/ink/components/truncate-text.js.map +1 -0
- package/dist/ink/components/two-column-settings-view.d.ts +9 -0
- package/dist/ink/components/two-column-settings-view.js +16 -0
- package/dist/ink/components/two-column-settings-view.js.map +1 -0
- package/dist/ink/components/use-text-input-state.d.ts +45 -0
- package/dist/ink/components/use-text-input-state.js +100 -0
- package/dist/ink/components/use-text-input-state.js.map +1 -0
- package/dist/ink/components/use-text-input.d.ts +8 -0
- package/dist/ink/components/use-text-input.js +87 -0
- package/dist/ink/components/use-text-input.js.map +1 -0
- package/dist/ink/create-app.d.ts +11 -0
- package/dist/ink/create-app.js +49 -0
- package/dist/ink/create-app.js.map +1 -0
- package/dist/ink/manage-app.d.ts +25 -0
- package/dist/ink/manage-app.js +92 -0
- package/dist/ink/manage-app.js.map +1 -0
- package/dist/ink/project-launch-app.d.ts +22 -0
- package/dist/ink/project-launch-app.js +144 -0
- package/dist/ink/project-launch-app.js.map +1 -0
- package/dist/ink/project-manage-app.d.ts +28 -0
- package/dist/ink/project-manage-app.js +239 -0
- package/dist/ink/project-manage-app.js.map +1 -0
- package/dist/ink/settings-select-app.d.ts +9 -0
- package/dist/ink/settings-select-app.js +31 -0
- package/dist/ink/settings-select-app.js.map +1 -0
- package/dist/services/global-last-settings-service.d.ts +4 -0
- package/dist/services/global-last-settings-service.js +25 -0
- package/dist/services/global-last-settings-service.js.map +1 -0
- package/dist/services/launch-preset-service.d.ts +13 -0
- package/dist/services/launch-preset-service.js +186 -0
- package/dist/services/launch-preset-service.js.map +1 -0
- package/dist/services/mcp-service.d.ts +18 -0
- package/dist/services/mcp-service.js +106 -0
- package/dist/services/mcp-service.js.map +1 -0
- package/dist/services/plugin-service.d.ts +16 -0
- package/dist/services/plugin-service.js +58 -0
- package/dist/services/plugin-service.js.map +1 -0
- package/dist/services/preset-service.d.ts +13 -0
- package/dist/services/preset-service.js +152 -0
- package/dist/services/preset-service.js.map +1 -0
- package/dist/services/project-store-service.d.ts +6 -0
- package/dist/services/project-store-service.js +16 -0
- package/dist/services/project-store-service.js.map +1 -0
- package/dist/services/reveal-service.d.ts +2 -0
- package/dist/services/reveal-service.js +7 -0
- package/dist/services/reveal-service.js.map +1 -0
- package/dist/services/settings-finalizer-service.d.ts +2 -0
- package/dist/services/settings-finalizer-service.js +21 -0
- package/dist/services/settings-finalizer-service.js.map +1 -0
- package/dist/services/settings-source-service.d.ts +11 -0
- package/dist/services/settings-source-service.js +26 -0
- package/dist/services/settings-source-service.js.map +1 -0
- package/dist/services/skill-service.d.ts +24 -0
- package/dist/services/skill-service.js +193 -0
- package/dist/services/skill-service.js.map +1 -0
- package/package.json +67 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, lkangd
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://github.com/lkangd/cc-settings-preset">
|
|
3
|
+
<img
|
|
4
|
+
src="https://raw.githubusercontent.com/lkangd/cc-settings-preset/main/assets/ccsp-logo.png"
|
|
5
|
+
alt="CCSP — Claude Code Settings Preset"
|
|
6
|
+
width="420"
|
|
7
|
+
/>
|
|
8
|
+
</a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<strong>A switchable, reusable runtime settings preset selector for Claude Code.</strong>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://www.npmjs.com/package/@lkangd/cc-settings-preset"><img src="https://img.shields.io/npm/v/@lkangd/cc-settings-preset?style=flat-square" alt="npm version" /></a>
|
|
17
|
+
<a href="https://github.com/lkangd/cc-settings-preset/blob/main/LICENSE"><img src="https://img.shields.io/github/license/lkangd/cc-settings-preset?style=flat-square" alt="license" /></a>
|
|
18
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/@lkangd/cc-settings-preset?style=flat-square" alt="node version" /></a>
|
|
19
|
+
<a href="https://github.com/lkangd/cc-settings-preset"><img src="https://img.shields.io/github/stars/lkangd/cc-settings-preset?style=flat-square" alt="stars" /></a>
|
|
20
|
+
<a href="https://github.com/lkangd/cc-settings-preset/issues"><img src="https://img.shields.io/github/issues/lkangd/cc-settings-preset?style=flat-square" alt="issues" /></a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<img
|
|
25
|
+
src="https://raw.githubusercontent.com/lkangd/cc-settings-preset/main/assets/screen-shot.png"
|
|
26
|
+
alt="CCSP TUI: base preset selection and project launch toggles"
|
|
27
|
+
width="900"
|
|
28
|
+
/>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<em>Interactive flow: pick a global base preset (left), preview its JSON (right), then tune plugins / skills / MCP per launch before starting Claude Code.</em>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
**English** | [简体中文](README.zh-hans.md)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quick Start
|
|
40
|
+
|
|
41
|
+
**Prerequisites:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI installed (`claude` available on your `PATH`).
|
|
42
|
+
|
|
43
|
+
### Install
|
|
44
|
+
|
|
45
|
+
**macOS (Homebrew, recommended)** — via the personal tap [lkangd/homebrew-tap](https://github.com/lkangd/homebrew-tap); Node.js 20 is installed as a dependency:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
brew tap lkangd/tap
|
|
49
|
+
brew install cc-settings-preset
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**npm / pnpm** — requires Node.js ≥ 20.19.2 on your machine:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g @lkangd/cc-settings-preset
|
|
56
|
+
# or
|
|
57
|
+
pnpm add -g @lkangd/cc-settings-preset
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
After install, use either `ccsp` or `cc-settings-preset`.
|
|
61
|
+
|
|
62
|
+
### Usage
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Start from a project directory (recommended entry)
|
|
66
|
+
ccsp
|
|
67
|
+
|
|
68
|
+
# Forward Claude Code args (ccsp owns --settings)
|
|
69
|
+
ccsp claude --help
|
|
70
|
+
ccsp claude -p "review this PR"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**First-time workflow:**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 1. Import a global base preset from existing settings
|
|
77
|
+
ccsp create
|
|
78
|
+
|
|
79
|
+
# 2. In a project: pick a preset, tune plugins / skills / MCP for this launch, then start Claude
|
|
80
|
+
ccsp
|
|
81
|
+
|
|
82
|
+
# 3. Manage global or project launch presets
|
|
83
|
+
ccsp manage
|
|
84
|
+
ccsp manage --project
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Use Cases
|
|
90
|
+
|
|
91
|
+
CCSP (**C**laude **C**ode **S**ettings **P**reset) helps when you need to switch Claude Code configuration across contexts without hand-editing JSON every time.
|
|
92
|
+
|
|
93
|
+
### 1. Multiple models / API backends
|
|
94
|
+
|
|
95
|
+
Different projects use different API keys, `ANTHROPIC_BASE_URL`, or default models (Opus, Sonnet, custom gateway). Editing `~/.claude/settings.json` by hand is error-prone.
|
|
96
|
+
|
|
97
|
+
**Approach:** Run `ccsp create` to save a **global base preset** per environment (including `env` and model fields). In each project, run `ccsp` and pick the preset—no repeated edits to your main settings file.
|
|
98
|
+
|
|
99
|
+
### 2. Per-project plugins, skills, and MCP
|
|
100
|
+
|
|
101
|
+
Under one global baseline, project A disables an official plugin, project B blocks Chrome DevTools MCP, project C turns off certain skills.
|
|
102
|
+
|
|
103
|
+
**Approach:** Use a **launch preset** in the project to override only `enabledPlugins`, `skillOverrides`, and `deniedMcpServers`. CCSP merges that with the base preset into a temp settings file, then starts `claude`.
|
|
104
|
+
|
|
105
|
+
### 3. Team baseline, personal launch tweaks
|
|
106
|
+
|
|
107
|
+
The team can commit `.claude/settings.json` as the project baseline. Individuals keep global presets locally and store launch combinations under `.claude/.ccsp/` (gitignored by default to avoid leaking secrets).
|
|
108
|
+
|
|
109
|
+
### 4. Replace long `claude` one-liners
|
|
110
|
+
|
|
111
|
+
Instead of:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
claude --settings ~/.claude/my-api-1.json -- ...
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
use `ccsp` or `ccsp claude -- ...` to pick presets and toggles in the TUI; CCSP generates the settings path and runs `claude --settings <generated>`.
|
|
118
|
+
|
|
119
|
+
### 5. Config management and preview
|
|
120
|
+
|
|
121
|
+
- `ccsp manage` — browse, rename, delete global base presets, preview JSON, launch from the UI.
|
|
122
|
+
- `ccsp manage --project` — manage launch presets for the current repo (create / save / rename / delete / launch).
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## How It Works
|
|
127
|
+
|
|
128
|
+
### Two-layer preset model
|
|
129
|
+
|
|
130
|
+
| Layer | Location | Role |
|
|
131
|
+
|-------|----------|------|
|
|
132
|
+
| **Base preset** | `~/.ccsp/settings/*.json` | Full settings snapshot (import from user / project / project-local or any JSON) |
|
|
133
|
+
| **Launch preset** | `<project>/.claude/.ccsp/launch-presets/*.json` | **Delta** only: plugin toggles, skill overrides, MCP deny list |
|
|
134
|
+
|
|
135
|
+
On launch, CCSP does **not** overwrite `~/.claude/settings.json` or the project’s `.claude/settings.json`. It writes a **temporary merged file** (`.claude/.ccsp/tmp/<timestamp>-settings.json`) and runs:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
claude --settings <temp-file> [your other args]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### ASCII flow
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
145
|
+
│ User runs ccsp / ccsp claude │
|
|
146
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
147
|
+
│
|
|
148
|
+
▼
|
|
149
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
150
|
+
│ ① Discover settings sources (collect if present; no runtime merge yet) │
|
|
151
|
+
│ · .claude/settings.local.json (project-local) │
|
|
152
|
+
│ · .claude/settings.json (project) │
|
|
153
|
+
│ · ~/.claude/settings.json (user) │
|
|
154
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
155
|
+
│
|
|
156
|
+
┌─────────────────┴─────────────────┐
|
|
157
|
+
▼ ▼
|
|
158
|
+
Base presets exist in ~/.ccsp? No base presets yet
|
|
159
|
+
│ │
|
|
160
|
+
▼ ▼
|
|
161
|
+
┌───────────────────────────┐ Use empty base {} or
|
|
162
|
+
│ TUI: pick global base │ run ccsp create first
|
|
163
|
+
│ (remember last per cwd) │
|
|
164
|
+
└───────────────────────────┘
|
|
165
|
+
│
|
|
166
|
+
▼
|
|
167
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
168
|
+
│ ② Resolve effective baseline │
|
|
169
|
+
│ · Plugins: user < project < project-local < selected base preset │
|
|
170
|
+
│ · Skills: scan ~/.claude/skills, project skills/commands, plugin cache│
|
|
171
|
+
│ · MCP: merge .mcp.json, ~/.claude.json, plugin manifests, etc. │
|
|
172
|
+
└──────────────────────────────────────────────────────────────────────────┘
|
|
173
|
+
│
|
|
174
|
+
▼
|
|
175
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
176
|
+
│ ③ TUI: project launch layer (Launch Preset) │
|
|
177
|
+
│ · Left: launch presets Right: plugin | skill | MCP toggles │
|
|
178
|
+
│ · Save as preset / overwrite / launch without saving │
|
|
179
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
180
|
+
│
|
|
181
|
+
▼
|
|
182
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
183
|
+
│ ④ finalizeSettings(base, launch) │
|
|
184
|
+
│ · Copy full base preset │
|
|
185
|
+
│ · Strip enabledPlugins / skillOverrides / deniedMcpServers from base │
|
|
186
|
+
│ · Apply launch-layer values for those three fields (if any) │
|
|
187
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
188
|
+
│
|
|
189
|
+
▼
|
|
190
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
191
|
+
│ ⑤ Write .claude/.ccsp/tmp/*.json (gitignored; keep at most 20 files) │
|
|
192
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
193
|
+
│
|
|
194
|
+
▼
|
|
195
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
196
|
+
│ ⑥ spawn: claude --settings <tmp> [sanitized args] │
|
|
197
|
+
│ · Strip user --settings / --settings=... (managed by ccsp) │
|
|
198
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Pain points with Claude Code settings alone
|
|
202
|
+
|
|
203
|
+
| Pain point | Why it hurts |
|
|
204
|
+
|------------|--------------|
|
|
205
|
+
| **Multiple files and scopes** | user / project / project-local settings make it hard to see what actually applies. |
|
|
206
|
+
| **High switching cost** | Changing API, model, or plugin mix means editing JSON or memorizing `--settings` paths. |
|
|
207
|
+
| **Easy to break main config** | Editing `~/.claude/settings.json` can mix secrets and global defaults. |
|
|
208
|
+
| **Scattered toggles** | `enabledPlugins`, `skillOverrides`, `deniedMcpServers` sit beside `env` with no “this launch only” view. |
|
|
209
|
+
| **Commit risk** | Project settings with keys in `env` can be committed by mistake. |
|
|
210
|
+
|
|
211
|
+
### What CCSP adds
|
|
212
|
+
|
|
213
|
+
- **Non-destructive launch** — inject config via temp files; does not force-overwrite your main settings.
|
|
214
|
+
- **Two-layer split** — global “base environment” vs project “launch delta” for multi-repo work.
|
|
215
|
+
- **Visual toggles** — terminal TUI to browse JSON and flip plugins / skills / MCP.
|
|
216
|
+
- **Remembers last choice** — per project directory for base and launch presets.
|
|
217
|
+
- **Safer defaults** — `.claude/.ccsp/` gets a `.gitignore` that ignores everything on init.
|
|
218
|
+
|
|
219
|
+
### Limitations (read before assuming)
|
|
220
|
+
|
|
221
|
+
| Cannot / caveat | Explanation |
|
|
222
|
+
|-----------------|-------------|
|
|
223
|
+
| **Not a Claude Code replacement** | Wraps the `claude` subprocess only; exits if CLI is missing. |
|
|
224
|
+
| **Does not write back main settings** | Merged output is not saved to `~/.claude/settings.json`; sync manually or update base presets via `ccsp create`. |
|
|
225
|
+
| **Owns `--settings`** | Your `--settings` is ignored with a warning; path is generated by CCSP. |
|
|
226
|
+
| **Limited launch fields** | Launch presets only override `enabledPlugins`, `skillOverrides`, `deniedMcpServers`; other fields (e.g. `env`) come from the base preset. |
|
|
227
|
+
| **No “add MCP server” in UI** | Can **deny** discovered MCPs via `deniedMcpServers`; cannot create new server entries. |
|
|
228
|
+
| **No headless / CI mode** | Main flow is Ink TUI; `create` / `manage` are interactive unless you edit JSON yourself. |
|
|
229
|
+
| **Derived presets** | Schema supports `derived` type; CLI does not expose full create/manage flow yet. |
|
|
230
|
+
| **Project store is local by default** | `launch-presets` and `tmp` under `.claude/.ccsp/` are not in Git unless you opt in. |
|
|
231
|
+
| **Temp file cap** | Oldest files in `tmp` are pruned when count exceeds 20. |
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Command Reference
|
|
236
|
+
|
|
237
|
+
| Command | Description |
|
|
238
|
+
|---------|-------------|
|
|
239
|
+
| `ccsp` | Default: pick base preset → configure launch layer → start `claude` |
|
|
240
|
+
| `ccsp claude [args...]` | Same, forwarding `args` to `claude` (without `--settings`) |
|
|
241
|
+
| `ccsp create` | Interactively create a global base preset |
|
|
242
|
+
| `ccsp manage` | Manage global base presets (preview / rename / delete / create / launch) |
|
|
243
|
+
| `ccsp manage --project` | Manage launch presets for the current project |
|
|
244
|
+
|
|
245
|
+
### TUI shortcuts
|
|
246
|
+
|
|
247
|
+
**Base preset selection:** `j`/`k` or arrows to move, `Enter` to confirm, `q` to quit.
|
|
248
|
+
|
|
249
|
+
**Global manage (`ccsp manage`):** `l` launch, `r` rename, `d` delete, `c` create, `o` reveal in Finder, `q` quit.
|
|
250
|
+
|
|
251
|
+
**Project launch layer:** switch between presets and plugin / skill / MCP columns; save as launch preset. `Ctrl+L` refreshes the UI.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Directory Layout
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
~/.ccsp/
|
|
259
|
+
├── index.json # global base preset index
|
|
260
|
+
├── settings/
|
|
261
|
+
│ └── <name>-settings.json # base preset body
|
|
262
|
+
└── last-settings.json # last base preset name per project cwd
|
|
263
|
+
|
|
264
|
+
<project>/.claude/.ccsp/ # entire dir gitignored by default
|
|
265
|
+
├── launch-presets/
|
|
266
|
+
│ ├── index.json
|
|
267
|
+
│ └── <name>-launch.json # launch-layer overrides only
|
|
268
|
+
├── tmp/
|
|
269
|
+
│ └── <timestamp>-settings.json
|
|
270
|
+
└── last-used.json # last launch preset used
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Development
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
git clone https://github.com/lkangd/cc-settings-preset.git
|
|
279
|
+
cd cc-settings-preset
|
|
280
|
+
pnpm install
|
|
281
|
+
pnpm run dev # run tsx src/cli.ts directly
|
|
282
|
+
pnpm run check # typecheck + build + test
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Contributing
|
|
288
|
+
|
|
289
|
+
Issues and pull requests are welcome. Before you contribute:
|
|
290
|
+
|
|
291
|
+
1. **Search existing issues** to avoid duplicates; open an issue for new features with motivation and proposed usage.
|
|
292
|
+
2. **Verify locally:** `pnpm run check` must pass; CLI changes should include or update tests under `tests/`.
|
|
293
|
+
3. **Style:** Match the codebase (ESM, strict TypeScript, Ink + `flows/` state machines); avoid unrelated refactors.
|
|
294
|
+
4. **Scope:** CCSP focuses on settings presets and launch orchestration—avoid heavy unrelated dependencies.
|
|
295
|
+
5. **Docs:** Update both `README.md` and `README.zh-hans.md` for user-visible behavior changes.
|
|
296
|
+
6. **Commits:** Concise English or Chinese is fine; explain *why*, not only *what*.
|
|
297
|
+
|
|
298
|
+
**Bug reports should include:** OS, Node version, how you invoked `ccsp`, relevant `~/.ccsp` or `.claude/.ccsp` layout (redact secrets), and full terminal output.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## License
|
|
303
|
+
|
|
304
|
+
[ISC](./LICENSE) © lkangd
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://github.com/lkangd/cc-settings-preset">
|
|
3
|
+
<img
|
|
4
|
+
src="https://raw.githubusercontent.com/lkangd/cc-settings-preset/main/assets/ccsp-logo.png"
|
|
5
|
+
alt="CCSP — Claude Code Settings Preset"
|
|
6
|
+
width="420"
|
|
7
|
+
/>
|
|
8
|
+
</a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<strong>为 Claude Code 提供可切换、可复用的运行时 Settings 预设选择器。</strong>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://www.npmjs.com/package/@lkangd/cc-settings-preset"><img src="https://img.shields.io/npm/v/@lkangd/cc-settings-preset?style=flat-square" alt="npm version" /></a>
|
|
17
|
+
<a href="https://github.com/lkangd/cc-settings-preset/blob/main/LICENSE"><img src="https://img.shields.io/github/license/lkangd/cc-settings-preset?style=flat-square" alt="license" /></a>
|
|
18
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/@lkangd/cc-settings-preset?style=flat-square" alt="node version" /></a>
|
|
19
|
+
<a href="https://github.com/lkangd/cc-settings-preset"><img src="https://img.shields.io/github/stars/lkangd/cc-settings-preset?style=flat-square" alt="stars" /></a>
|
|
20
|
+
<a href="https://github.com/lkangd/cc-settings-preset/issues"><img src="https://img.shields.io/github/issues/lkangd/cc-settings-preset?style=flat-square" alt="issues" /></a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<img
|
|
25
|
+
src="https://raw.githubusercontent.com/lkangd/cc-settings-preset/main/assets/screen-shot.png"
|
|
26
|
+
alt="CCSP 交互界面:基础预设选择与项目启动开关"
|
|
27
|
+
width="900"
|
|
28
|
+
/>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<em>典型流程:先选全局基础预设(左)并预览 JSON(右),再在项目启动层切换插件 / Skill / MCP,最后启动 Claude Code。</em>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
[English](README.md) | **简体中文**
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quick Start
|
|
40
|
+
|
|
41
|
+
**前置条件:** 已安装 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI(`claude` 在 `PATH` 中可用)。
|
|
42
|
+
|
|
43
|
+
### 安装
|
|
44
|
+
|
|
45
|
+
**macOS(Homebrew,推荐)** — 通过个人 tap [lkangd/homebrew-tap](https://github.com/lkangd/homebrew-tap) 安装,会自动拉取 Node.js 20 依赖:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
brew tap lkangd/tap
|
|
49
|
+
brew install cc-settings-preset
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**npm / pnpm** — 需本机已有 Node.js ≥ 20.19.2:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g @lkangd/cc-settings-preset
|
|
56
|
+
# 或
|
|
57
|
+
pnpm add -g @lkangd/cc-settings-preset
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
安装后可用 `ccsp` 或 `cc-settings-preset` 命令。
|
|
61
|
+
|
|
62
|
+
### 使用
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# 在项目目录中启动(推荐入口)
|
|
66
|
+
ccsp
|
|
67
|
+
|
|
68
|
+
# 透传 Claude Code 参数(ccsp 会接管 --settings)
|
|
69
|
+
ccsp claude --help
|
|
70
|
+
ccsp claude -p "review this PR"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**首次使用建议:**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 1. 从现有 settings 导入一份「全局基础预设」
|
|
77
|
+
ccsp create
|
|
78
|
+
|
|
79
|
+
# 2. 进入项目,选择预设并配置本次启动的插件 / Skill / MCP,然后启动 Claude
|
|
80
|
+
ccsp
|
|
81
|
+
|
|
82
|
+
# 3. 管理全局预设或项目启动预设
|
|
83
|
+
ccsp manage
|
|
84
|
+
ccsp manage --project
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 使用场景
|
|
90
|
+
|
|
91
|
+
CCSP(**C**laude **C**ode **S**ettings **P**reset)面向「同一份 Claude Code 配置,需要在不同上下文里快速切换」的日常开发。典型场景如下。
|
|
92
|
+
|
|
93
|
+
### 1. 多模型 / 多后端环境切换
|
|
94
|
+
|
|
95
|
+
你在不同项目里使用不同的 API Key、`ANTHROPIC_BASE_URL`、默认模型(如 Opus / Sonnet / 自建网关)。手动改 `~/.claude/settings.json` 容易串环境。
|
|
96
|
+
|
|
97
|
+
**做法:** 用 `ccsp create` 为每个环境保存一份**全局基础预设**(含 `env`、模型相关字段等),进入项目后 `ccsp` 选预设即可,无需反复编辑主 settings 文件。
|
|
98
|
+
|
|
99
|
+
### 2. 按项目控制插件、Skill、MCP
|
|
100
|
+
|
|
101
|
+
同一套全局配置下,项目 A 需要关闭某官方插件、项目 B 要禁用 Chrome DevTools MCP、项目 C 要关掉部分 Skill。
|
|
102
|
+
|
|
103
|
+
**做法:** 在项目内用**启动预设**(Launch Preset)只覆盖 `enabledPlugins`、`skillOverrides`、`deniedMcpServers`,与全局基础预设合并后生成临时 settings,再启动 `claude`。
|
|
104
|
+
|
|
105
|
+
### 3. 团队内共享「基础配置」,个人保留「启动差异」
|
|
106
|
+
|
|
107
|
+
团队可约定把 `.claude/settings.json` 提交进仓库作为项目基线;个人仍可在本机维护全局预设,并在 `.claude/.ccsp/` 下保存自己的启动组合(默认被 gitignore,避免误提交密钥)。
|
|
108
|
+
|
|
109
|
+
### 4. 替代「记住一长串 claude 命令」
|
|
110
|
+
|
|
111
|
+
以前可能需要:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
claude --settings ~/.claude/my-api-1.json -- ...
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**做法:** `ccsp` / `ccsp claude -- ...` 在 TUI 里选预设、勾选开关,由工具生成临时 settings 路径并调用 `claude --settings <generated>`。
|
|
118
|
+
|
|
119
|
+
### 5. 配置管理与预览
|
|
120
|
+
|
|
121
|
+
- `ccsp manage`:浏览、重命名、删除全局基础预设,预览 JSON 树,并可直接从管理界面启动。
|
|
122
|
+
- `ccsp manage --project`:管理当前仓库下的启动预设(创建 / 保存 / 重命名 / 删除 / 启动)。
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 工作原理
|
|
127
|
+
|
|
128
|
+
### 两层预设模型
|
|
129
|
+
|
|
130
|
+
| 层级 | 存储位置 | 作用 |
|
|
131
|
+
|------|----------|------|
|
|
132
|
+
| **全局基础预设**(Base Preset) | `~/.ccsp/settings/*.json` | 一份完整的 settings 快照(可从 user / project / project-local 或任意 JSON 导入) |
|
|
133
|
+
| **项目启动预设**(Launch Preset) | `<项目>/.claude/.ccsp/launch-presets/*.json` | 仅记录相对基础的**差异**:插件开关、Skill 覆盖、MCP 拒绝列表 |
|
|
134
|
+
|
|
135
|
+
启动时 CCSP **不会直接改写** `~/.claude/settings.json` 或项目里的 `.claude/settings.json`,而是写入 **临时合并文件**(`.claude/.ccsp/tmp/<timestamp>-settings.json`),再执行:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
claude --settings <临时文件> [你传入的其它参数]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### ASCII 逻辑图
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
145
|
+
│ 用户执行 ccsp / ccsp claude │
|
|
146
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
147
|
+
│
|
|
148
|
+
▼
|
|
149
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
150
|
+
│ ① 发现现有 Settings 来源(按存在性收集,非运行时合并) │
|
|
151
|
+
│ · .claude/settings.local.json (project-local) │
|
|
152
|
+
│ · .claude/settings.json (project) │
|
|
153
|
+
│ · ~/.claude/settings.json (user) │
|
|
154
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
155
|
+
│
|
|
156
|
+
┌─────────────────┴─────────────────┐
|
|
157
|
+
▼ ▼
|
|
158
|
+
~/.ccsp 中已有基础预设? 尚无基础预设
|
|
159
|
+
│ │
|
|
160
|
+
▼ ▼
|
|
161
|
+
┌───────────────────────────┐ 使用空基础 {} 或
|
|
162
|
+
│ TUI:选择全局基础预设 │ 先 ccsp create 导入
|
|
163
|
+
│ (记住每个 cwd 上次选择) │
|
|
164
|
+
└───────────────────────────┘
|
|
165
|
+
│
|
|
166
|
+
▼
|
|
167
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
168
|
+
│ ② 解析「有效基线」 │
|
|
169
|
+
│ · 插件:user < project < project-local < 所选基础预设 │
|
|
170
|
+
│ · Skill:扫描 ~/.claude/skills、项目 skills/commands、已启用插件缓存 │
|
|
171
|
+
│ · MCP:合并 .mcp.json、~/.claude.json、插件 manifest 等来源 │
|
|
172
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
173
|
+
│
|
|
174
|
+
▼
|
|
175
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
176
|
+
│ ③ TUI:项目启动层(Launch Preset) │
|
|
177
|
+
│ · 左:已有启动预设列表 右:插件 | Skill | MCP 三列开关 │
|
|
178
|
+
│ · 可保存为新预设 / 覆盖当前预设 / 临时启动不保存 │
|
|
179
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
180
|
+
│
|
|
181
|
+
▼
|
|
182
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
183
|
+
│ ④ finalizeSettings(base, launch) │
|
|
184
|
+
│ · 以基础预设为主拷贝全文 │
|
|
185
|
+
│ · 去掉基础里的 enabledPlugins / skillOverrides / deniedMcpServers │
|
|
186
|
+
│ · 再写入 launch 层的上述三个字段(若有) │
|
|
187
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
188
|
+
│
|
|
189
|
+
▼
|
|
190
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
191
|
+
│ ⑤ 写入 .claude/.ccsp/tmp/*.json(目录默认 gitignore,最多保留 20 份) │
|
|
192
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
193
|
+
│
|
|
194
|
+
▼
|
|
195
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
196
|
+
│ ⑥ spawn: claude --settings <tmp> [sanitized args] │
|
|
197
|
+
│ · 剥离用户传入的 --settings / --settings=...(由 ccsp 统一管理) │
|
|
198
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 针对 Claude Code Settings 的痛点
|
|
202
|
+
|
|
203
|
+
| 痛点 | 说明 |
|
|
204
|
+
|------|------|
|
|
205
|
+
| **多文件、多层作用域** | Claude Code 同时存在 user / project / project-local settings,手工维护时难以一眼看清「最终生效」的是哪一层。 |
|
|
206
|
+
| **切换成本高** | 换 API、换模型、换插件组合往往要改 JSON 或记不同 `--settings` 路径。 |
|
|
207
|
+
| **易误改主配置** | 直接编辑 `~/.claude/settings.json` 容易把个人密钥、全局默认一起改掉。 |
|
|
208
|
+
| **插件 / Skill / MCP 分散** | `enabledPlugins`、`skillOverrides`、`deniedMcpServers` 与 `env` 等字段混在同一文件,缺少面向「本次启动」的轻量视图。 |
|
|
209
|
+
| **提交风险** | 项目 settings 若含 `env` 里的 Key,误提交到 Git 风险高。 |
|
|
210
|
+
|
|
211
|
+
### CCSP 的优势
|
|
212
|
+
|
|
213
|
+
- **非破坏性启动**:通过临时 settings 文件注入配置,不强制覆盖你的主 settings 文件。
|
|
214
|
+
- **两层分离**:全局「基础环境」与项目「启动差异」解耦,适合多仓库并行开发。
|
|
215
|
+
- **可视化开关**:在终端 TUI 中浏览 JSON、切换插件 / Skill / MCP,比手改数组更不易出错。
|
|
216
|
+
- **记忆上次选择**:按项目目录记住上次使用的基础预设与启动预设。
|
|
217
|
+
- **安全默认值**:`.claude/.ccsp/` 初始化时写入 `.gitignore`(忽略全部),降低临时文件与本地预设误提交概率。
|
|
218
|
+
|
|
219
|
+
### 局限与误解澄清(请务必阅读)
|
|
220
|
+
|
|
221
|
+
| 不能做到 / 需注意 | 说明 |
|
|
222
|
+
|-------------------|------|
|
|
223
|
+
| **不是 Claude Code 替代品** | 仅包装 `claude` 子进程;未安装 CLI 时会报错退出。 |
|
|
224
|
+
| **不自动回写主 settings** | 不会把合并结果写回 `~/.claude/settings.json`;若你希望永久生效,仍需自行同步或使用 `ccsp create` 更新基础预设。 |
|
|
225
|
+
| **接管 `--settings`** | 传入的 `--settings` 会被忽略并提示警告;路径由 CCSP 生成。 |
|
|
226
|
+
| **启动层字段有限** | Launch Preset 只覆盖 `enabledPlugins`、`skillOverrides`、`deniedMcpServers`;其它字段(如 `env`)来自基础预设。 |
|
|
227
|
+
| **不能通过 UI 新增 MCP Server** | 仅支持基于已发现 MCP 的**禁用**(`deniedMcpServers`),不能创建新 server 配置。 |
|
|
228
|
+
| **无无头 / CI 模式** | 主流程为 Ink 交互界面;`create` / `manage` 亦为 TUI,不适合纯脚本无人值守选型(除非自行读写 JSON)。 |
|
|
229
|
+
| **Derived 预设** | 数据模型支持 `derived` 类型,但当前 CLI 未暴露创建/管理衍生预设的完整流程。 |
|
|
230
|
+
| **项目存储默认本地** | `launch-presets` 与 `tmp` 在 `.claude/.ccsp/` 下,默认不进 Git;团队共享需另行约定导出方式。 |
|
|
231
|
+
| **临时文件有上限** | `tmp` 目录超过 20 个 settings 文件时会删除最旧的。 |
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 命令参考
|
|
236
|
+
|
|
237
|
+
| 命令 | 说明 |
|
|
238
|
+
|------|------|
|
|
239
|
+
| `ccsp` | 默认流程:选基础预设 → 配置启动层 → 启动 `claude` |
|
|
240
|
+
| `ccsp claude [args...]` | 同上,并将 `args` 传给 `claude`(不含 `--settings`) |
|
|
241
|
+
| `ccsp create` | 交互式创建全局基础预设 |
|
|
242
|
+
| `ccsp manage` | 管理全局基础预设(预览 / 重命名 / 删除 / 新建 / 启动) |
|
|
243
|
+
| `ccsp manage --project` | 管理当前项目的启动预设 |
|
|
244
|
+
|
|
245
|
+
### 常用快捷键(TUI)
|
|
246
|
+
|
|
247
|
+
**选择基础预设:** `j`/`k` 或方向键移动,`Enter` 确认,`q` 退出。
|
|
248
|
+
|
|
249
|
+
**管理全局预设(`ccsp manage`):** `l` 启动,`r` 重命名,`d` 删除,`c` 新建,`o` 在 Finder 中打开文件,`q` 退出。
|
|
250
|
+
|
|
251
|
+
**项目启动层:** 在预设与插件 / Skill / MCP 列间切换并开关;支持保存为启动预设。终端内 `Ctrl+L` 可刷新界面。
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 目录结构
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
~/.ccsp/
|
|
259
|
+
├── index.json # 全局基础预设索引
|
|
260
|
+
├── settings/
|
|
261
|
+
│ └── <name>-settings.json # 基础预设内容
|
|
262
|
+
└── last-settings.json # 各项目 cwd 上次使用的基础预设名
|
|
263
|
+
|
|
264
|
+
<项目>/.claude/.ccsp/ # 默认整目录 gitignore
|
|
265
|
+
├── launch-presets/
|
|
266
|
+
│ ├── index.json
|
|
267
|
+
│ └── <name>-launch.json # 仅含启动层覆盖字段
|
|
268
|
+
├── tmp/
|
|
269
|
+
│ └── <timestamp>-settings.json
|
|
270
|
+
└── last-used.json # 上次使用的启动预设
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 从源码开发
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
git clone https://github.com/lkangd/cc-settings-preset.git
|
|
279
|
+
cd cc-settings-preset
|
|
280
|
+
pnpm install
|
|
281
|
+
pnpm run dev # 直接跑 tsx src/cli.ts
|
|
282
|
+
pnpm run check # typecheck + build + test
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 贡献指南
|
|
288
|
+
|
|
289
|
+
欢迎 Issue 与 Pull Request。参与前建议:
|
|
290
|
+
|
|
291
|
+
1. **先搜已有 Issue**,避免重复讨论;新功能请先开 Issue 简述动机与用法。
|
|
292
|
+
2. **本地验证:** `pnpm run check` 须通过;若改动 CLI 行为,请补充或更新 `tests/` 下对应用例。
|
|
293
|
+
3. **风格:** 与现有代码保持一致(ESM、`strict` TypeScript、Ink 组件 + `flows/` 状态机);避免无关重构。
|
|
294
|
+
4. **范围控制:** CCSP 聚焦 settings 预设与启动编排,不引入与 Claude Code 无关的重依赖。
|
|
295
|
+
5. **文档:** 用户可见行为变更请同步更新 `README.md` 与 `README.zh-hans.md`。
|
|
296
|
+
6. **提交信息:** 使用简洁英文或中文均可,说明「为什么」而不仅是「改了什么」。
|
|
297
|
+
|
|
298
|
+
**报告 Bug 请附带:** 操作系统、Node 版本、`ccsp` 调用方式、相关 `~/.ccsp` 或 `.claude/.ccsp` 结构(请打码密钥)、终端报错全文。
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## License
|
|
303
|
+
|
|
304
|
+
[ISC](./LICENSE) © lkangd
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { type Instance } from 'ink';
|
|
5
|
+
export declare function createProgram(): Command;
|
|
6
|
+
export declare function buildBannerLines(columns: number): string[];
|
|
7
|
+
export declare function printBanner(): void;
|
|
8
|
+
export declare function clearTerminalScreen(stdout?: Pick<NodeJS.WriteStream, 'write'>): void;
|
|
9
|
+
type ShortcutKey = {
|
|
10
|
+
ctrl?: boolean;
|
|
11
|
+
};
|
|
12
|
+
type RefreshableInkApp = Pick<Instance, 'clear' | 'rerender' | 'waitUntilExit'>;
|
|
13
|
+
type RefreshState = {
|
|
14
|
+
resizeVersion: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function createGlobalShortcutHandler(app: RefreshableInkApp, createNode: () => React.ReactElement, stdout?: Pick<NodeJS.WriteStream, 'write'>, state?: RefreshState, onShortcut?: (input: string, key: ShortcutKey) => void): (input: string, key: ShortcutKey) => void;
|
|
17
|
+
export declare function waitForInkAppExit(app: RefreshableInkApp, createNode: () => React.ReactElement, stdout?: Pick<NodeJS.WriteStream, 'on' | 'off' | 'write'>, state?: RefreshState, onShortcut?: (input: string, key: ShortcutKey) => void): Promise<void>;
|
|
18
|
+
export declare function main(argv?: string[]): Promise<void>;
|
|
19
|
+
export {};
|