@hasna/accounts 0.1.11 → 0.1.13
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/README.md +12 -4
- package/dist/cli.js +203 -20
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +426 -279
- package/dist/lib/claude-auth.d.ts +4 -0
- package/dist/lib/claude-auth.d.ts.map +1 -1
- package/dist/lib/env.d.ts.map +1 -1
- package/dist/lib/supervisor.d.ts +1 -0
- package/dist/lib/supervisor.d.ts.map +1 -1
- package/dist/lib/switch.d.ts +2 -0
- package/dist/lib/switch.d.ts.map +1 -1
- package/dist/lib/tools.d.ts +6 -0
- package/dist/lib/tools.d.ts.map +1 -1
- package/dist/mcp.js +151 -8
- package/dist/storage.js +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { ToolDef } from "../types.js";
|
|
2
|
+
export declare const CLAUDE_API_AUTH_ENV_KEYS: readonly ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_BASE_URL", "CLAUDE_CODE_API_KEY_HELPER", "CLAUDE_CODE_API_KEY_HELPER_TTL_MS", "CLAUDE_CODE_USE_BEDROCK", "CLAUDE_CODE_USE_VERTEX"];
|
|
3
|
+
export declare function sanitizeClaudeProfileApiSettings(profileDir: string, tool: ToolDef): boolean;
|
|
4
|
+
export declare function sanitizeClaudeOAuthProfileSettings(profileDir: string, tool: ToolDef): boolean;
|
|
5
|
+
export declare function sanitizeLiveClaudeOAuthSettings(): boolean;
|
|
2
6
|
/** Email address of the account currently authenticated on the live Claude paths. */
|
|
3
7
|
export declare function liveOAuthEmail(): string | undefined;
|
|
4
8
|
/** Snapshot live Claude auth into a profile directory (used when switching away on apply). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../../src/lib/claude-auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../../src/lib/claude-auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAuB3C,eAAO,MAAM,wBAAwB,sMAQ3B,CAAC;AAoGX,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAG3F;AAED,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAM7F;AAED,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,qFAAqF;AACrF,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAKnD;AAED,8FAA8F;AAC9F,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAmBlF;AAED,gDAAgD;AAChD,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAEnF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,IAAI,CAmBN;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAEzE;AAED,6DAA6D;AAC7D,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAwDN;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM3D"}
|
package/dist/lib/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOpD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYlF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIxE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIrE"}
|
package/dist/lib/supervisor.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/lib/supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMjF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/lib/supervisor.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/switch.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface SwitchOptions {
|
|
|
5
5
|
mode?: SwitchMode;
|
|
6
6
|
resume?: boolean;
|
|
7
7
|
args?: string[];
|
|
8
|
+
permissions?: string;
|
|
8
9
|
}
|
|
9
10
|
export interface SwitchResult {
|
|
10
11
|
profile: Profile;
|
|
@@ -15,6 +16,7 @@ export interface SwitchResult {
|
|
|
15
16
|
exports: string;
|
|
16
17
|
command: string[];
|
|
17
18
|
commandLine: string;
|
|
19
|
+
permissions?: string;
|
|
18
20
|
restartRequired: boolean;
|
|
19
21
|
message: string;
|
|
20
22
|
}
|
package/dist/lib/switch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/lib/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOpD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/lib/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOpD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,YAAY,CAoClF"}
|
package/dist/lib/tools.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ import { type ToolDef } from "../types.js";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const BUILTIN_TOOLS: ToolDef[];
|
|
8
8
|
export declare const DEFAULT_TOOL = "claude";
|
|
9
|
+
export interface ToolArgOptions {
|
|
10
|
+
permissions?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function normalizePermissionPreset(value: string): string;
|
|
13
|
+
export declare function permissionArgsFor(tool: ToolDef, permissions?: string): string[];
|
|
14
|
+
export declare function mergeToolArgs(tool: ToolDef, args: string[], opts?: ToolArgOptions): string[];
|
|
9
15
|
export declare function isBuiltinTool(id: string): boolean;
|
|
10
16
|
/** All tools: built-ins plus any user-registered ones (custom wins on id clash). */
|
|
11
17
|
export declare function listTools(): ToolDef[];
|
package/dist/lib/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAgC,MAAM,aAAa,CAAC;AAGzE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAgC,MAAM,aAAa,CAAC;AAGzE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,EAuIlC,CAAC;AAEF,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,EAAE,CAGhG;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,oFAAoF;AACpF,wBAAgB,SAAS,IAAI,OAAO,EAAE,CAMrC;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAS3C;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAanD;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAWjD"}
|
package/dist/mcp.js
CHANGED
|
@@ -16634,6 +16634,7 @@ var toolDefSchema = exports_external.object({
|
|
|
16634
16634
|
loginArgs: exports_external.array(exports_external.string()).optional(),
|
|
16635
16635
|
loginHint: exports_external.string().optional(),
|
|
16636
16636
|
resumeArgs: exports_external.array(exports_external.string()).optional(),
|
|
16637
|
+
permissionArgs: exports_external.record(exports_external.array(exports_external.string())).optional(),
|
|
16637
16638
|
accountFile: exports_external.string().optional(),
|
|
16638
16639
|
emailPath: exports_external.array(exports_external.string()).optional()
|
|
16639
16640
|
});
|
|
@@ -16808,6 +16809,15 @@ var BUILTIN_TOOLS = [
|
|
|
16808
16809
|
bin: "claude",
|
|
16809
16810
|
loginHint: "run /login inside Claude, then /exit when done",
|
|
16810
16811
|
resumeArgs: ["--continue"],
|
|
16812
|
+
permissionArgs: {
|
|
16813
|
+
dangerous: ["--dangerously-skip-permissions"],
|
|
16814
|
+
"allow-dangerous": ["--allow-dangerously-skip-permissions"],
|
|
16815
|
+
bypass: ["--permission-mode", "bypassPermissions"],
|
|
16816
|
+
auto: ["--permission-mode", "auto"],
|
|
16817
|
+
"accept-edits": ["--permission-mode", "acceptEdits"],
|
|
16818
|
+
"dont-ask": ["--permission-mode", "dontAsk"],
|
|
16819
|
+
plan: ["--permission-mode", "plan"]
|
|
16820
|
+
},
|
|
16811
16821
|
accountFile: ".claude.json",
|
|
16812
16822
|
emailPath: ["oauthAccount", "emailAddress"]
|
|
16813
16823
|
},
|
|
@@ -16819,7 +16829,10 @@ var BUILTIN_TOOLS = [
|
|
|
16819
16829
|
bin: "codex",
|
|
16820
16830
|
loginArgs: ["login"],
|
|
16821
16831
|
loginHint: "complete the Codex login flow for this CODEX_HOME",
|
|
16822
|
-
resumeArgs: ["resume", "--last"]
|
|
16832
|
+
resumeArgs: ["resume", "--last"],
|
|
16833
|
+
permissionArgs: {
|
|
16834
|
+
dangerous: ["--dangerously-bypass-approvals-and-sandbox"]
|
|
16835
|
+
}
|
|
16823
16836
|
},
|
|
16824
16837
|
{
|
|
16825
16838
|
id: "takumi",
|
|
@@ -16829,6 +16842,15 @@ var BUILTIN_TOOLS = [
|
|
|
16829
16842
|
bin: "takumi",
|
|
16830
16843
|
loginHint: "complete Takumi auth in this TAKUMI_CONFIG_DIR",
|
|
16831
16844
|
resumeArgs: ["--continue"],
|
|
16845
|
+
permissionArgs: {
|
|
16846
|
+
dangerous: ["--dangerously-skip-permissions"],
|
|
16847
|
+
"allow-dangerous": ["--allow-dangerously-skip-permissions"],
|
|
16848
|
+
bypass: ["--permission-mode", "bypassPermissions"],
|
|
16849
|
+
auto: ["--permission-mode", "auto"],
|
|
16850
|
+
"accept-edits": ["--permission-mode", "acceptEdits"],
|
|
16851
|
+
"dont-ask": ["--permission-mode", "dontAsk"],
|
|
16852
|
+
plan: ["--permission-mode", "plan"]
|
|
16853
|
+
},
|
|
16832
16854
|
accountFile: ".claude.json",
|
|
16833
16855
|
emailPath: ["oauthAccount", "emailAddress"]
|
|
16834
16856
|
},
|
|
@@ -16838,7 +16860,13 @@ var BUILTIN_TOOLS = [
|
|
|
16838
16860
|
envVar: "GEMINI_CONFIG_DIR",
|
|
16839
16861
|
defaultDir: join2(homedir2(), ".gemini"),
|
|
16840
16862
|
bin: "gemini",
|
|
16841
|
-
loginHint: "complete Gemini auth in this GEMINI_CONFIG_DIR"
|
|
16863
|
+
loginHint: "complete Gemini auth in this GEMINI_CONFIG_DIR",
|
|
16864
|
+
permissionArgs: {
|
|
16865
|
+
dangerous: ["--yolo"],
|
|
16866
|
+
yolo: ["--yolo"],
|
|
16867
|
+
"auto-edit": ["--approval-mode", "auto_edit"],
|
|
16868
|
+
plan: ["--approval-mode", "plan"]
|
|
16869
|
+
}
|
|
16842
16870
|
},
|
|
16843
16871
|
{
|
|
16844
16872
|
id: "opencode",
|
|
@@ -16877,7 +16905,11 @@ var BUILTIN_TOOLS = [
|
|
|
16877
16905
|
envVar: "HERMES_HOME",
|
|
16878
16906
|
defaultDir: join2(homedir2(), ".hermes"),
|
|
16879
16907
|
bin: "hermes",
|
|
16880
|
-
loginHint: "complete Hermes auth in this HERMES_HOME"
|
|
16908
|
+
loginHint: "complete Hermes auth in this HERMES_HOME",
|
|
16909
|
+
permissionArgs: {
|
|
16910
|
+
dangerous: ["--yolo"],
|
|
16911
|
+
yolo: ["--yolo"]
|
|
16912
|
+
}
|
|
16881
16913
|
},
|
|
16882
16914
|
{
|
|
16883
16915
|
id: "kimi",
|
|
@@ -16886,7 +16918,13 @@ var BUILTIN_TOOLS = [
|
|
|
16886
16918
|
defaultDir: join2(homedir2(), ".kimi-code"),
|
|
16887
16919
|
bin: "kimi",
|
|
16888
16920
|
loginArgs: ["login"],
|
|
16889
|
-
loginHint: "complete kimi login for this KIMI_CODE_HOME"
|
|
16921
|
+
loginHint: "complete kimi login for this KIMI_CODE_HOME",
|
|
16922
|
+
permissionArgs: {
|
|
16923
|
+
dangerous: ["--yolo"],
|
|
16924
|
+
yolo: ["--yolo"],
|
|
16925
|
+
auto: ["--auto"],
|
|
16926
|
+
plan: ["--plan"]
|
|
16927
|
+
}
|
|
16890
16928
|
},
|
|
16891
16929
|
{
|
|
16892
16930
|
id: "grok",
|
|
@@ -16898,6 +16936,43 @@ var BUILTIN_TOOLS = [
|
|
|
16898
16936
|
loginHint: "complete grok login in this process-scoped HOME; prefer launch/shell over exporting HOME globally"
|
|
16899
16937
|
}
|
|
16900
16938
|
];
|
|
16939
|
+
var PERMISSION_ALIASES = new Map([
|
|
16940
|
+
["danger", "dangerous"],
|
|
16941
|
+
["dangerously-skip-permissions", "dangerous"],
|
|
16942
|
+
["skip-permissions", "dangerous"],
|
|
16943
|
+
["skip", "dangerous"],
|
|
16944
|
+
["bypasspermissions", "bypass"],
|
|
16945
|
+
["bypass-permissions", "bypass"],
|
|
16946
|
+
["acceptedits", "accept-edits"],
|
|
16947
|
+
["accept-edit", "accept-edits"],
|
|
16948
|
+
["autoedit", "auto-edit"],
|
|
16949
|
+
["auto-edits", "auto-edit"],
|
|
16950
|
+
["auto_edit", "auto-edit"],
|
|
16951
|
+
["dontask", "dont-ask"],
|
|
16952
|
+
["dont-ask-permissions", "dont-ask"]
|
|
16953
|
+
]);
|
|
16954
|
+
function normalizePermissionPreset(value) {
|
|
16955
|
+
const normalized = value.trim().replace(/^--/, "").replaceAll("_", "-").toLowerCase();
|
|
16956
|
+
return PERMISSION_ALIASES.get(normalized) ?? normalized;
|
|
16957
|
+
}
|
|
16958
|
+
function permissionArgsFor(tool, permissions) {
|
|
16959
|
+
if (!permissions)
|
|
16960
|
+
return [];
|
|
16961
|
+
const preset = normalizePermissionPreset(permissions);
|
|
16962
|
+
if (preset === "default" || preset === "none" || preset === "off")
|
|
16963
|
+
return [];
|
|
16964
|
+
const args = tool.permissionArgs?.[preset];
|
|
16965
|
+
if (!args) {
|
|
16966
|
+
const supported = Object.keys(tool.permissionArgs ?? {}).sort();
|
|
16967
|
+
const suffix = supported.length > 0 ? ` Supported permissions: ${supported.join(", ")}.` : " No permission presets are configured.";
|
|
16968
|
+
throw new AccountsError(`tool "${tool.id}" does not support permissions "${permissions}".${suffix}`);
|
|
16969
|
+
}
|
|
16970
|
+
return args;
|
|
16971
|
+
}
|
|
16972
|
+
function mergeToolArgs(tool, args, opts = {}) {
|
|
16973
|
+
const permissionArgs = permissionArgsFor(tool, opts.permissions).filter((arg) => !args.includes(arg));
|
|
16974
|
+
return [...permissionArgs, ...args];
|
|
16975
|
+
}
|
|
16901
16976
|
var BUILTIN_IDS = new Set(BUILTIN_TOOLS.map((t) => t.id));
|
|
16902
16977
|
function listTools() {
|
|
16903
16978
|
const custom3 = loadStore().tools;
|
|
@@ -17072,6 +17147,15 @@ function writeClaudeKeychain(cred) {
|
|
|
17072
17147
|
}
|
|
17073
17148
|
|
|
17074
17149
|
// src/lib/claude-auth.ts
|
|
17150
|
+
var CLAUDE_API_AUTH_ENV_KEYS = [
|
|
17151
|
+
"ANTHROPIC_API_KEY",
|
|
17152
|
+
"ANTHROPIC_AUTH_TOKEN",
|
|
17153
|
+
"ANTHROPIC_BASE_URL",
|
|
17154
|
+
"CLAUDE_CODE_API_KEY_HELPER",
|
|
17155
|
+
"CLAUDE_CODE_API_KEY_HELPER_TTL_MS",
|
|
17156
|
+
"CLAUDE_CODE_USE_BEDROCK",
|
|
17157
|
+
"CLAUDE_CODE_USE_VERTEX"
|
|
17158
|
+
];
|
|
17075
17159
|
function readJsonFile(path) {
|
|
17076
17160
|
if (!existsSync3(path))
|
|
17077
17161
|
return;
|
|
@@ -17090,6 +17174,11 @@ function writeJsonFile(path, data, stayUnder) {
|
|
|
17090
17174
|
function readOAuthFromPaths(paths) {
|
|
17091
17175
|
return findOAuthSource(paths)?.oauth;
|
|
17092
17176
|
}
|
|
17177
|
+
function readOAuthSnapshot(profileDir) {
|
|
17178
|
+
const snap = readJsonFile(profileOAuthSnapshot(profileDir));
|
|
17179
|
+
const oauth = snap?.oauthAccount;
|
|
17180
|
+
return oauth && typeof oauth === "object" ? oauth : undefined;
|
|
17181
|
+
}
|
|
17093
17182
|
function findOAuthSource(paths) {
|
|
17094
17183
|
for (const p of paths) {
|
|
17095
17184
|
const data = readJsonFile(p);
|
|
@@ -17131,6 +17220,46 @@ function mergeOAuthInto(paths, oauth, allowDelete, stayUnder) {
|
|
|
17131
17220
|
}
|
|
17132
17221
|
}
|
|
17133
17222
|
}
|
|
17223
|
+
function sanitizeSettingsFile(configDir, stayUnder) {
|
|
17224
|
+
const settingsPath = join4(configDir, "settings.json");
|
|
17225
|
+
const settings = readJsonFile(settingsPath);
|
|
17226
|
+
if (!settings)
|
|
17227
|
+
return false;
|
|
17228
|
+
let changed = false;
|
|
17229
|
+
if ("apiKeyHelper" in settings) {
|
|
17230
|
+
delete settings.apiKeyHelper;
|
|
17231
|
+
changed = true;
|
|
17232
|
+
}
|
|
17233
|
+
const env = settings.env;
|
|
17234
|
+
if (env && typeof env === "object" && !Array.isArray(env)) {
|
|
17235
|
+
const envRecord = env;
|
|
17236
|
+
for (const key of CLAUDE_API_AUTH_ENV_KEYS) {
|
|
17237
|
+
if (key in envRecord) {
|
|
17238
|
+
delete envRecord[key];
|
|
17239
|
+
changed = true;
|
|
17240
|
+
}
|
|
17241
|
+
}
|
|
17242
|
+
}
|
|
17243
|
+
if (changed)
|
|
17244
|
+
writeJsonFile(settingsPath, settings, stayUnder);
|
|
17245
|
+
return changed;
|
|
17246
|
+
}
|
|
17247
|
+
function sanitizeClaudeProfileApiSettings(profileDir, tool) {
|
|
17248
|
+
if (tool.id !== "claude")
|
|
17249
|
+
return false;
|
|
17250
|
+
return sanitizeSettingsFile(profileDir, profileDir);
|
|
17251
|
+
}
|
|
17252
|
+
function sanitizeClaudeOAuthProfileSettings(profileDir, tool) {
|
|
17253
|
+
if (tool.id !== "claude")
|
|
17254
|
+
return false;
|
|
17255
|
+
if (!readOAuthSnapshot(profileDir) && !readOAuthFromPaths(profileAccountJsonPaths(profileDir, tool))) {
|
|
17256
|
+
return false;
|
|
17257
|
+
}
|
|
17258
|
+
return sanitizeClaudeProfileApiSettings(profileDir, tool);
|
|
17259
|
+
}
|
|
17260
|
+
function sanitizeLiveClaudeOAuthSettings() {
|
|
17261
|
+
return sanitizeSettingsFile(liveClaudePaths().configDir, liveClaudeBase());
|
|
17262
|
+
}
|
|
17134
17263
|
function liveOAuthEmail() {
|
|
17135
17264
|
const live = liveClaudePaths();
|
|
17136
17265
|
const oauth = readOAuthFromPaths([live.homeJson]);
|
|
@@ -17171,6 +17300,7 @@ function ensureProfileAuthSnapshot(profileDir, tool, opts = {}) {
|
|
|
17171
17300
|
assertSafeWritePath(credSnap, { mustStayUnder: profileDir });
|
|
17172
17301
|
copyFileSync(credFile, credSnap);
|
|
17173
17302
|
}
|
|
17303
|
+
sanitizeClaudeOAuthProfileSettings(profileDir, tool);
|
|
17174
17304
|
}
|
|
17175
17305
|
function profileHasAuth(profileDir, tool) {
|
|
17176
17306
|
return hasAuthSnapshot(profileDir) || !!readOAuthFromPaths(profileAccountJsonPaths(profileDir, tool));
|
|
@@ -17189,6 +17319,8 @@ function restoreClaudeAuthFromProfile(profileDir, tool, profileName) {
|
|
|
17189
17319
|
if (!oauth) {
|
|
17190
17320
|
throw new AccountsError("profile has no OAuth account data to apply");
|
|
17191
17321
|
}
|
|
17322
|
+
sanitizeClaudeOAuthProfileSettings(profileDir, tool);
|
|
17323
|
+
sanitizeLiveClaudeOAuthSettings();
|
|
17192
17324
|
assertSafeWritePath(live.homeJson, { mustStayUnder: liveRoot });
|
|
17193
17325
|
mergeOAuthInto([live.homeJson], oauth, false, liveRoot);
|
|
17194
17326
|
const credSnap = profileCredentialsSnapshot(profileDir);
|
|
@@ -17306,6 +17438,11 @@ function profileEnv(profile, tool) {
|
|
|
17306
17438
|
for (const [name, value] of Object.entries(tool.extraEnv ?? {})) {
|
|
17307
17439
|
env[name] = renderTemplate(value, profile);
|
|
17308
17440
|
}
|
|
17441
|
+
if (tool.id === "claude") {
|
|
17442
|
+
sanitizeClaudeProfileApiSettings(profile.dir, tool);
|
|
17443
|
+
for (const key of CLAUDE_API_AUTH_ENV_KEYS)
|
|
17444
|
+
env[key] = "";
|
|
17445
|
+
}
|
|
17309
17446
|
return env;
|
|
17310
17447
|
}
|
|
17311
17448
|
function formatEnvAssignments(env) {
|
|
@@ -17326,7 +17463,8 @@ function commandLine(env, command) {
|
|
|
17326
17463
|
return `${formatEnvAssignments(env)} ${command.map(shellQuote).join(" ")}`.trim();
|
|
17327
17464
|
}
|
|
17328
17465
|
function commandFor(tool, opts) {
|
|
17329
|
-
|
|
17466
|
+
const args = [...opts.resume ? tool.resumeArgs ?? [] : [], ...opts.args ?? []];
|
|
17467
|
+
return [tool.bin, ...mergeToolArgs(tool, args, { permissions: opts.permissions })];
|
|
17330
17468
|
}
|
|
17331
17469
|
function switchProfile(name, opts = {}) {
|
|
17332
17470
|
const profile = getProfile(name, opts.tool);
|
|
@@ -17355,6 +17493,7 @@ function switchProfile(name, opts = {}) {
|
|
|
17355
17493
|
exports: formatExportLines(env),
|
|
17356
17494
|
command,
|
|
17357
17495
|
commandLine: commandLine(env, command),
|
|
17496
|
+
...opts.permissions ? { permissions: normalizePermissionPreset(opts.permissions) } : {},
|
|
17358
17497
|
restartRequired,
|
|
17359
17498
|
message
|
|
17360
17499
|
};
|
|
@@ -17464,7 +17603,7 @@ function ok(data) {
|
|
|
17464
17603
|
function fail(message) {
|
|
17465
17604
|
return { content: [{ type: "text", text: JSON.stringify({ error: message }) }], isError: true };
|
|
17466
17605
|
}
|
|
17467
|
-
var server = new Server({ name: "accounts", version: "0.1.
|
|
17606
|
+
var server = new Server({ name: "accounts", version: "0.1.13" }, { capabilities: { tools: {} } });
|
|
17468
17607
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
17469
17608
|
tools: [
|
|
17470
17609
|
{
|
|
@@ -17497,6 +17636,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
17497
17636
|
tool: { type: "string" },
|
|
17498
17637
|
mode: { type: "string", enum: ["auto", "apply", "env", "active"] },
|
|
17499
17638
|
resume: { type: "boolean" },
|
|
17639
|
+
permissions: { type: "string" },
|
|
17500
17640
|
args: { type: "array", items: { type: "string" } }
|
|
17501
17641
|
},
|
|
17502
17642
|
required: ["name"]
|
|
@@ -17530,13 +17670,15 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
17530
17670
|
const profile = getProfile(name, typeof args["tool"] === "string" ? args["tool"] : undefined);
|
|
17531
17671
|
const resume = args["resume"] !== false;
|
|
17532
17672
|
const switchArgs = Array.isArray(args["args"]) ? args["args"].filter((value) => typeof value === "string") : undefined;
|
|
17673
|
+
const permissions = typeof args["permissions"] === "string" ? args["permissions"] : undefined;
|
|
17533
17674
|
const supervisor = await sendSupervisorRequest(profile.tool, {
|
|
17534
17675
|
type: "switch_profile",
|
|
17535
17676
|
name: profile.name,
|
|
17536
17677
|
tool: profile.tool,
|
|
17537
17678
|
mode: typeof args["mode"] === "string" ? args["mode"] : "auto",
|
|
17538
17679
|
resume,
|
|
17539
|
-
args: switchArgs
|
|
17680
|
+
args: switchArgs,
|
|
17681
|
+
permissions
|
|
17540
17682
|
}, { allowMissing: true });
|
|
17541
17683
|
if (supervisor) {
|
|
17542
17684
|
if (!supervisor.ok)
|
|
@@ -17551,7 +17693,8 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
17551
17693
|
tool: profile.tool,
|
|
17552
17694
|
mode: typeof args["mode"] === "string" ? args["mode"] : "auto",
|
|
17553
17695
|
resume,
|
|
17554
|
-
args: switchArgs
|
|
17696
|
+
args: switchArgs,
|
|
17697
|
+
permissions
|
|
17555
17698
|
});
|
|
17556
17699
|
return ok({
|
|
17557
17700
|
supervised: false,
|
package/dist/storage.js
CHANGED
|
@@ -4007,6 +4007,7 @@ var toolDefSchema = exports_external.object({
|
|
|
4007
4007
|
loginArgs: exports_external.array(exports_external.string()).optional(),
|
|
4008
4008
|
loginHint: exports_external.string().optional(),
|
|
4009
4009
|
resumeArgs: exports_external.array(exports_external.string()).optional(),
|
|
4010
|
+
permissionArgs: exports_external.record(exports_external.array(exports_external.string())).optional(),
|
|
4010
4011
|
accountFile: exports_external.string().optional(),
|
|
4011
4012
|
emailPath: exports_external.array(exports_external.string()).optional()
|
|
4012
4013
|
});
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export declare const toolDefSchema: z.ZodObject<{
|
|
|
12
12
|
loginArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
13
13
|
loginHint: z.ZodOptional<z.ZodString>;
|
|
14
14
|
resumeArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
15
|
+
/** Tool-specific permission presets exposed through `--permissions <preset>`. */
|
|
16
|
+
permissionArgs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
|
|
15
17
|
accountFile: z.ZodOptional<z.ZodString>;
|
|
16
18
|
emailPath: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
19
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -24,6 +26,7 @@ export declare const toolDefSchema: z.ZodObject<{
|
|
|
24
26
|
loginArgs?: string[] | undefined;
|
|
25
27
|
loginHint?: string | undefined;
|
|
26
28
|
resumeArgs?: string[] | undefined;
|
|
29
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
27
30
|
accountFile?: string | undefined;
|
|
28
31
|
emailPath?: string[] | undefined;
|
|
29
32
|
}, {
|
|
@@ -36,6 +39,7 @@ export declare const toolDefSchema: z.ZodObject<{
|
|
|
36
39
|
loginArgs?: string[] | undefined;
|
|
37
40
|
loginHint?: string | undefined;
|
|
38
41
|
resumeArgs?: string[] | undefined;
|
|
42
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
39
43
|
accountFile?: string | undefined;
|
|
40
44
|
emailPath?: string[] | undefined;
|
|
41
45
|
}>;
|
|
@@ -117,6 +121,8 @@ export declare const storeSchema: z.ZodObject<{
|
|
|
117
121
|
loginArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
118
122
|
loginHint: z.ZodOptional<z.ZodString>;
|
|
119
123
|
resumeArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
124
|
+
/** Tool-specific permission presets exposed through `--permissions <preset>`. */
|
|
125
|
+
permissionArgs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
|
|
120
126
|
accountFile: z.ZodOptional<z.ZodString>;
|
|
121
127
|
emailPath: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
122
128
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -129,6 +135,7 @@ export declare const storeSchema: z.ZodObject<{
|
|
|
129
135
|
loginArgs?: string[] | undefined;
|
|
130
136
|
loginHint?: string | undefined;
|
|
131
137
|
resumeArgs?: string[] | undefined;
|
|
138
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
132
139
|
accountFile?: string | undefined;
|
|
133
140
|
emailPath?: string[] | undefined;
|
|
134
141
|
}, {
|
|
@@ -141,6 +148,7 @@ export declare const storeSchema: z.ZodObject<{
|
|
|
141
148
|
loginArgs?: string[] | undefined;
|
|
142
149
|
loginHint?: string | undefined;
|
|
143
150
|
resumeArgs?: string[] | undefined;
|
|
151
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
144
152
|
accountFile?: string | undefined;
|
|
145
153
|
emailPath?: string[] | undefined;
|
|
146
154
|
}>, "many">>;
|
|
@@ -167,6 +175,7 @@ export declare const storeSchema: z.ZodObject<{
|
|
|
167
175
|
loginArgs?: string[] | undefined;
|
|
168
176
|
loginHint?: string | undefined;
|
|
169
177
|
resumeArgs?: string[] | undefined;
|
|
178
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
170
179
|
accountFile?: string | undefined;
|
|
171
180
|
emailPath?: string[] | undefined;
|
|
172
181
|
}[];
|
|
@@ -193,6 +202,7 @@ export declare const storeSchema: z.ZodObject<{
|
|
|
193
202
|
loginArgs?: string[] | undefined;
|
|
194
203
|
loginHint?: string | undefined;
|
|
195
204
|
resumeArgs?: string[] | undefined;
|
|
205
|
+
permissionArgs?: Record<string, string[]> | undefined;
|
|
196
206
|
accountFile?: string | undefined;
|
|
197
207
|
emailPath?: string[] | undefined;
|
|
198
208
|
}[] | undefined;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,8BAA8B;AAC9B,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,uEAAuE;AACvE,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,8BAA8B;AAC9B,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,uEAAuE;AACvE,eAAO,MAAM,aAAa;;;;;;;;;;IAUxB,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIjF,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EAQxB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,WAAW;;IAEtB,mEAAmE;;IAEnE;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGH,0EAA0E;;;;;;;;;;;QApC1E,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCjF,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/accounts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Manage and switch between multiple Claude Code (and other AI coding tool) profiles/accounts locally — isolated config dirs, per-account email, one-command switching.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|