@lkangd/cc-env 1.1.0 → 1.1.2

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.
Files changed (72) hide show
  1. package/LICENSE +15 -0
  2. package/dist/cli.js +3 -4
  3. package/package.json +8 -1
  4. package/.claude/settings.json +0 -6
  5. package/.claude/settings.local.json +0 -8
  6. package/.nvmrc +0 -1
  7. package/CHANGELOG.md +0 -66
  8. package/docs/product-specs/index.draft.md +0 -106
  9. package/docs/product-specs/index.md +0 -911
  10. package/docs/product-specs/optional.md +0 -42
  11. package/docs/references/claude-code-env.md +0 -224
  12. package/docs/superpowers/plans/2026-04-24-cc-env-init-shell-migration.md +0 -1331
  13. package/docs/superpowers/plans/2026-04-24-cc-env.md +0 -1666
  14. package/docs/superpowers/plans/2026-04-26-preset-create-interactive-refactor.md +0 -1432
  15. package/docs/superpowers/specs/2026-04-24-cc-env-design.md +0 -438
  16. package/docs/superpowers/specs/2026-04-24-cc-env-init-shell-migration-design.md +0 -181
  17. package/docs/superpowers/specs/2026-04-26-preset-create-interactive-refactor-design.md +0 -78
  18. package/src/cli.ts +0 -339
  19. package/src/commands/init.ts +0 -139
  20. package/src/commands/preset/create.ts +0 -96
  21. package/src/commands/preset/delete.ts +0 -62
  22. package/src/commands/preset/show.ts +0 -51
  23. package/src/commands/restore.ts +0 -150
  24. package/src/commands/run.ts +0 -158
  25. package/src/core/errors.ts +0 -13
  26. package/src/core/find-claude.ts +0 -70
  27. package/src/core/format.ts +0 -29
  28. package/src/core/fs.ts +0 -18
  29. package/src/core/gitignore.ts +0 -26
  30. package/src/core/logger.ts +0 -11
  31. package/src/core/mask.ts +0 -17
  32. package/src/core/paths.ts +0 -41
  33. package/src/core/process-env.ts +0 -11
  34. package/src/core/schema.ts +0 -55
  35. package/src/core/spawn.ts +0 -36
  36. package/src/flows/init-flow.ts +0 -61
  37. package/src/flows/preset-create-flow.ts +0 -129
  38. package/src/flows/restore-flow.ts +0 -144
  39. package/src/ink/init-app.tsx +0 -110
  40. package/src/ink/preset-create-app.tsx +0 -451
  41. package/src/ink/preset-delete-app.tsx +0 -114
  42. package/src/ink/preset-show-app.tsx +0 -76
  43. package/src/ink/restore-app.tsx +0 -230
  44. package/src/ink/run-preset-select-app.tsx +0 -83
  45. package/src/ink/summary.tsx +0 -91
  46. package/src/services/claude-settings-env-service.ts +0 -72
  47. package/src/services/history-service.ts +0 -48
  48. package/src/services/preset-service.ts +0 -72
  49. package/src/services/project-env-service.ts +0 -128
  50. package/src/services/project-state-service.ts +0 -31
  51. package/src/services/settings-env-service.ts +0 -40
  52. package/src/services/shell-env-service.ts +0 -112
  53. package/src/types.d.ts +0 -19
  54. package/tests/cli/help.test.ts +0 -133
  55. package/tests/cli/init.test.ts +0 -76
  56. package/tests/cli/restore.test.ts +0 -172
  57. package/tests/commands/create.test.ts +0 -263
  58. package/tests/commands/output.test.ts +0 -119
  59. package/tests/commands/run.test.ts +0 -218
  60. package/tests/core/gitignore.test.ts +0 -98
  61. package/tests/core/paths.test.ts +0 -24
  62. package/tests/core/schema-mask.test.ts +0 -182
  63. package/tests/core/spawn.test.ts +0 -47
  64. package/tests/flows/init-flow.test.ts +0 -40
  65. package/tests/flows/preset-create-flow.test.ts +0 -225
  66. package/tests/flows/restore-flow.test.ts +0 -157
  67. package/tests/integration/init-restore.test.ts +0 -406
  68. package/tests/services/claude-shell.test.ts +0 -183
  69. package/tests/services/storage.test.ts +0 -143
  70. package/tsconfig.build.json +0 -9
  71. package/tsconfig.json +0 -22
  72. package/vitest.config.ts +0 -8
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/dist/cli.js CHANGED
@@ -183,8 +183,7 @@ program
183
183
  })({
184
184
  yes: options.yes
185
185
  }));
186
- const presetCommand = program.command('preset').description('Manage environment presets');
187
- presetCommand
186
+ program
188
187
  .command('show')
189
188
  .description('List and view all presets')
