agent-shim 11.80.0 → 11.81.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/README.md +1 -1
- package/dist/cli.cjs +64 -10
- package/dist/index.cjs +32 -5
- package/dist/index.mjs +32 -5
- package/dist/types/index.d.ts +10 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -85,7 +85,7 @@ agent-shim <noun> <verb> [name] [options] # nouns: identity, profile, pool,
|
|
|
85
85
|
agent-shim identity add <name> [--json]
|
|
86
86
|
agent-shim identity list [--json]
|
|
87
87
|
agent-shim identity show <name> [--json]
|
|
88
|
-
agent-shim identity set <name> [--default-profile <profile> | --no-default-profile] [--provider <provider> | --no-provider] [--[no-]allow-ambient-credential] [--json]
|
|
88
|
+
agent-shim identity set <name> [--label <text> | --no-label] [--default-profile <profile> | --no-default-profile] [--provider <provider> | --no-provider] [--[no-]allow-ambient-credential] [--json]
|
|
89
89
|
agent-shim identity set <name> [--credential <source>]... [--credential-target <bearer|apiKey|oauthToken>] [--no-credential] [--json]
|
|
90
90
|
agent-shim identity set <name> [--anchor <days>@<HH:MM>[/<zone>]]... [--no-anchor] [--json]
|
|
91
91
|
agent-shim identity remove <name> [--yes] [--json]
|
package/dist/cli.cjs
CHANGED
|
@@ -25123,7 +25123,7 @@ function providerFilePath(directory, name, source) {
|
|
|
25123
25123
|
}
|
|
25124
25124
|
return import_node_path4.default.join(directory, `${name}.json`);
|
|
25125
25125
|
}
|
|
25126
|
-
var import_node_path4, FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, UnsafeNameError, InvalidProviderNameError;
|
|
25126
|
+
var import_node_path4, FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, LABEL_FORBIDDEN, IDENTITY_LABEL_RULE, IdentityLabelSchema, UnsafeNameError, InvalidProviderNameError;
|
|
25127
25127
|
var init_names = __esm({
|
|
25128
25128
|
"src/config/names.ts"() {
|
|
25129
25129
|
"use strict";
|
|
@@ -25142,6 +25142,9 @@ var init_names = __esm({
|
|
|
25142
25142
|
STORED_NAME_RULE = `must be non-empty, at most ${String(MAX_NAME_BYTES)} bytes, not "." or "..", and contain no path separator or NUL`;
|
|
25143
25143
|
FileNameSchema = external_exports.string().min(1).regex(FILE_NAME, FILE_NAME_RULE);
|
|
25144
25144
|
StoredNameSchema = external_exports.string().min(1).max(MAX_NAME_BYTES).refine(isStoredName, STORED_NAME_RULE);
|
|
25145
|
+
LABEL_FORBIDDEN = /[\p{Cc}\p{Zl}\p{Zp}]/u;
|
|
25146
|
+
IDENTITY_LABEL_RULE = `must be non-empty single-line text of at most ${String(MAX_NAME_BYTES)} characters, with no control characters and no leading or trailing whitespace`;
|
|
25147
|
+
IdentityLabelSchema = external_exports.string().min(1).max(MAX_NAME_BYTES).refine((label2) => label2 === label2.trim() && !LABEL_FORBIDDEN.test(label2), IDENTITY_LABEL_RULE);
|
|
25145
25148
|
UnsafeNameError = class extends CliError {
|
|
25146
25149
|
constructor(attemptedName, kind, rule = STORED_NAME_RULE, source) {
|
|
25147
25150
|
super(`${source === void 0 ? "" : `${source}: `}${JSON.stringify(attemptedName)} is not a valid ${kind} name: a name ${rule}.`);
|
|
@@ -28489,6 +28492,8 @@ var init_schema = __esm({
|
|
|
28489
28492
|
IdentitySchema = external_exports.strictObject({
|
|
28490
28493
|
$schema: external_exports.string().optional(),
|
|
28491
28494
|
name: FileNameSchema,
|
|
28495
|
+
/** What the identity is for, in the person's words, drawn beside its name in `identity list` and `show`, the launch banner and the statusline. Display only: the name stays the key for lookup, paths, keychain service names and pools. */
|
|
28496
|
+
label: IdentityLabelSchema.optional(),
|
|
28492
28497
|
defaultConfigProfile: StoredNameSchema.optional(),
|
|
28493
28498
|
/** The provider this identity exists for: a launch on the identity routes through it unless `--provider`, `--no-provider` or a cascade layer's `launch.provider` says otherwise. Its sessions run on the provider's credential, so the identity needs no stored login. */
|
|
28494
28499
|
provider: StoredNameSchema.optional(),
|
|
@@ -38280,7 +38285,7 @@ var init_package = __esm({
|
|
|
38280
38285
|
"package.json"() {
|
|
38281
38286
|
package_default = {
|
|
38282
38287
|
name: "agent-shim",
|
|
38283
|
-
version: "11.
|
|
38288
|
+
version: "11.81.0",
|
|
38284
38289
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
38285
38290
|
license: "MIT",
|
|
38286
38291
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -68108,9 +68113,15 @@ function movedRows(facts) {
|
|
|
68108
68113
|
}
|
|
68109
68114
|
return [];
|
|
68110
68115
|
}
|
|
68116
|
+
function identityText(facts) {
|
|
68117
|
+
if (facts.identity === void 0) {
|
|
68118
|
+
return "(none)";
|
|
68119
|
+
}
|
|
68120
|
+
return facts.identityLabel === void 0 ? facts.identity : `${facts.identity} (${facts.identityLabel})`;
|
|
68121
|
+
}
|
|
68111
68122
|
function decisionRows(facts) {
|
|
68112
68123
|
return [
|
|
68113
|
-
{ label: "identity", value: facts
|
|
68124
|
+
{ label: "identity", value: identityText(facts), detail: facts.identitySource },
|
|
68114
68125
|
...facts.pool === void 0 ? [] : [
|
|
68115
68126
|
{
|
|
68116
68127
|
label: "pool",
|
|
@@ -70276,6 +70287,7 @@ function decideLaunch(params, readOnly) {
|
|
|
70276
70287
|
return {
|
|
70277
70288
|
parsedArgv,
|
|
70278
70289
|
identityDecision,
|
|
70290
|
+
identityLabel: loadedIdentity?.config.label,
|
|
70279
70291
|
poolPick,
|
|
70280
70292
|
poolRanking,
|
|
70281
70293
|
lastRanAs,
|
|
@@ -70306,6 +70318,7 @@ function prepareLaunch(params) {
|
|
|
70306
70318
|
const rows = [
|
|
70307
70319
|
...decisionRows({
|
|
70308
70320
|
identity: identityDecision.name,
|
|
70321
|
+
identityLabel: decided.identityLabel,
|
|
70309
70322
|
identitySource: identityDecision.source,
|
|
70310
70323
|
pool: poolPick,
|
|
70311
70324
|
ranking: resolvedFlags.explain ? poolRanking : void 0,
|
|
@@ -116668,6 +116681,12 @@ function setIdentityProvider(paths, identityName, providerName) {
|
|
|
116668
116681
|
}
|
|
116669
116682
|
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { provider: providerName });
|
|
116670
116683
|
}
|
|
116684
|
+
function setIdentityLabel(paths, identityName, label2) {
|
|
116685
|
+
if (!identityExists(paths, identityName)) {
|
|
116686
|
+
throw new IdentityNotFoundError(identityName);
|
|
116687
|
+
}
|
|
116688
|
+
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { label: label2 });
|
|
116689
|
+
}
|
|
116671
116690
|
function setAllowAmbientCredential(paths, identityName, allow) {
|
|
116672
116691
|
if (!identityExists(paths, identityName)) {
|
|
116673
116692
|
throw new IdentityNotFoundError(identityName);
|
|
@@ -117812,6 +117831,7 @@ function registerProfileCommand(program2, deps) {
|
|
|
117812
117831
|
}
|
|
117813
117832
|
|
|
117814
117833
|
// src/identityManager.ts
|
|
117834
|
+
init_names();
|
|
117815
117835
|
init_providersStore();
|
|
117816
117836
|
init_identity();
|
|
117817
117837
|
init_realPorts();
|
|
@@ -117887,6 +117907,7 @@ function toIdentityView(paths, { entry, read }, sharesLoginWith) {
|
|
|
117887
117907
|
active: entry.isActive,
|
|
117888
117908
|
directory: import_node_path25.default.join(paths.identitiesDir, entry.name),
|
|
117889
117909
|
...entry.problem === void 0 ? {
|
|
117910
|
+
...entry.identity.label === void 0 ? {} : { label: entry.identity.label },
|
|
117890
117911
|
...entry.identity.defaultConfigProfile === void 0 ? {} : { defaultConfigProfile: entry.identity.defaultConfigProfile },
|
|
117891
117912
|
...entry.identity.provider === void 0 ? {} : { provider: entry.identity.provider },
|
|
117892
117913
|
allowAmbientCredential: entry.identity.allowAmbientCredential,
|
|
@@ -117914,11 +117935,12 @@ function formatIdentityLine(entry, view) {
|
|
|
117914
117935
|
if (entry.problem !== void 0) {
|
|
117915
117936
|
return `${marker}${entry.name} [unreadable: ${entry.problem}]${account}${accountProblem}`;
|
|
117916
117937
|
}
|
|
117938
|
+
const label2 = entry.identity.label === void 0 ? "" : ` (label: ${entry.identity.label})`;
|
|
117917
117939
|
const defaultProfile = entry.identity.defaultConfigProfile === void 0 ? "" : ` (default profile: ${entry.identity.defaultConfigProfile})`;
|
|
117918
117940
|
const provider = entry.identity.provider === void 0 ? "" : ` (provider: ${entry.identity.provider})`;
|
|
117919
117941
|
const ambient = entry.identity.allowAmbientCredential ? " [allows ambient credential]" : "";
|
|
117920
117942
|
const credential = entry.identity.credential === void 0 ? "" : ` [credential ${describeCredential(entry.identity.credential)}]`;
|
|
117921
|
-
return `${marker}${entry.name}${defaultProfile}${provider}${ambient}${credential}${account}${accountProblem}`;
|
|
117943
|
+
return `${marker}${entry.name}${label2}${defaultProfile}${provider}${ambient}${credential}${account}${accountProblem}`;
|
|
117922
117944
|
}
|
|
117923
117945
|
function registerIdentityCommand(program2, deps) {
|
|
117924
117946
|
const { paths } = deps;
|
|
@@ -117990,6 +118012,7 @@ function registerIdentityCommand(program2, deps) {
|
|
|
117990
118012
|
console.log(`Unreadable: ${view.problem}`);
|
|
117991
118013
|
return;
|
|
117992
118014
|
}
|
|
118015
|
+
console.log(`Label: ${view.label ?? "(none)"}`);
|
|
117993
118016
|
console.log(`Default configuration profile: ${view.defaultConfigProfile ?? "(none)"}`);
|
|
117994
118017
|
console.log(`Provider: ${view.provider ?? "(none)"}`);
|
|
117995
118018
|
console.log(`Allows ambient credential: ${view.allowAmbientCredential === true ? "yes" : "no"}`);
|
|
@@ -117998,7 +118021,7 @@ function registerIdentityCommand(program2, deps) {
|
|
|
117998
118021
|
}),
|
|
117999
118022
|
["agent-shim identity show work", "agent-shim identity show work --json"]
|
|
118000
118023
|
);
|
|
118001
|
-
const identitySet = identity.command("set <name>").description("Update an identity's settings.").option("--json", "Print the result as JSON.").option("--default-profile <profile>", "Configuration profile this identity uses when nothing more specific selects one.").option("--no-default-profile", "Clear this identity's default configuration profile.").option("--provider <provider>", "Provider this identity exists for: a launch on it routes through the provider unless a flag, directory rule or profile selects another, and doctor expects no stored login.").option("--no-provider", "Clear this identity's provider.").option("--allow-ambient-credential", "Allow this identity to launch even with an ambient credential env var set.").option("--no-allow-ambient-credential", "Disallow ambient credential env vars for this identity (the default).").option(
|
|
118024
|
+
const identitySet = identity.command("set <name>").description("Update an identity's settings.").option("--json", "Print the result as JSON.").option("--label <text>", "Free text shown beside this identity's name in `identity list` and `show`, the launch banner and the statusline. Display only: the name stays the key.").option("--no-label", "Clear this identity's label.").option("--default-profile <profile>", "Configuration profile this identity uses when nothing more specific selects one.").option("--no-default-profile", "Clear this identity's default configuration profile.").option("--provider <provider>", "Provider this identity exists for: a launch on it routes through the provider unless a flag, directory rule or profile selects another, and doctor expects no stored login.").option("--no-provider", "Clear this identity's provider.").option("--allow-ambient-credential", "Allow this identity to launch even with an ambient credential env var set.").option("--no-allow-ambient-credential", "Disallow ambient credential env vars for this identity (the default).").option(
|
|
118002
118025
|
"--credential <source>",
|
|
118003
118026
|
`Authenticate this identity from a token instead of its stored login, replacing any existing sources (repeatable, in the order tried): ${CREDENTIAL_SOURCE_SYNTAX}.`,
|
|
118004
118027
|
collectCredentialSource
|
|
@@ -118018,16 +118041,25 @@ function registerIdentityCommand(program2, deps) {
|
|
|
118018
118041
|
const { json: json2, ...options } = allOptions;
|
|
118019
118042
|
if (Object.entries(allOptions).every(([key, value2]) => key === "json" || value2 === void 0)) {
|
|
118020
118043
|
throw new UsageError(
|
|
118021
|
-
"Nothing to change: pass --default-profile, --no-default-profile, --provider, --no-provider, --allow-ambient-credential, --no-allow-ambient-credential, --credential, --no-credential, --credential-target, --anchor, --no-anchor or a --credential-cache option."
|
|
118044
|
+
"Nothing to change: pass --label, --no-label, --default-profile, --no-default-profile, --provider, --no-provider, --allow-ambient-credential, --no-allow-ambient-credential, --credential, --no-credential, --credential-target, --anchor, --no-anchor or a --credential-cache option."
|
|
118022
118045
|
);
|
|
118023
118046
|
}
|
|
118024
118047
|
if (!identityExists(paths, name)) {
|
|
118025
118048
|
throw new IdentityNotFoundError(name);
|
|
118026
118049
|
}
|
|
118050
|
+
const label2 = typeof options.label === "string" ? IdentityLabelSchema.safeParse(options.label) : void 0;
|
|
118051
|
+
if (label2?.success === false) {
|
|
118052
|
+
throw new UsageError(`Identity label ${JSON.stringify(options.label)} ${IDENTITY_LABEL_RULE}.`);
|
|
118053
|
+
}
|
|
118027
118054
|
if (typeof options.provider === "string") {
|
|
118028
118055
|
requireProviderExists(paths, options.provider);
|
|
118029
118056
|
}
|
|
118030
118057
|
const messages = [];
|
|
118058
|
+
if (options.label !== void 0) {
|
|
118059
|
+
const labelText = options.label === false ? void 0 : options.label;
|
|
118060
|
+
setIdentityLabel(paths, name, labelText);
|
|
118061
|
+
messages.push(labelText === void 0 ? `Identity "${name}" no longer has a label.` : `Identity "${name}" is now labelled ${JSON.stringify(labelText)}.`);
|
|
118062
|
+
}
|
|
118031
118063
|
if (options.defaultProfile !== void 0) {
|
|
118032
118064
|
const profileName = options.defaultProfile === false ? void 0 : options.defaultProfile;
|
|
118033
118065
|
if (profileName !== void 0) {
|
|
@@ -118072,6 +118104,7 @@ function registerIdentityCommand(program2, deps) {
|
|
|
118072
118104
|
});
|
|
118073
118105
|
}),
|
|
118074
118106
|
[
|
|
118107
|
+
'agent-shim identity set work --label "Example Org"',
|
|
118075
118108
|
"agent-shim identity set work --default-profile client-acme",
|
|
118076
118109
|
"agent-shim identity set minimax --provider minimax",
|
|
118077
118110
|
"agent-shim identity set work --allow-ambient-credential",
|
|
@@ -133252,6 +133285,7 @@ init_providersStore();
|
|
|
133252
133285
|
// src/frontdoor/configSchemas.ts
|
|
133253
133286
|
init_zod();
|
|
133254
133287
|
init_schema();
|
|
133288
|
+
init_names();
|
|
133255
133289
|
init_statusline();
|
|
133256
133290
|
var RemovalConfirmationSchema = external_exports.boolean();
|
|
133257
133291
|
var CredentialWriteSchema = (targets) => external_exports.strictObject({
|
|
@@ -133277,6 +133311,7 @@ var mutationOutput = (kind, action) => external_exports.strictObject({ action: e
|
|
|
133277
133311
|
var storedMutationOutput = (kind, action, value2) => external_exports.strictObject({ action: external_exports.literal(action), kind: external_exports.literal(kind), name: external_exports.string(), value: value2 });
|
|
133278
133312
|
var IdentityValueSchema = external_exports.strictObject({
|
|
133279
133313
|
name: external_exports.string(),
|
|
133314
|
+
label: external_exports.string().optional(),
|
|
133280
133315
|
defaultConfigProfile: external_exports.string().optional(),
|
|
133281
133316
|
provider: external_exports.string().optional(),
|
|
133282
133317
|
allowAmbientCredential: external_exports.boolean(),
|
|
@@ -133297,6 +133332,8 @@ var ConfigNameInputSchema = external_exports.strictObject({ name: external_expor
|
|
|
133297
133332
|
var ConfigIdentityAddOutputSchema = storedMutationOutput("identity", "created", IdentityValueSchema);
|
|
133298
133333
|
var ConfigIdentitySetInputSchema = external_exports.strictObject({
|
|
133299
133334
|
name: external_exports.string().min(1),
|
|
133335
|
+
/** The identity's display label; `false` clears it. */
|
|
133336
|
+
label: external_exports.union([IdentityLabelSchema, external_exports.literal(false)]).optional(),
|
|
133300
133337
|
defaultConfigProfile: external_exports.union([external_exports.string().min(1), external_exports.literal(false)]).optional(),
|
|
133301
133338
|
/** The provider the identity exists for; `false` clears it. */
|
|
133302
133339
|
provider: external_exports.union([external_exports.string().min(1), external_exports.literal(false)]).optional(),
|
|
@@ -133443,6 +133480,7 @@ function identityValue(name, paths) {
|
|
|
133443
133480
|
}
|
|
133444
133481
|
return {
|
|
133445
133482
|
name: identity.name,
|
|
133483
|
+
...identity.label === void 0 ? {} : { label: identity.label },
|
|
133446
133484
|
...identity.defaultConfigProfile === void 0 ? {} : { defaultConfigProfile: identity.defaultConfigProfile },
|
|
133447
133485
|
...identity.provider === void 0 ? {} : { provider: identity.provider },
|
|
133448
133486
|
allowAmbientCredential: identity.allowAmbientCredential,
|
|
@@ -133477,9 +133515,9 @@ function createConfigApiRouter(deps) {
|
|
|
133477
133515
|
return { action: "created", kind: "identity", name: input2.name, value: identityValue(input2.name, paths) };
|
|
133478
133516
|
})
|
|
133479
133517
|
),
|
|
133480
|
-
set: route("/rest/config/identity/set", "Update an identity's default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
133518
|
+
set: route("/rest/config/identity/set", "Update an identity's label, default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
133481
133519
|
({ input: input2 }) => guarded(() => {
|
|
133482
|
-
requireChange(input2.defaultConfigProfile !== void 0 || input2.provider !== void 0 || input2.allowAmbientCredential !== void 0 || input2.credential !== void 0 || input2.anchors !== void 0, "defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
133520
|
+
requireChange(input2.label !== void 0 || input2.defaultConfigProfile !== void 0 || input2.provider !== void 0 || input2.allowAmbientCredential !== void 0 || input2.credential !== void 0 || input2.anchors !== void 0, "label, defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
133483
133521
|
if (!identityExists(paths, input2.name)) {
|
|
133484
133522
|
throw new IdentityNotFoundError(input2.name);
|
|
133485
133523
|
}
|
|
@@ -133489,6 +133527,9 @@ function createConfigApiRouter(deps) {
|
|
|
133489
133527
|
if (typeof input2.provider === "string") {
|
|
133490
133528
|
requireProviderExists(paths, input2.provider);
|
|
133491
133529
|
}
|
|
133530
|
+
if (input2.label !== void 0) {
|
|
133531
|
+
setIdentityLabel(paths, input2.name, input2.label === false ? void 0 : input2.label);
|
|
133532
|
+
}
|
|
133492
133533
|
if (input2.defaultConfigProfile !== void 0) {
|
|
133493
133534
|
setDefaultConfigProfile(paths, input2.name, input2.defaultConfigProfile === false ? void 0 : input2.defaultConfigProfile);
|
|
133494
133535
|
}
|
|
@@ -141027,6 +141068,7 @@ function enrichStatuslinePayload(params) {
|
|
|
141027
141068
|
const account = clientEmail === void 0 ? params.account : void 0;
|
|
141028
141069
|
let summary = {
|
|
141029
141070
|
identity,
|
|
141071
|
+
identityLabel: params.identityLabel,
|
|
141030
141072
|
provider: params.env.AGENT_SHIM_PROVIDER === void 0 || params.env.AGENT_SHIM_PROVIDER === "" ? void 0 : params.env.AGENT_SHIM_PROVIDER,
|
|
141031
141073
|
providerAccountEmail: void 0,
|
|
141032
141074
|
providerAccountSub: void 0,
|
|
@@ -142349,7 +142391,13 @@ function headroomSegment({ summary, t: t10 }) {
|
|
|
142349
142391
|
|
|
142350
142392
|
// src/statusline/elements/header/identity.ts
|
|
142351
142393
|
function identitySegment({ summary }) {
|
|
142352
|
-
if (summary.identity
|
|
142394
|
+
if (summary.identity === void 0) {
|
|
142395
|
+
return void 0;
|
|
142396
|
+
}
|
|
142397
|
+
if (summary.identityLabel !== void 0) {
|
|
142398
|
+
return `${summary.identity} (${summary.identityLabel})`;
|
|
142399
|
+
}
|
|
142400
|
+
if (summary.provider !== void 0 && summary.identity !== summary.providerAccountEmail && summary.identity !== summary.loginAccountEmail) {
|
|
142353
142401
|
return summary.identity;
|
|
142354
142402
|
}
|
|
142355
142403
|
return void 0;
|
|
@@ -145383,7 +145431,13 @@ function registerStatuslineCommand(program2, deps) {
|
|
|
145383
145431
|
const identity = identityOf(process.env);
|
|
145384
145432
|
let snapshot;
|
|
145385
145433
|
let account;
|
|
145434
|
+
let identityLabel;
|
|
145386
145435
|
if (identity !== void 0) {
|
|
145436
|
+
try {
|
|
145437
|
+
identityLabel = readIdentity(deps.paths, identity)?.label;
|
|
145438
|
+
} catch {
|
|
145439
|
+
identityLabel = void 0;
|
|
145440
|
+
}
|
|
145387
145441
|
try {
|
|
145388
145442
|
snapshot = readUsageSnapshot(realFarmFs, deps.paths.usageSnapshotsDir, identity);
|
|
145389
145443
|
} catch {
|
|
@@ -145435,7 +145489,7 @@ function registerStatuslineCommand(program2, deps) {
|
|
|
145435
145489
|
}
|
|
145436
145490
|
}
|
|
145437
145491
|
const clientPayload = parseClientPayload(payload);
|
|
145438
|
-
const enrichParams = { payload, env: process.env, snapshot, account, providerName, nowMs, headroom, routedTarget, ...modelChoice === void 0 ? {} : { modelChoice } };
|
|
145492
|
+
const enrichParams = { payload, env: process.env, identityLabel, snapshot, account, providerName, nowMs, headroom, routedTarget, ...modelChoice === void 0 ? {} : { modelChoice } };
|
|
145439
145493
|
const renderer = process.env.AGENT_SHIM_STATUSLINE_CMD;
|
|
145440
145494
|
if (renderer !== void 0 && renderer !== "") {
|
|
145441
145495
|
const child = (0, import_node_child_process9.spawn)("/bin/sh", ["-c", renderer], { stdio: ["pipe", "inherit", "inherit"] });
|
package/dist/index.cjs
CHANGED
|
@@ -183,7 +183,7 @@ function providerFilePath(directory, name, source) {
|
|
|
183
183
|
}
|
|
184
184
|
return import_node_path.default.join(directory, `${name}.json`);
|
|
185
185
|
}
|
|
186
|
-
var import_node_path, import_zod, FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, UnsafeNameError, InvalidProviderNameError;
|
|
186
|
+
var import_node_path, import_zod, FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, LABEL_FORBIDDEN, IDENTITY_LABEL_RULE, IdentityLabelSchema, UnsafeNameError, InvalidProviderNameError;
|
|
187
187
|
var init_names = __esm({
|
|
188
188
|
"src/config/names.ts"() {
|
|
189
189
|
"use strict";
|
|
@@ -202,6 +202,9 @@ var init_names = __esm({
|
|
|
202
202
|
STORED_NAME_RULE = `must be non-empty, at most ${String(MAX_NAME_BYTES)} bytes, not "." or "..", and contain no path separator or NUL`;
|
|
203
203
|
FileNameSchema = import_zod.z.string().min(1).regex(FILE_NAME, FILE_NAME_RULE);
|
|
204
204
|
StoredNameSchema = import_zod.z.string().min(1).max(MAX_NAME_BYTES).refine(isStoredName, STORED_NAME_RULE);
|
|
205
|
+
LABEL_FORBIDDEN = /[\p{Cc}\p{Zl}\p{Zp}]/u;
|
|
206
|
+
IDENTITY_LABEL_RULE = `must be non-empty single-line text of at most ${String(MAX_NAME_BYTES)} characters, with no control characters and no leading or trailing whitespace`;
|
|
207
|
+
IdentityLabelSchema = import_zod.z.string().min(1).max(MAX_NAME_BYTES).refine((label) => label === label.trim() && !LABEL_FORBIDDEN.test(label), IDENTITY_LABEL_RULE);
|
|
205
208
|
UnsafeNameError = class extends CliError {
|
|
206
209
|
constructor(attemptedName, kind, rule = STORED_NAME_RULE, source) {
|
|
207
210
|
super(`${source === void 0 ? "" : `${source}: `}${JSON.stringify(attemptedName)} is not a valid ${kind} name: a name ${rule}.`);
|
|
@@ -1228,6 +1231,8 @@ var init_schema = __esm({
|
|
|
1228
1231
|
IdentitySchema = import_zod3.z.strictObject({
|
|
1229
1232
|
$schema: import_zod3.z.string().optional(),
|
|
1230
1233
|
name: FileNameSchema,
|
|
1234
|
+
/** What the identity is for, in the person's words, drawn beside its name in `identity list` and `show`, the launch banner and the statusline. Display only: the name stays the key for lookup, paths, keychain service names and pools. */
|
|
1235
|
+
label: IdentityLabelSchema.optional(),
|
|
1231
1236
|
defaultConfigProfile: StoredNameSchema.optional(),
|
|
1232
1237
|
/** The provider this identity exists for: a launch on the identity routes through it unless `--provider`, `--no-provider` or a cascade layer's `launch.provider` says otherwise. Its sessions run on the provider's credential, so the identity needs no stored login. */
|
|
1233
1238
|
provider: StoredNameSchema.optional(),
|
|
@@ -4764,7 +4769,7 @@ var init_package = __esm({
|
|
|
4764
4769
|
"package.json"() {
|
|
4765
4770
|
package_default = {
|
|
4766
4771
|
name: "agent-shim",
|
|
4767
|
-
version: "11.
|
|
4772
|
+
version: "11.81.0",
|
|
4768
4773
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
4769
4774
|
license: "MIT",
|
|
4770
4775
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -11594,9 +11599,15 @@ function movedRows(facts) {
|
|
|
11594
11599
|
}
|
|
11595
11600
|
return [];
|
|
11596
11601
|
}
|
|
11602
|
+
function identityText(facts) {
|
|
11603
|
+
if (facts.identity === void 0) {
|
|
11604
|
+
return "(none)";
|
|
11605
|
+
}
|
|
11606
|
+
return facts.identityLabel === void 0 ? facts.identity : `${facts.identity} (${facts.identityLabel})`;
|
|
11607
|
+
}
|
|
11597
11608
|
function decisionRows(facts) {
|
|
11598
11609
|
return [
|
|
11599
|
-
{ label: "identity", value: facts
|
|
11610
|
+
{ label: "identity", value: identityText(facts), detail: facts.identitySource },
|
|
11600
11611
|
...facts.pool === void 0 ? [] : [
|
|
11601
11612
|
{
|
|
11602
11613
|
label: "pool",
|
|
@@ -12122,6 +12133,7 @@ function decideLaunch(params, readOnly) {
|
|
|
12122
12133
|
return {
|
|
12123
12134
|
parsedArgv,
|
|
12124
12135
|
identityDecision,
|
|
12136
|
+
identityLabel: loadedIdentity?.config.label,
|
|
12125
12137
|
poolPick,
|
|
12126
12138
|
poolRanking,
|
|
12127
12139
|
lastRanAs,
|
|
@@ -12152,6 +12164,7 @@ function prepareLaunch(params) {
|
|
|
12152
12164
|
const rows = [
|
|
12153
12165
|
...decisionRows({
|
|
12154
12166
|
identity: identityDecision.name,
|
|
12167
|
+
identityLabel: decided.identityLabel,
|
|
12155
12168
|
identitySource: identityDecision.source,
|
|
12156
12169
|
pool: poolPick,
|
|
12157
12170
|
ranking: resolvedFlags.explain ? poolRanking : void 0,
|
|
@@ -17137,6 +17150,12 @@ function setIdentityProvider(paths, identityName, providerName) {
|
|
|
17137
17150
|
}
|
|
17138
17151
|
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { provider: providerName });
|
|
17139
17152
|
}
|
|
17153
|
+
function setIdentityLabel(paths, identityName, label) {
|
|
17154
|
+
if (!identityExists(paths, identityName)) {
|
|
17155
|
+
throw new IdentityNotFoundError(identityName);
|
|
17156
|
+
}
|
|
17157
|
+
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { label });
|
|
17158
|
+
}
|
|
17140
17159
|
function setAllowAmbientCredential(paths, identityName, allow) {
|
|
17141
17160
|
if (!identityExists(paths, identityName)) {
|
|
17142
17161
|
throw new IdentityNotFoundError(identityName);
|
|
@@ -18531,6 +18550,7 @@ init_providersStore();
|
|
|
18531
18550
|
// src/frontdoor/configSchemas.ts
|
|
18532
18551
|
var import_zod30 = require("zod");
|
|
18533
18552
|
init_schema();
|
|
18553
|
+
init_names();
|
|
18534
18554
|
init_statusline();
|
|
18535
18555
|
var RemovalConfirmationSchema = import_zod30.z.boolean();
|
|
18536
18556
|
var CredentialWriteSchema = (targets) => import_zod30.z.strictObject({
|
|
@@ -18556,6 +18576,7 @@ var mutationOutput = (kind, action) => import_zod30.z.strictObject({ action: imp
|
|
|
18556
18576
|
var storedMutationOutput = (kind, action, value) => import_zod30.z.strictObject({ action: import_zod30.z.literal(action), kind: import_zod30.z.literal(kind), name: import_zod30.z.string(), value });
|
|
18557
18577
|
var IdentityValueSchema = import_zod30.z.strictObject({
|
|
18558
18578
|
name: import_zod30.z.string(),
|
|
18579
|
+
label: import_zod30.z.string().optional(),
|
|
18559
18580
|
defaultConfigProfile: import_zod30.z.string().optional(),
|
|
18560
18581
|
provider: import_zod30.z.string().optional(),
|
|
18561
18582
|
allowAmbientCredential: import_zod30.z.boolean(),
|
|
@@ -18576,6 +18597,8 @@ var ConfigNameInputSchema = import_zod30.z.strictObject({ name: import_zod30.z.s
|
|
|
18576
18597
|
var ConfigIdentityAddOutputSchema = storedMutationOutput("identity", "created", IdentityValueSchema);
|
|
18577
18598
|
var ConfigIdentitySetInputSchema = import_zod30.z.strictObject({
|
|
18578
18599
|
name: import_zod30.z.string().min(1),
|
|
18600
|
+
/** The identity's display label; `false` clears it. */
|
|
18601
|
+
label: import_zod30.z.union([IdentityLabelSchema, import_zod30.z.literal(false)]).optional(),
|
|
18579
18602
|
defaultConfigProfile: import_zod30.z.union([import_zod30.z.string().min(1), import_zod30.z.literal(false)]).optional(),
|
|
18580
18603
|
/** The provider the identity exists for; `false` clears it. */
|
|
18581
18604
|
provider: import_zod30.z.union([import_zod30.z.string().min(1), import_zod30.z.literal(false)]).optional(),
|
|
@@ -18722,6 +18745,7 @@ function identityValue(name, paths) {
|
|
|
18722
18745
|
}
|
|
18723
18746
|
return {
|
|
18724
18747
|
name: identity.name,
|
|
18748
|
+
...identity.label === void 0 ? {} : { label: identity.label },
|
|
18725
18749
|
...identity.defaultConfigProfile === void 0 ? {} : { defaultConfigProfile: identity.defaultConfigProfile },
|
|
18726
18750
|
...identity.provider === void 0 ? {} : { provider: identity.provider },
|
|
18727
18751
|
allowAmbientCredential: identity.allowAmbientCredential,
|
|
@@ -18756,9 +18780,9 @@ function createConfigApiRouter(deps) {
|
|
|
18756
18780
|
return { action: "created", kind: "identity", name: input.name, value: identityValue(input.name, paths) };
|
|
18757
18781
|
})
|
|
18758
18782
|
),
|
|
18759
|
-
set: route("/rest/config/identity/set", "Update an identity's default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
18783
|
+
set: route("/rest/config/identity/set", "Update an identity's label, default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
18760
18784
|
({ input }) => guarded(() => {
|
|
18761
|
-
requireChange(input.defaultConfigProfile !== void 0 || input.provider !== void 0 || input.allowAmbientCredential !== void 0 || input.credential !== void 0 || input.anchors !== void 0, "defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
18785
|
+
requireChange(input.label !== void 0 || input.defaultConfigProfile !== void 0 || input.provider !== void 0 || input.allowAmbientCredential !== void 0 || input.credential !== void 0 || input.anchors !== void 0, "label, defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
18762
18786
|
if (!identityExists(paths, input.name)) {
|
|
18763
18787
|
throw new IdentityNotFoundError(input.name);
|
|
18764
18788
|
}
|
|
@@ -18768,6 +18792,9 @@ function createConfigApiRouter(deps) {
|
|
|
18768
18792
|
if (typeof input.provider === "string") {
|
|
18769
18793
|
requireProviderExists(paths, input.provider);
|
|
18770
18794
|
}
|
|
18795
|
+
if (input.label !== void 0) {
|
|
18796
|
+
setIdentityLabel(paths, input.name, input.label === false ? void 0 : input.label);
|
|
18797
|
+
}
|
|
18771
18798
|
if (input.defaultConfigProfile !== void 0) {
|
|
18772
18799
|
setDefaultConfigProfile(paths, input.name, input.defaultConfigProfile === false ? void 0 : input.defaultConfigProfile);
|
|
18773
18800
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -163,7 +163,7 @@ function providerFilePath(directory, name, source) {
|
|
|
163
163
|
}
|
|
164
164
|
return path.join(directory, `${name}.json`);
|
|
165
165
|
}
|
|
166
|
-
var FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, UnsafeNameError, InvalidProviderNameError;
|
|
166
|
+
var FILESYSTEM_COMPONENT_BYTES, MAX_PID_DIGITS, UUID_CHARS, ATOMIC_WRITE_OVERHEAD_BYTES, FARM_SWAP_OVERHEAD_BYTES, MAX_NAME_BYTES, FILE_NAME_PATTERN, FILE_NAME, FILE_NAME_RULE, STORED_NAME_RULE, FileNameSchema, StoredNameSchema, LABEL_FORBIDDEN, IDENTITY_LABEL_RULE, IdentityLabelSchema, UnsafeNameError, InvalidProviderNameError;
|
|
167
167
|
var init_names = __esm({
|
|
168
168
|
"src/config/names.ts"() {
|
|
169
169
|
"use strict";
|
|
@@ -180,6 +180,9 @@ var init_names = __esm({
|
|
|
180
180
|
STORED_NAME_RULE = `must be non-empty, at most ${String(MAX_NAME_BYTES)} bytes, not "." or "..", and contain no path separator or NUL`;
|
|
181
181
|
FileNameSchema = z.string().min(1).regex(FILE_NAME, FILE_NAME_RULE);
|
|
182
182
|
StoredNameSchema = z.string().min(1).max(MAX_NAME_BYTES).refine(isStoredName, STORED_NAME_RULE);
|
|
183
|
+
LABEL_FORBIDDEN = /[\p{Cc}\p{Zl}\p{Zp}]/u;
|
|
184
|
+
IDENTITY_LABEL_RULE = `must be non-empty single-line text of at most ${String(MAX_NAME_BYTES)} characters, with no control characters and no leading or trailing whitespace`;
|
|
185
|
+
IdentityLabelSchema = z.string().min(1).max(MAX_NAME_BYTES).refine((label) => label === label.trim() && !LABEL_FORBIDDEN.test(label), IDENTITY_LABEL_RULE);
|
|
183
186
|
UnsafeNameError = class extends CliError {
|
|
184
187
|
constructor(attemptedName, kind, rule = STORED_NAME_RULE, source) {
|
|
185
188
|
super(`${source === void 0 ? "" : `${source}: `}${JSON.stringify(attemptedName)} is not a valid ${kind} name: a name ${rule}.`);
|
|
@@ -1206,6 +1209,8 @@ var init_schema = __esm({
|
|
|
1206
1209
|
IdentitySchema = z3.strictObject({
|
|
1207
1210
|
$schema: z3.string().optional(),
|
|
1208
1211
|
name: FileNameSchema,
|
|
1212
|
+
/** What the identity is for, in the person's words, drawn beside its name in `identity list` and `show`, the launch banner and the statusline. Display only: the name stays the key for lookup, paths, keychain service names and pools. */
|
|
1213
|
+
label: IdentityLabelSchema.optional(),
|
|
1209
1214
|
defaultConfigProfile: StoredNameSchema.optional(),
|
|
1210
1215
|
/** The provider this identity exists for: a launch on the identity routes through it unless `--provider`, `--no-provider` or a cascade layer's `launch.provider` says otherwise. Its sessions run on the provider's credential, so the identity needs no stored login. */
|
|
1211
1216
|
provider: StoredNameSchema.optional(),
|
|
@@ -4740,7 +4745,7 @@ var init_package = __esm({
|
|
|
4740
4745
|
"package.json"() {
|
|
4741
4746
|
package_default = {
|
|
4742
4747
|
name: "agent-shim",
|
|
4743
|
-
version: "11.
|
|
4748
|
+
version: "11.81.0",
|
|
4744
4749
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
4745
4750
|
license: "MIT",
|
|
4746
4751
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -11566,9 +11571,15 @@ function movedRows(facts) {
|
|
|
11566
11571
|
}
|
|
11567
11572
|
return [];
|
|
11568
11573
|
}
|
|
11574
|
+
function identityText(facts) {
|
|
11575
|
+
if (facts.identity === void 0) {
|
|
11576
|
+
return "(none)";
|
|
11577
|
+
}
|
|
11578
|
+
return facts.identityLabel === void 0 ? facts.identity : `${facts.identity} (${facts.identityLabel})`;
|
|
11579
|
+
}
|
|
11569
11580
|
function decisionRows(facts) {
|
|
11570
11581
|
return [
|
|
11571
|
-
{ label: "identity", value: facts
|
|
11582
|
+
{ label: "identity", value: identityText(facts), detail: facts.identitySource },
|
|
11572
11583
|
...facts.pool === void 0 ? [] : [
|
|
11573
11584
|
{
|
|
11574
11585
|
label: "pool",
|
|
@@ -12097,6 +12108,7 @@ function decideLaunch(params, readOnly) {
|
|
|
12097
12108
|
return {
|
|
12098
12109
|
parsedArgv,
|
|
12099
12110
|
identityDecision,
|
|
12111
|
+
identityLabel: loadedIdentity?.config.label,
|
|
12100
12112
|
poolPick,
|
|
12101
12113
|
poolRanking,
|
|
12102
12114
|
lastRanAs,
|
|
@@ -12127,6 +12139,7 @@ function prepareLaunch(params) {
|
|
|
12127
12139
|
const rows = [
|
|
12128
12140
|
...decisionRows({
|
|
12129
12141
|
identity: identityDecision.name,
|
|
12142
|
+
identityLabel: decided.identityLabel,
|
|
12130
12143
|
identitySource: identityDecision.source,
|
|
12131
12144
|
pool: poolPick,
|
|
12132
12145
|
ranking: resolvedFlags.explain ? poolRanking : void 0,
|
|
@@ -16722,6 +16735,12 @@ function setIdentityProvider(paths, identityName, providerName) {
|
|
|
16722
16735
|
}
|
|
16723
16736
|
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { provider: providerName });
|
|
16724
16737
|
}
|
|
16738
|
+
function setIdentityLabel(paths, identityName, label) {
|
|
16739
|
+
if (!identityExists(paths, identityName)) {
|
|
16740
|
+
throw new IdentityNotFoundError(identityName);
|
|
16741
|
+
}
|
|
16742
|
+
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { label });
|
|
16743
|
+
}
|
|
16725
16744
|
function setAllowAmbientCredential(paths, identityName, allow) {
|
|
16726
16745
|
if (!identityExists(paths, identityName)) {
|
|
16727
16746
|
throw new IdentityNotFoundError(identityName);
|
|
@@ -18115,6 +18134,7 @@ init_providersStore();
|
|
|
18115
18134
|
|
|
18116
18135
|
// src/frontdoor/configSchemas.ts
|
|
18117
18136
|
init_schema();
|
|
18137
|
+
init_names();
|
|
18118
18138
|
init_statusline();
|
|
18119
18139
|
import { z as z30 } from "zod";
|
|
18120
18140
|
var RemovalConfirmationSchema = z30.boolean();
|
|
@@ -18141,6 +18161,7 @@ var mutationOutput = (kind, action) => z30.strictObject({ action: z30.literal(ac
|
|
|
18141
18161
|
var storedMutationOutput = (kind, action, value) => z30.strictObject({ action: z30.literal(action), kind: z30.literal(kind), name: z30.string(), value });
|
|
18142
18162
|
var IdentityValueSchema = z30.strictObject({
|
|
18143
18163
|
name: z30.string(),
|
|
18164
|
+
label: z30.string().optional(),
|
|
18144
18165
|
defaultConfigProfile: z30.string().optional(),
|
|
18145
18166
|
provider: z30.string().optional(),
|
|
18146
18167
|
allowAmbientCredential: z30.boolean(),
|
|
@@ -18161,6 +18182,8 @@ var ConfigNameInputSchema = z30.strictObject({ name: z30.string().min(1) });
|
|
|
18161
18182
|
var ConfigIdentityAddOutputSchema = storedMutationOutput("identity", "created", IdentityValueSchema);
|
|
18162
18183
|
var ConfigIdentitySetInputSchema = z30.strictObject({
|
|
18163
18184
|
name: z30.string().min(1),
|
|
18185
|
+
/** The identity's display label; `false` clears it. */
|
|
18186
|
+
label: z30.union([IdentityLabelSchema, z30.literal(false)]).optional(),
|
|
18164
18187
|
defaultConfigProfile: z30.union([z30.string().min(1), z30.literal(false)]).optional(),
|
|
18165
18188
|
/** The provider the identity exists for; `false` clears it. */
|
|
18166
18189
|
provider: z30.union([z30.string().min(1), z30.literal(false)]).optional(),
|
|
@@ -18307,6 +18330,7 @@ function identityValue(name, paths) {
|
|
|
18307
18330
|
}
|
|
18308
18331
|
return {
|
|
18309
18332
|
name: identity.name,
|
|
18333
|
+
...identity.label === void 0 ? {} : { label: identity.label },
|
|
18310
18334
|
...identity.defaultConfigProfile === void 0 ? {} : { defaultConfigProfile: identity.defaultConfigProfile },
|
|
18311
18335
|
...identity.provider === void 0 ? {} : { provider: identity.provider },
|
|
18312
18336
|
allowAmbientCredential: identity.allowAmbientCredential,
|
|
@@ -18341,9 +18365,9 @@ function createConfigApiRouter(deps) {
|
|
|
18341
18365
|
return { action: "created", kind: "identity", name: input.name, value: identityValue(input.name, paths) };
|
|
18342
18366
|
})
|
|
18343
18367
|
),
|
|
18344
|
-
set: route("/rest/config/identity/set", "Update an identity's default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
18368
|
+
set: route("/rest/config/identity/set", "Update an identity's label, default profile, provider, ambient-credential setting, credential or anchors").input(ConfigIdentitySetInputSchema).output(ConfigIdentitySetOutputSchema).handler(
|
|
18345
18369
|
({ input }) => guarded(() => {
|
|
18346
|
-
requireChange(input.defaultConfigProfile !== void 0 || input.provider !== void 0 || input.allowAmbientCredential !== void 0 || input.credential !== void 0 || input.anchors !== void 0, "defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
18370
|
+
requireChange(input.label !== void 0 || input.defaultConfigProfile !== void 0 || input.provider !== void 0 || input.allowAmbientCredential !== void 0 || input.credential !== void 0 || input.anchors !== void 0, "label, defaultConfigProfile, provider, allowAmbientCredential, credential or anchors");
|
|
18347
18371
|
if (!identityExists(paths, input.name)) {
|
|
18348
18372
|
throw new IdentityNotFoundError(input.name);
|
|
18349
18373
|
}
|
|
@@ -18353,6 +18377,9 @@ function createConfigApiRouter(deps) {
|
|
|
18353
18377
|
if (typeof input.provider === "string") {
|
|
18354
18378
|
requireProviderExists(paths, input.provider);
|
|
18355
18379
|
}
|
|
18380
|
+
if (input.label !== void 0) {
|
|
18381
|
+
setIdentityLabel(paths, input.name, input.label === false ? void 0 : input.label);
|
|
18382
|
+
}
|
|
18356
18383
|
if (input.defaultConfigProfile !== void 0) {
|
|
18357
18384
|
setDefaultConfigProfile(paths, input.name, input.defaultConfigProfile === false ? void 0 : input.defaultConfigProfile);
|
|
18358
18385
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -5412,6 +5412,7 @@ type GlobalConfig = z.infer<typeof GlobalConfigSchema>;
|
|
|
5412
5412
|
declare const IdentitySchema: z.ZodObject<{
|
|
5413
5413
|
$schema: z.ZodOptional<z.ZodString>;
|
|
5414
5414
|
name: z.ZodString;
|
|
5415
|
+
label: z.ZodOptional<z.ZodString>;
|
|
5415
5416
|
defaultConfigProfile: z.ZodOptional<z.ZodString>;
|
|
5416
5417
|
provider: z.ZodOptional<z.ZodString>;
|
|
5417
5418
|
allowAmbientCredential: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -9476,6 +9477,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
9476
9477
|
name: zod.ZodString;
|
|
9477
9478
|
value: zod.ZodObject<{
|
|
9478
9479
|
name: zod.ZodString;
|
|
9480
|
+
label: zod.ZodOptional<zod.ZodString>;
|
|
9479
9481
|
defaultConfigProfile: zod.ZodOptional<zod.ZodString>;
|
|
9480
9482
|
provider: zod.ZodOptional<zod.ZodString>;
|
|
9481
9483
|
allowAmbientCredential: zod.ZodBoolean;
|
|
@@ -9529,6 +9531,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
9529
9531
|
}, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
|
|
9530
9532
|
set: _orpc_server.DecoratedProcedure<DoorApiContext & object, IntersectPick<TInitialContext, $OutContext>, zod.ZodObject<{
|
|
9531
9533
|
name: zod.ZodString;
|
|
9534
|
+
label: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
9532
9535
|
defaultConfigProfile: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
9533
9536
|
provider: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
9534
9537
|
allowAmbientCredential: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -9583,6 +9586,7 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
|
|
|
9583
9586
|
name: zod.ZodString;
|
|
9584
9587
|
value: zod.ZodObject<{
|
|
9585
9588
|
name: zod.ZodString;
|
|
9589
|
+
label: zod.ZodOptional<zod.ZodString>;
|
|
9586
9590
|
defaultConfigProfile: zod.ZodOptional<zod.ZodString>;
|
|
9587
9591
|
provider: zod.ZodOptional<zod.ZodString>;
|
|
9588
9592
|
allowAmbientCredential: zod.ZodBoolean;
|
|
@@ -16548,6 +16552,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
16548
16552
|
name: zod.ZodString;
|
|
16549
16553
|
value: zod.ZodObject<{
|
|
16550
16554
|
name: zod.ZodString;
|
|
16555
|
+
label: zod.ZodOptional<zod.ZodString>;
|
|
16551
16556
|
defaultConfigProfile: zod.ZodOptional<zod.ZodString>;
|
|
16552
16557
|
provider: zod.ZodOptional<zod.ZodString>;
|
|
16553
16558
|
allowAmbientCredential: zod.ZodBoolean;
|
|
@@ -16601,6 +16606,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
16601
16606
|
}, zod_v4_core.$strict>, MergedErrorMap<$ErrorMap, TErrorMap>>;
|
|
16602
16607
|
set: _orpc_server.DecoratedProcedure<DoorApiContext & object, IntersectPick<TInitialContext, $OutContext>, zod.ZodObject<{
|
|
16603
16608
|
name: zod.ZodString;
|
|
16609
|
+
label: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
16604
16610
|
defaultConfigProfile: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
16605
16611
|
provider: zod.ZodOptional<zod.ZodUnion<readonly [zod.ZodString, zod.ZodLiteral<false>]>>;
|
|
16606
16612
|
allowAmbientCredential: zod.ZodOptional<zod.ZodBoolean>;
|
|
@@ -16655,6 +16661,7 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
16655
16661
|
name: zod.ZodString;
|
|
16656
16662
|
value: zod.ZodObject<{
|
|
16657
16663
|
name: zod.ZodString;
|
|
16664
|
+
label: zod.ZodOptional<zod.ZodString>;
|
|
16658
16665
|
defaultConfigProfile: zod.ZodOptional<zod.ZodString>;
|
|
16659
16666
|
provider: zod.ZodOptional<zod.ZodString>;
|
|
16660
16667
|
allowAmbientCredential: zod.ZodBoolean;
|
|
@@ -21074,6 +21081,7 @@ declare const ConfigIdentityAddOutputSchema: z.ZodObject<{
|
|
|
21074
21081
|
name: z.ZodString;
|
|
21075
21082
|
value: z.ZodObject<{
|
|
21076
21083
|
name: z.ZodString;
|
|
21084
|
+
label: z.ZodOptional<z.ZodString>;
|
|
21077
21085
|
defaultConfigProfile: z.ZodOptional<z.ZodString>;
|
|
21078
21086
|
provider: z.ZodOptional<z.ZodString>;
|
|
21079
21087
|
allowAmbientCredential: z.ZodBoolean;
|
|
@@ -21128,6 +21136,7 @@ declare const ConfigIdentityAddOutputSchema: z.ZodObject<{
|
|
|
21128
21136
|
/** `defaultConfigProfile: false` clears it; `credential: false` removes the credential block, returning the identity to its stored login. At least one field must be present. */
|
|
21129
21137
|
declare const ConfigIdentitySetInputSchema: z.ZodObject<{
|
|
21130
21138
|
name: z.ZodString;
|
|
21139
|
+
label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<false>]>>;
|
|
21131
21140
|
defaultConfigProfile: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<false>]>>;
|
|
21132
21141
|
provider: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<false>]>>;
|
|
21133
21142
|
allowAmbientCredential: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -21183,6 +21192,7 @@ declare const ConfigIdentitySetOutputSchema: z.ZodObject<{
|
|
|
21183
21192
|
name: z.ZodString;
|
|
21184
21193
|
value: z.ZodObject<{
|
|
21185
21194
|
name: z.ZodString;
|
|
21195
|
+
label: z.ZodOptional<z.ZodString>;
|
|
21186
21196
|
defaultConfigProfile: z.ZodOptional<z.ZodString>;
|
|
21187
21197
|
provider: z.ZodOptional<z.ZodString>;
|
|
21188
21198
|
allowAmbientCredential: z.ZodBoolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-shim",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.81.0",
|
|
4
4
|
"description": "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joseph Mearman <joseph@mearman.co.uk>",
|