@gonkagate/claude-code 0.1.2 → 0.1.3
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/CHANGELOG.md +10 -1
- package/README.md +3 -1
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +31 -8
- package/dist/cli.js.map +1 -1
- package/dist/install/local-git-ignore.d.ts +6 -0
- package/dist/install/local-git-ignore.js +42 -6
- package/dist/install/local-git-ignore.js.map +1 -1
- package/dist/install/prompts.d.ts +3 -0
- package/dist/install/prompts.js +33 -0
- package/dist/install/prompts.js.map +1 -1
- package/docs/how-it-works.md +1 -1
- package/docs/security.md +3 -1
- package/docs/troubleshooting.md +14 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,12 +10,21 @@
|
|
|
10
10
|
- Hardened local scope against symlinked `.claude` paths that could redirect secret writes outside the ignored settings path.
|
|
11
11
|
- Extended local git protection to ignore timestamped backup files for `.claude/settings.local.json`.
|
|
12
12
|
- Normalized backup permissions to owner-only mode so secret-bearing backups are not left world-readable.
|
|
13
|
-
-
|
|
13
|
+
- Hardened local scope so `.claude/settings.local.json` cannot keep tracking secrets in git before local setup proceeds.
|
|
14
|
+
- Replaced the tracked-local-settings hard stop with a recovery flow that can stop tracking the file or switch to user scope without rerunning setup.
|
|
14
15
|
- Hardened local scope against symlinked path components anywhere between the repo root and the target settings file.
|
|
15
16
|
- Pinned GitHub Actions workflows to immutable commit SHAs for release pipeline hardening.
|
|
16
17
|
- Restored automated npm publish dispatch after Release Please creates a new release tag.
|
|
17
18
|
- Made publish reruns skip versions that are already present on npm instead of failing with a duplicate-version error.
|
|
18
19
|
|
|
20
|
+
## [0.1.3](https://github.com/GonkaGate/gonkagate-claude-code/compare/v0.1.2...v0.1.3) (2026-03-31)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* document release-please title requirements ([5fce744](https://github.com/GonkaGate/gonkagate-claude-code/commit/5fce7441dfd0c79d6f6ab43b4fa20737df879516))
|
|
26
|
+
* document release-please title requirements ([145f9f7](https://github.com/GonkaGate/gonkagate-claude-code/commit/145f9f72da19cf31f8f73e8250047988ee1eb9bf))
|
|
27
|
+
|
|
19
28
|
## [0.1.2](https://github.com/GonkaGate/gonkagate-claude-code/compare/v0.1.1...v0.1.2) (2026-03-31)
|
|
20
29
|
|
|
21
30
|
|
package/README.md
CHANGED
|
@@ -22,6 +22,8 @@ You will be asked for:
|
|
|
22
22
|
- a model from the supported GonkaGate list
|
|
23
23
|
- setup scope: `user` or `local`
|
|
24
24
|
|
|
25
|
+
If you choose `local` scope and `.claude/settings.local.json` is already tracked by git, the installer offers to stop tracking that file and continue, or switch to `user` scope instead.
|
|
26
|
+
|
|
25
27
|
You need:
|
|
26
28
|
|
|
27
29
|
- local `Claude Code`
|
|
@@ -53,7 +55,7 @@ It also:
|
|
|
53
55
|
- writes settings files with owner-only permissions
|
|
54
56
|
- writes backup files with owner-only permissions
|
|
55
57
|
- adds `.claude/settings.local.json` and local backup files to `.git/info/exclude` for local setup inside a git repo
|
|
56
|
-
-
|
|
58
|
+
- offers to stop tracking `.claude/settings.local.json` before local setup writes secrets into a file that was already tracked by git
|
|
57
59
|
- refuses local setup if the target path traverses a symlinked path component, or if `.claude` / the local settings file is a symlink
|
|
58
60
|
|
|
59
61
|
## Fixed GonkaGate Setup
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { InstallScope } from "./types/settings.js";
|
|
1
|
+
import type { InstallScope, SettingsTarget } from "./types/settings.js";
|
|
2
2
|
import type { SupportedModelKey } from "./constants/models.js";
|
|
3
|
+
import type { TrackedLocalSettingsAction } from "./install/prompts.js";
|
|
3
4
|
interface CliOptions {
|
|
4
5
|
help: boolean;
|
|
5
6
|
version: boolean;
|
|
@@ -11,5 +12,6 @@ interface ProgramOutput {
|
|
|
11
12
|
writeErr?: (str: string) => void;
|
|
12
13
|
}
|
|
13
14
|
export declare function parseCliOptions(argv: string[], output?: ProgramOutput): CliOptions;
|
|
15
|
+
export declare function resolveSettingsTarget(scope: InstallScope, cwd: string, chooseTrackedLocalSettingsAction?: (relativeTargetPath: string) => Promise<TrackedLocalSettingsAction>): Promise<SettingsTarget>;
|
|
14
16
|
export declare function run(argv?: string[]): Promise<void>;
|
|
15
17
|
export {};
|
package/dist/cli.js
CHANGED
|
@@ -4,9 +4,9 @@ import { Command, CommanderError, Option } from "commander";
|
|
|
4
4
|
import { DEFAULT_MODEL_KEY, SUPPORTED_MODELS, SUPPORTED_MODEL_KEYS, requireSupportedModel } from "./constants/models.js";
|
|
5
5
|
import { createBackup } from "./install/backup.js";
|
|
6
6
|
import { loadSettings } from "./install/load-settings.js";
|
|
7
|
-
import { ensureLocalSettingsIgnored } from "./install/local-git-ignore.js";
|
|
7
|
+
import { ensureLocalSettingsIgnored, stopTrackingLocalSettings, TrackedLocalSettingsError } from "./install/local-git-ignore.js";
|
|
8
8
|
import { mergeSettingsWithGonkaEnv } from "./install/merge-env.js";
|
|
9
|
-
import { promptForApiKey, promptForModel, promptForScope } from "./install/prompts.js";
|
|
9
|
+
import { promptForApiKey, promptForModel, promptForScope, promptForTrackedLocalSettingsAction } from "./install/prompts.js";
|
|
10
10
|
import { getSettingsTarget } from "./install/settings-paths.js";
|
|
11
11
|
import { validateApiKey } from "./install/validate-api-key.js";
|
|
12
12
|
import { writeSettings } from "./install/write-settings.js";
|
|
@@ -77,6 +77,32 @@ function printSuccess(targetPath, scope, selectedModel, backupPath) {
|
|
|
77
77
|
console.log("Keep .claude/settings.local.json uncommitted.");
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
export async function resolveSettingsTarget(scope, cwd, chooseTrackedLocalSettingsAction = promptForTrackedLocalSettingsAction) {
|
|
81
|
+
const target = getSettingsTarget(scope, cwd);
|
|
82
|
+
if (scope !== "local") {
|
|
83
|
+
return target;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
await ensureLocalSettingsIgnored(target.path);
|
|
87
|
+
return target;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (!(error instanceof TrackedLocalSettingsError)) {
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
const action = await chooseTrackedLocalSettingsAction(error.relativeTargetPath);
|
|
94
|
+
if (action === "user") {
|
|
95
|
+
console.log("\nSwitching to user scope so the repository stays unchanged.");
|
|
96
|
+
return getSettingsTarget("user", cwd);
|
|
97
|
+
}
|
|
98
|
+
if (action === "cancel") {
|
|
99
|
+
throw new Error("Installation cancelled.");
|
|
100
|
+
}
|
|
101
|
+
await stopTrackingLocalSettings(target.path);
|
|
102
|
+
console.log(`\nStopped tracking ${error.relativeTargetPath} in git and added a local exclude.`);
|
|
103
|
+
return target;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
80
106
|
export async function run(argv = process.argv.slice(2)) {
|
|
81
107
|
const options = parseCliOptions(argv);
|
|
82
108
|
printIntro();
|
|
@@ -84,16 +110,13 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
84
110
|
const selectedModel = options.modelKey
|
|
85
111
|
? requireSupportedModel(options.modelKey)
|
|
86
112
|
: await promptForModel(SUPPORTED_MODELS, DEFAULT_MODEL_KEY);
|
|
87
|
-
const
|
|
88
|
-
const target =
|
|
89
|
-
if (scope === "local") {
|
|
90
|
-
await ensureLocalSettingsIgnored(target.path);
|
|
91
|
-
}
|
|
113
|
+
const requestedScope = options.scope ?? (await promptForScope("user"));
|
|
114
|
+
const target = await resolveSettingsTarget(requestedScope, process.cwd());
|
|
92
115
|
const loaded = await loadSettings(target.path);
|
|
93
116
|
const mergedSettings = mergeSettingsWithGonkaEnv(loaded.settings, apiKey, selectedModel);
|
|
94
117
|
const backupPath = loaded.exists ? await createBackup(target.path) : undefined;
|
|
95
118
|
await writeSettings(target.path, mergedSettings);
|
|
96
|
-
printSuccess(target.path, scope, selectedModel, backupPath);
|
|
119
|
+
printSuccess(target.path, target.scope, selectedModel, backupPath);
|
|
97
120
|
}
|
|
98
121
|
function handleCliError(error) {
|
|
99
122
|
if (error instanceof CommanderError) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,7 @@
|
|
|
1
|
+
export declare class TrackedLocalSettingsError extends Error {
|
|
2
|
+
readonly relativeTargetPath: string;
|
|
3
|
+
readonly repoRoot: string;
|
|
4
|
+
constructor(relativeTargetPath: string, repoRoot: string);
|
|
5
|
+
}
|
|
1
6
|
export declare function ensureLocalSettingsIgnored(targetPath: string): Promise<void>;
|
|
7
|
+
export declare function stopTrackingLocalSettings(targetPath: string): Promise<void>;
|
|
@@ -3,20 +3,56 @@ import { access, lstat, mkdir, readFile, stat, writeFile } from "node:fs/promise
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
const execFileAsync = promisify(execFile);
|
|
6
|
+
export class TrackedLocalSettingsError extends Error {
|
|
7
|
+
relativeTargetPath;
|
|
8
|
+
repoRoot;
|
|
9
|
+
constructor(relativeTargetPath, repoRoot) {
|
|
10
|
+
super(`Refusing local install because ${relativeTargetPath} is already tracked by git. Remove it from the index before writing secrets.`);
|
|
11
|
+
this.name = "TrackedLocalSettingsError";
|
|
12
|
+
this.relativeTargetPath = relativeTargetPath;
|
|
13
|
+
this.repoRoot = repoRoot;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
6
16
|
export async function ensureLocalSettingsIgnored(targetPath) {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
if (!gitContext) {
|
|
17
|
+
const localSettingsContext = await getLocalSettingsGitContext(targetPath);
|
|
18
|
+
if (!localSettingsContext.gitContext || !localSettingsContext.relativeTargetPath) {
|
|
10
19
|
return;
|
|
11
20
|
}
|
|
12
|
-
const relativeTargetPath =
|
|
21
|
+
const { gitContext, relativeTargetPath } = localSettingsContext;
|
|
13
22
|
await assertTargetIsNotTracked(relativeTargetPath, gitContext.repoRoot);
|
|
23
|
+
await ensureTargetIgnored(gitContext.gitDir, relativeTargetPath);
|
|
24
|
+
}
|
|
25
|
+
export async function stopTrackingLocalSettings(targetPath) {
|
|
26
|
+
const localSettingsContext = await getLocalSettingsGitContext(targetPath);
|
|
27
|
+
if (!localSettingsContext.gitContext || !localSettingsContext.relativeTargetPath) {
|
|
28
|
+
throw new Error("Git repository is required to stop tracking local Claude Code settings.");
|
|
29
|
+
}
|
|
30
|
+
const { gitContext, relativeTargetPath } = localSettingsContext;
|
|
31
|
+
await ensureTargetIgnored(gitContext.gitDir, relativeTargetPath);
|
|
32
|
+
await execFileAsync("git", ["-C", gitContext.repoRoot, "rm", "--cached", "--quiet", "--force", "--", relativeTargetPath], {
|
|
33
|
+
encoding: "utf8"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async function getLocalSettingsGitContext(targetPath) {
|
|
37
|
+
const gitContext = await findGitContext(path.dirname(targetPath));
|
|
38
|
+
await assertSafeLocalSettingsTarget(targetPath, gitContext?.repoRoot);
|
|
39
|
+
if (!gitContext) {
|
|
40
|
+
return {
|
|
41
|
+
gitContext: null
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
gitContext,
|
|
46
|
+
relativeTargetPath: requireRepoRelativePath(targetPath, gitContext.repoRoot)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async function ensureTargetIgnored(gitDir, relativeTargetPath) {
|
|
14
50
|
const normalizedRelativePath = relativeTargetPath.split(path.sep).join("/");
|
|
15
51
|
const ignoreEntries = [
|
|
16
52
|
`/${normalizedRelativePath}`,
|
|
17
53
|
`/${normalizedRelativePath}.backup-*`
|
|
18
54
|
];
|
|
19
|
-
const excludePath = path.join(
|
|
55
|
+
const excludePath = path.join(gitDir, "info", "exclude");
|
|
20
56
|
const existingContent = await readOptionalFile(excludePath);
|
|
21
57
|
const existingEntries = new Set(existingContent
|
|
22
58
|
.split(/\r?\n/)
|
|
@@ -87,7 +123,7 @@ async function assertTargetIsNotTracked(relativeTargetPath, repoRoot) {
|
|
|
87
123
|
await execFileAsync("git", ["-C", repoRoot, "ls-files", "--error-unmatch", "--", relativeTargetPath], {
|
|
88
124
|
encoding: "utf8"
|
|
89
125
|
});
|
|
90
|
-
throw new
|
|
126
|
+
throw new TrackedLocalSettingsError(relativeTargetPath, repoRoot);
|
|
91
127
|
}
|
|
92
128
|
catch (error) {
|
|
93
129
|
if (isMissingGitBinaryError(error)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-git-ignore.js","sourceRoot":"","sources":["../../src/install/local-git-ignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"local-git-ignore.js","sourceRoot":"","sources":["../../src/install/local-git-ignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAY1C,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,kBAAkB,CAAS;IAC3B,QAAQ,CAAS;IAE1B,YAAY,kBAA0B,EAAE,QAAgB;QACtD,KAAK,CACH,kCAAkC,kBAAkB,8EAA8E,CACnI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,UAAkB;IACjE,MAAM,oBAAoB,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAE1E,IAAI,CAAC,oBAAoB,CAAC,UAAU,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;QACjF,OAAO;IACT,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,oBAAoB,CAAC;IAChE,MAAM,wBAAwB,CAAC,kBAAkB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAAkB;IAChE,MAAM,oBAAoB,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAE1E,IAAI,CAAC,oBAAoB,CAAC,UAAU,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,oBAAoB,CAAC;IAChE,MAAM,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE;QACxH,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,UAAkB;IAC1D,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,MAAM,6BAA6B,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU;QACV,kBAAkB,EAAE,uBAAuB,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,kBAA0B;IAC3E,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG;QACpB,IAAI,sBAAsB,EAAE;QAC5B,IAAI,sBAAsB,WAAW;KACtC,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,eAAe;SACZ,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAC9D,CAAC;IAEF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAEhG,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,WAAW,GACf,eAAe,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAClC,CAAC,CAAC,GAAG,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEtG,MAAM,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,UAAkB,EAAE,QAAiB;IAChF,MAAM,cAAc,GAAG,QAAQ;QAC7B,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAE3C,KAAK,MAAM,WAAW,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB,EAAE,YAAoB;IAC1E,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,UAAkB;IAChE,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAI,WAAW,GAAG,QAAQ,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAkB,EAAE,QAAgB;IACnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/D,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClH,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAmB,EAAE,UAAkB,EAAE,QAAiB;IACxF,IAAI,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,oFAAoF,CAAC;IAC9F,CAAC;IAED,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,qFAAqF,CAAC;IAC/F,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1G,OAAO,wEAAwE,KAAK,GAAG,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,kBAA0B,EAAE,QAAgB;IAClF,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE;YACpG,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,IAAI,yBAAyB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAC;QAC/H,CAAC;QAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,cAAsB;IAClD,IAAI,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpD,SAAS,CAAC;QACR,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAEpE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,MAAM;gBACN,QAAQ,EAAE,gBAAgB;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEvD,IAAI,eAAe,KAAK,gBAAgB,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gBAAgB,GAAG,eAAe,CAAC;IACrC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,aAAqB,EAAE,QAAgB;IAClE,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjD,IAAI,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;YACjC,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEzD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iCAAiC,aAAa,GAAG,CAAC,CAAC;YACrE,CAAC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SupportedModel, SupportedModelKey } from "../constants/models.js";
|
|
2
2
|
import type { InstallScope } from "../types/settings.js";
|
|
3
|
+
export type TrackedLocalSettingsAction = "untrack" | "user" | "cancel";
|
|
3
4
|
export declare function promptForApiKey(): Promise<string>;
|
|
4
5
|
interface SelectChoice<Value> {
|
|
5
6
|
value: Value;
|
|
@@ -20,6 +21,8 @@ interface SelectPromptConfig<Value> {
|
|
|
20
21
|
type SelectPrompt<Value> = (config: SelectPromptConfig<Value>) => Promise<Value>;
|
|
21
22
|
export declare function buildScopePromptConfig(defaultScope: InstallScope): SelectPromptConfig<InstallScope>;
|
|
22
23
|
export declare function promptForScope(defaultScope: InstallScope, selectPrompt?: SelectPrompt<InstallScope>): Promise<InstallScope>;
|
|
24
|
+
export declare function buildTrackedLocalSettingsPromptConfig(relativeTargetPath: string): SelectPromptConfig<TrackedLocalSettingsAction>;
|
|
25
|
+
export declare function promptForTrackedLocalSettingsAction(relativeTargetPath: string, selectPrompt?: SelectPrompt<TrackedLocalSettingsAction>): Promise<TrackedLocalSettingsAction>;
|
|
23
26
|
export declare function buildModelPromptConfig(models: readonly SupportedModel[], defaultModelKey: SupportedModelKey): SelectPromptConfig<SupportedModelKey>;
|
|
24
27
|
export declare function promptForModel(models: readonly SupportedModel[], defaultModelKey: SupportedModelKey, selectPrompt?: SelectPrompt<SupportedModelKey>): Promise<SupportedModel>;
|
|
25
28
|
export {};
|
package/dist/install/prompts.js
CHANGED
|
@@ -37,6 +37,39 @@ export function buildScopePromptConfig(defaultScope) {
|
|
|
37
37
|
export async function promptForScope(defaultScope, selectPrompt = select) {
|
|
38
38
|
return selectPrompt(buildScopePromptConfig(defaultScope)).catch(rethrowPromptExit);
|
|
39
39
|
}
|
|
40
|
+
export function buildTrackedLocalSettingsPromptConfig(relativeTargetPath) {
|
|
41
|
+
return {
|
|
42
|
+
message: `${relativeTargetPath} is already tracked by git. How should setup continue?`,
|
|
43
|
+
default: "untrack",
|
|
44
|
+
choices: [
|
|
45
|
+
{
|
|
46
|
+
value: "untrack",
|
|
47
|
+
name: "Stop tracking and continue",
|
|
48
|
+
short: "untrack",
|
|
49
|
+
description: `Run git rm --cached for ${relativeTargetPath}, keep the file locally, and add a local git exclude.`
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
value: "user",
|
|
53
|
+
name: "Switch to user scope",
|
|
54
|
+
short: "user",
|
|
55
|
+
description: "Write ~/.claude/settings.json instead and leave the repository alone."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
value: "cancel",
|
|
59
|
+
name: "Cancel installation",
|
|
60
|
+
short: "cancel",
|
|
61
|
+
description: "Stop now without changing Claude Code settings."
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
loop: false,
|
|
65
|
+
theme: {
|
|
66
|
+
indexMode: "number"
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export async function promptForTrackedLocalSettingsAction(relativeTargetPath, selectPrompt = select) {
|
|
71
|
+
return selectPrompt(buildTrackedLocalSettingsPromptConfig(relativeTargetPath)).catch(rethrowPromptExit);
|
|
72
|
+
}
|
|
40
73
|
export function buildModelPromptConfig(models, defaultModelKey) {
|
|
41
74
|
if (models.length === 0) {
|
|
42
75
|
throw new Error("No supported GonkaGate models are configured.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/install/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/install/prompts.ts"],"names":[],"mappings":"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"}
|
package/docs/how-it-works.md
CHANGED
|
@@ -31,7 +31,7 @@ It does not touch any shell profile or other configuration file.
|
|
|
31
31
|
|
|
32
32
|
For `local` scope inside a git repository, it also adds `.claude/settings.local.json` and `.claude/settings.local.json.backup-*` to `.git/info/exclude` before writing the file.
|
|
33
33
|
|
|
34
|
-
For safety, local scope
|
|
34
|
+
For safety, local scope checks whether `.claude/settings.local.json` is already tracked by git. If it is, the installer offers to stop tracking that file and continue local setup, or switch to `user` scope instead. It also refuses any existing symlinked path component on the way to the target. That includes a symlinked `.claude` directory and a symlinked local settings file.
|
|
35
35
|
|
|
36
36
|
## Write behavior
|
|
37
37
|
|
package/docs/security.md
CHANGED
|
@@ -21,7 +21,9 @@ This repo does not write `.env` files and does not modify shell startup files. I
|
|
|
21
21
|
|
|
22
22
|
## Local scope hygiene
|
|
23
23
|
|
|
24
|
-
If you choose `local` scope inside a git repository, the installer first
|
|
24
|
+
If you choose `local` scope inside a git repository, the installer first checks whether `.claude/settings.local.json` is already tracked by git. If it is already tracked, the installer offers to either stop tracking that file and continue local setup, or switch to `user` scope instead of writing a secret into a still-tracked file.
|
|
25
|
+
|
|
26
|
+
If you choose the stop-tracking recovery path, the installer runs `git rm --cached` for `.claude/settings.local.json`, keeps the file in your working tree, and adds local ignore rules before writing the secret-bearing settings file. That stages the file removal from version control, which is usually the right outcome for a repo-local secrets file.
|
|
25
27
|
|
|
26
28
|
For untracked local installs, the installer adds `.claude/settings.local.json` and its timestamped backup pattern to the repo's `.git/info/exclude` before writing the file so secret-bearing local settings do not immediately show up in git.
|
|
27
29
|
|
package/docs/troubleshooting.md
CHANGED
|
@@ -51,13 +51,23 @@ Restore from the timestamped backup next to the settings file, or fix the JSON m
|
|
|
51
51
|
|
|
52
52
|
Rerun the installer and choose `local` scope. That writes `.claude/settings.local.json` in the current repository instead of editing your global `~/.claude/settings.json`.
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## `.claude/settings.local.json` is already tracked by git
|
|
55
55
|
|
|
56
|
-
For `local` scope, the installer now
|
|
56
|
+
For `local` scope, the installer now detects when `.claude/settings.local.json` is already a tracked file in the repository and offers a recovery choice.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
The recommended option is to stop tracking that file and continue. The installer will:
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
- run `git rm --cached` for `.claude/settings.local.json`
|
|
61
|
+
- keep the file in your working tree
|
|
62
|
+
- add local exclude entries so the file stays uncommitted going forward
|
|
63
|
+
|
|
64
|
+
If that repository intentionally versions `.claude/settings.local.json`, choose `user` scope instead.
|
|
65
|
+
|
|
66
|
+
You can still do the stop-tracking step manually if you prefer:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git rm --cached -- .claude/settings.local.json
|
|
70
|
+
```
|
|
61
71
|
|
|
62
72
|
## Local install refused because the target path uses a symlink
|
|
63
73
|
|
package/package.json
CHANGED