190
189
  .action(createShowPresetsCommand({
@@ -195,7 +194,7 @@ presetCommand
195
194
  await app.waitUntilExit();
196
195
  }
197
196
  }));
198
- presetCommand
197
+ program
199
198
  .command('delete')
200
199
  .description('Delete a saved preset')
201
200
  .action(createDeletePresetCommand({
@@ -213,7 +212,7 @@ presetCommand
213
212
  return result;
214
213
  }
215
214
  }));
216
- presetCommand
215
+ program
217
216
  .command('create')
218
217
  .description('Create a new environment preset')
219
218
  .action(() => createPresetCreateCommand({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lkangd/cc-env",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/lkangd/cc-env#readme",
6
6
  "bugs": {
@@ -22,8 +22,15 @@
22
22
  "bin": {
23
23
  "cc-env": "dist/cli.js"
24
24
  },
25
+ "files": [
26
+ "dist",
27
+ "package.json",
28
+ "README.md",
29
+ "LICENSE"
30
+ ],
25
31
  "scripts": {
26
32
  "build": "tsc -p tsconfig.build.json",
33
+ "prepack": "npm run build",
27
34
  "dev": "tsx src/cli.ts",
28
35
  "test": "vitest run"
29
36
  },
@@ -1,6 +0,0 @@
1
- {
2
- "enabledPlugins": {
3
- "superpowers@claude-plugins-official": true
4
- },
5
- "env": {}
6
- }
@@ -1,8 +0,0 @@
1
- {
2
- "env": {},
3
- "permissions": {
4
- "allow": [
5
- "Bash(python3 *)"
6
- ]
7
- }
8
- }
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 20.19.2
package/CHANGELOG.md DELETED
@@ -1,66 +0,0 @@
1
- # Changelog
2
-
3
- ## 1.1.0 (2026-04-27)
4
-
5
- ### Features
6
- * add CLI descriptions and improve error formatting
7
- * add env source and merge services
8
- * add env validation and masking helpers
9
- * add gradient ASCII art banner to CLI startup
10
- * add initial project structure with .gitignore, package.json, and documentation
11
- * add interactive preset creation flow
12
- * add interactive preset delete with confirmation flow
13
- * add interactive preset list UI with project/global source display
14
- * add non-interactive preset creation
15
- * add output and preset inspection commands
16
- * add preset and history storage services
17
- * add restore flow and command
18
- * add runtime execution and dry-run
19
- * add settings migration flow
20
- * add shebang to CLI entry point
21
- * auto-add .cc-env to .gitignore on project preset create and remove config service
22
- * complete cc-env v1 command wiring
23
- * migrate Claude env into managed shell blocks
24
- * redesign run command as Claude launcher with interactive preset selection
25
- * scope package as @lkangd/cc-env for public npm publish
26
- * support project-level Claude settings in init and restore
27
-
28
- ### Bug Fixes
29
- * align preset create step progression
30
- * complete interactive init and restore flows
31
- * harden interactive preset create flow
32
- * harden project env first-write handling
33
- * harden restore flow selection
34
- * harden run command validation and preview
35
- * harden storage writes and preset deletion
36
- * normalize preset create input errors
37
- * resolve TypeScript exactOptionalPropertyTypes errors in preset create
38
- * simplify interactive preset create flow
39
- * support top-level run flags
40
- * wire preset management commands and outputs
41
-
42
- ### Code Refactoring
43
- * align persisted history records with schema
44
- * extract shared EnvSummary component and replace stdout writes with ink rendering
45
- * merge preset list and show into single interactive show command
46
- * remove debug command and runtime env service
47
- * remove preset edit command and add .cc-env/ to gitignore
48
- * remove proper-lockfile in favor of atomic writes
49
- * reorder merge params to match priority and use ink in debug
50
- * rewrite preset-create-app with full interactive wizard UI
51
- * rewrite preset-create-flow state machine for full interactive wizard
52
- * simplify preset create command to thin renderFlow wrapper
53
- * use sources array in history schema and improve interactive UI
54
-
55
- ### Documentation
56
- * add preset create interactive refactor design spec
57
- * add preset create interactive refactor implementation plan
58
-
59
- ### Other Changes
60
- * merge: integrate Claude shell env migration
61
- * fix restore typing against persisted history schema
62
- * fix signal exits and history record validation
63
- * fix restore flow state invariants and CLI wiring
64
- * fix interactive preset create flow wiring
65
- * fix schema timestamp validation and secret masking
66
- * fix package dependency versions for task 1 compliance
@@ -1,106 +0,0 @@
1
- # 从零开始构建一个基于 nodejs 的命令行工具
2
-
3
- ## 背景
4
-
5
- claude code cli 在启动的时候,会读取环境变量中需要的配置,以作为启动参数,比如模型的基础请求地址:ANTHROPIC_BASE_URL。这些配置一般定义在 ~/.claude/settings.json 中的 env 字段。
6
- 现在有一个痛点,比如我有多家模型提供商,如果将配置写在 ~/.claude/settings.json 中,那么只能同时使用一家模型提供商,因此需要提供另外一种方式,让 claude code 在启动的时候可以指定提供商或者其他所有 claude code 支持的环境变量。
7
-
8
- ## 功能描述
9
-
10
- ### 使用方式
11
-
12
- 在终端命令行下,提供一种如下的调用方式来启动 claude code:
13
-
14
- ```bash
15
- cc-env --preset=some-preset claude
16
- ```
17
-
18
- 运行后 cc-env 会将 some-preset(提前设置过的) 对应的一组预置的环境变量(claude code 支持),让 claude code 读到运行时配置。
19
-
20
- ### 初始化
21
-
22
- 使用 cc-env 进行初始化,主要做的是将 ~/.claude/settings.json 中 env 的字段,移动到全局环境变量中,调用后展示 env 中已经定义的环境变量,默认勾选中以下字段:
23
-
24
- - ANTHROPIC_AUTH_TOKEN
25
- - ANTHROPIC_BASE_URL
26
- - ANTHROPIC_DEFAULT_HAIKU_MODEL
27
- - ANTHROPIC_DEFAULT_OPUS_MODEL
28
- - ANTHROPIC_DEFAULT_SONNET_MODEL
29
- - ANTHROPIC_REASONING_MODEL
30
-
31
- ```bash
32
- cc-env --init // or cc-env -i
33
- ```
34
-
35
- 初始化移动过的记录需要保存在 ~/.cc-env 文件夹中,每一次初始化都要记录,以便恢复的时候,可以让用户选择。
36
-
37
- 初始化可以重复执行,如果有字段覆盖,需要提示用户确认,一定要用户输入 Y 确认。
38
-
39
- ### 恢复
40
-
41
- 将初始化的移动的环境变量移动回 ~/.claude/settings.json 中 env 内。
42
-
43
- 通过文件夹的方式展示每一次初始化记录和对应的字段给用户查看,左边栏是时间(从上到下,倒叙),右边栏是涉及变动的字段。用户选中确认后,按 Y 确认回写。
44
-
45
- ### 创建预设
46
-
47
- 参数你根据最合适的方式定义。
48
-
49
- 预设默认放置在 ~/.cc-env 文件夹中,但是可以指定到当前文件夹下,如果是当前文件夹下,则自动创建 .cc-env 目录,并存放为 env.json,重复存放覆盖。
50
-
51
- #### 展示预设列表
52
-
53
- 通过文件夹的方式展示所有预设,左边栏是时间(从上到下,倒叙),右边栏是对应的环境变量字段。
54
-
55
- #### 文件导入
56
-
57
- 支持指定 claude code settings.json 文件路径,但是只会读取里面的 env 字段。
58
-
59
- 支持 yaml 格式的文件,支持 json。
60
-
61
- 限制:只支持 value 字段为非嵌套对象的输入,自动忽略不合法的值
62
-
63
- #### 交互式导入
64
-
65
- 支持直接贴多行的 yaml 的输入和 json 输入。
66
-
67
- 限制:只支持 value 字段为非嵌套对象的输入,自动忽略不合法的值
68
-
69
- #### 勾选时设置
70
-
71
- 基于 claude code 官方支持 env,让用户勾选需要设置的环境变量值,确认依次录入具体的值,默认勾选中以下字段:
72
-
73
- - ANTHROPIC_AUTH_TOKEN
74
- - ANTHROPIC_BASE_URL
75
- - ANTHROPIC_DEFAULT_HAIKU_MODEL
76
- - ANTHROPIC_DEFAULT_OPUS_MODEL
77
- - ANTHROPIC_DEFAULT_SONNET_MODEL
78
- - ANTHROPIC_REASONING_MODEL
79
-
80
- 限制:只支持 value 字段为非嵌套对象的输入,自动忽略不合法的值
81
-
82
- #### 删除预设
83
-
84
- 参数你根据最合适的方式定义。
85
-
86
- 展示预设列表,选中确认后,输入 Y 删除
87
-
88
- #### 编辑预设
89
-
90
- 参数你根据最合适的方式定义。
91
-
92
- 交互方式你来定。
93
-
94
- #### 读取目录下的预设
95
-
96
- cc-env 在启动时候,检查当前目录下 .cc-env/env.json 或者 .cc-env/env.yaml,如果存在,则当作较高优先级的环境变量使用。
97
-
98
- ## 要求
99
-
100
- ### 技术栈
101
-
102
- 基于 nodejs 为 base,选用最佳的 cli 实现技术栈
103
-
104
- ## 引用
105
-
106
- ### [claude code 官方支持 env](../references/claude-code-env.md)