agent-shim 11.79.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 +2 -2
- package/dist/cli.cjs +215 -87
- package/dist/index.cjs +161 -70
- package/dist/index.mjs +161 -70
- package/dist/types/index.d.ts +12 -0
- package/package.json +1 -1
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>",
|
|
@@ -7037,6 +7042,78 @@ var init_account = __esm({
|
|
|
7037
7042
|
}
|
|
7038
7043
|
});
|
|
7039
7044
|
|
|
7045
|
+
// src/usage/accountDescription.ts
|
|
7046
|
+
function describeAccountOrganisation(account) {
|
|
7047
|
+
const parts = [account.organizationName, account.organizationType].filter((part) => part !== void 0);
|
|
7048
|
+
return parts.length === 0 ? void 0 : parts.join(", ");
|
|
7049
|
+
}
|
|
7050
|
+
var init_accountDescription = __esm({
|
|
7051
|
+
"src/usage/accountDescription.ts"() {
|
|
7052
|
+
"use strict";
|
|
7053
|
+
}
|
|
7054
|
+
});
|
|
7055
|
+
|
|
7056
|
+
// src/identityAccounts.ts
|
|
7057
|
+
function readIdentityAccount(fs14, identitiesDir, identity) {
|
|
7058
|
+
try {
|
|
7059
|
+
const account = readAccountMetadata(fs14, identitiesDir, identity);
|
|
7060
|
+
return account === void 0 ? void 0 : { account };
|
|
7061
|
+
} catch (error) {
|
|
7062
|
+
if (error instanceof AccountMetadataError) {
|
|
7063
|
+
return { problem: error.message };
|
|
7064
|
+
}
|
|
7065
|
+
throw error;
|
|
7066
|
+
}
|
|
7067
|
+
}
|
|
7068
|
+
function summariseIdentityAccount(account) {
|
|
7069
|
+
const summary = {
|
|
7070
|
+
...account.emailAddress === void 0 ? {} : { emailAddress: account.emailAddress },
|
|
7071
|
+
...account.organizationName === void 0 ? {} : { organizationName: account.organizationName },
|
|
7072
|
+
...account.organizationType === void 0 ? {} : { organizationType: account.organizationType },
|
|
7073
|
+
...account.organizationRole === void 0 ? {} : { organizationRole: account.organizationRole },
|
|
7074
|
+
...account.billingType === void 0 ? {} : { billingType: account.billingType },
|
|
7075
|
+
...account.seatTier === void 0 ? {} : { seatTier: account.seatTier }
|
|
7076
|
+
};
|
|
7077
|
+
return Object.keys(summary).length === 0 ? void 0 : summary;
|
|
7078
|
+
}
|
|
7079
|
+
function loginKeyOf(account) {
|
|
7080
|
+
return account.accountUuid === void 0 ? void 0 : JSON.stringify([account.accountUuid, account.organizationUuid ?? null]);
|
|
7081
|
+
}
|
|
7082
|
+
function collectByLogin(items, loginOf) {
|
|
7083
|
+
const groups = /* @__PURE__ */ new Map();
|
|
7084
|
+
for (const item of items) {
|
|
7085
|
+
const key = loginOf(item) ?? /* @__PURE__ */ Symbol("no login");
|
|
7086
|
+
const group = groups.get(key);
|
|
7087
|
+
if (group === void 0) {
|
|
7088
|
+
groups.set(key, [item]);
|
|
7089
|
+
} else {
|
|
7090
|
+
group.push(item);
|
|
7091
|
+
}
|
|
7092
|
+
}
|
|
7093
|
+
return [...groups.values()];
|
|
7094
|
+
}
|
|
7095
|
+
function groupSharedLogins(items, loginOf) {
|
|
7096
|
+
return collectByLogin(items, loginOf).filter((group) => group.length > 1);
|
|
7097
|
+
}
|
|
7098
|
+
function joinNames(names) {
|
|
7099
|
+
const last = names.at(-1);
|
|
7100
|
+
return names.length < 2 || last === void 0 ? names.join("") : `${names.slice(0, -1).join(", ")} and ${last}`;
|
|
7101
|
+
}
|
|
7102
|
+
function describeAccountHolder(summary) {
|
|
7103
|
+
const organisation = describeAccountOrganisation(summary);
|
|
7104
|
+
if (summary.emailAddress === void 0) {
|
|
7105
|
+
return organisation;
|
|
7106
|
+
}
|
|
7107
|
+
return organisation === void 0 ? summary.emailAddress : `${summary.emailAddress} (${organisation})`;
|
|
7108
|
+
}
|
|
7109
|
+
var init_identityAccounts = __esm({
|
|
7110
|
+
"src/identityAccounts.ts"() {
|
|
7111
|
+
"use strict";
|
|
7112
|
+
init_account();
|
|
7113
|
+
init_accountDescription();
|
|
7114
|
+
}
|
|
7115
|
+
});
|
|
7116
|
+
|
|
7040
7117
|
// src/usage/rateLimit.ts
|
|
7041
7118
|
function epochSecondsToIso(value) {
|
|
7042
7119
|
if (value === void 0) {
|
|
@@ -7404,6 +7481,9 @@ function assessRefusedNested(member, nested, nowMs) {
|
|
|
7404
7481
|
};
|
|
7405
7482
|
}
|
|
7406
7483
|
function assess(member, nowMs) {
|
|
7484
|
+
if (member.sameLoginAs !== void 0) {
|
|
7485
|
+
return { candidate: { identity: member.identity, class: "ineligible", plan: planOf(member.account), reasons: [`same login as ${member.sameLoginAs}`] } };
|
|
7486
|
+
}
|
|
7407
7487
|
const nested = member.nested;
|
|
7408
7488
|
if (nested === void 0) {
|
|
7409
7489
|
return assessIdentity(member, nowMs);
|
|
@@ -7876,6 +7956,29 @@ function loadPoolMembers(fs14, paths, identities, nowMs) {
|
|
|
7876
7956
|
}
|
|
7877
7957
|
});
|
|
7878
7958
|
}
|
|
7959
|
+
function snapshotAgeKey(member) {
|
|
7960
|
+
return member.snapshot === void 0 ? Number.NEGATIVE_INFINITY : Date.parse(member.snapshot.updatedAt);
|
|
7961
|
+
}
|
|
7962
|
+
function collapseSharedLogins(members) {
|
|
7963
|
+
const groups = groupSharedLogins(members, (member) => member.nested === void 0 && member.account !== void 0 ? loginKeyOf(member.account) : void 0);
|
|
7964
|
+
const representativeOf = /* @__PURE__ */ new Map();
|
|
7965
|
+
for (const group of groups) {
|
|
7966
|
+
const representative = group.reduce((freshest, member) => snapshotAgeKey(member) > snapshotAgeKey(freshest) ? member : freshest);
|
|
7967
|
+
for (const member of group) {
|
|
7968
|
+
if (member !== representative) {
|
|
7969
|
+
representativeOf.set(member, representative.identity);
|
|
7970
|
+
}
|
|
7971
|
+
}
|
|
7972
|
+
}
|
|
7973
|
+
return members.map((member) => {
|
|
7974
|
+
const representative = representativeOf.get(member);
|
|
7975
|
+
return representative === void 0 ? member : { ...member, sameLoginAs: representative };
|
|
7976
|
+
});
|
|
7977
|
+
}
|
|
7978
|
+
function stickyOnRepresentative(sticky, members) {
|
|
7979
|
+
const twin = sticky === void 0 ? void 0 : members.find((member) => member.identity === sticky.identity && member.sameLoginAs !== void 0);
|
|
7980
|
+
return sticky === void 0 || twin?.sameLoginAs === void 0 ? sticky : { ...sticky, identity: twin.sameLoginAs };
|
|
7981
|
+
}
|
|
7879
7982
|
function rankPoolGraph(input) {
|
|
7880
7983
|
return rankNamedPool(input, input.poolName, [], input.sticky);
|
|
7881
7984
|
}
|
|
@@ -7903,13 +8006,15 @@ function rankNamedPool(input, poolName, stack, sticky) {
|
|
|
7903
8006
|
members.push(typeof entry === "string" ? nested.member : { ...nested.member, policy: entry.when });
|
|
7904
8007
|
missing.push(...nested.missing);
|
|
7905
8008
|
}
|
|
8009
|
+
const collapsed = collapseSharedLogins(members);
|
|
8010
|
+
const stickyPick = stickyOnRepresentative(sticky, collapsed);
|
|
7906
8011
|
const ranking = rankPool({
|
|
7907
|
-
members,
|
|
8012
|
+
members: collapsed,
|
|
7908
8013
|
nowMs: input.nowMs,
|
|
7909
8014
|
resuming: input.resuming,
|
|
7910
8015
|
...input.resumeContextTokens === void 0 ? {} : { resumeContextTokens: input.resumeContextTokens },
|
|
7911
8016
|
...input.committedContextTokens === void 0 ? {} : { committedContextTokens: input.committedContextTokens },
|
|
7912
|
-
...
|
|
8017
|
+
...stickyPick === void 0 ? {} : { sticky: stickyPick },
|
|
7913
8018
|
...pool.preference === void 0 ? {} : { preference: pool.preference }
|
|
7914
8019
|
});
|
|
7915
8020
|
return { ranking, missing };
|
|
@@ -7997,6 +8102,7 @@ var init_poolPick = __esm({
|
|
|
7997
8102
|
init_cliError();
|
|
7998
8103
|
init_identity();
|
|
7999
8104
|
init_schema();
|
|
8105
|
+
init_identityAccounts();
|
|
8000
8106
|
init_account();
|
|
8001
8107
|
init_pick();
|
|
8002
8108
|
init_read();
|
|
@@ -11493,9 +11599,15 @@ function movedRows(facts) {
|
|
|
11493
11599
|
}
|
|
11494
11600
|
return [];
|
|
11495
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
|
+
}
|
|
11496
11608
|
function decisionRows(facts) {
|
|
11497
11609
|
return [
|
|
11498
|
-
{ label: "identity", value: facts
|
|
11610
|
+
{ label: "identity", value: identityText(facts), detail: facts.identitySource },
|
|
11499
11611
|
...facts.pool === void 0 ? [] : [
|
|
11500
11612
|
{
|
|
11501
11613
|
label: "pool",
|
|
@@ -12021,6 +12133,7 @@ function decideLaunch(params, readOnly) {
|
|
|
12021
12133
|
return {
|
|
12022
12134
|
parsedArgv,
|
|
12023
12135
|
identityDecision,
|
|
12136
|
+
identityLabel: loadedIdentity?.config.label,
|
|
12024
12137
|
poolPick,
|
|
12025
12138
|
poolRanking,
|
|
12026
12139
|
lastRanAs,
|
|
@@ -12051,6 +12164,7 @@ function prepareLaunch(params) {
|
|
|
12051
12164
|
const rows = [
|
|
12052
12165
|
...decisionRows({
|
|
12053
12166
|
identity: identityDecision.name,
|
|
12167
|
+
identityLabel: decided.identityLabel,
|
|
12054
12168
|
identitySource: identityDecision.source,
|
|
12055
12169
|
pool: poolPick,
|
|
12056
12170
|
ranking: resolvedFlags.explain ? poolRanking : void 0,
|
|
@@ -17036,6 +17150,12 @@ function setIdentityProvider(paths, identityName, providerName) {
|
|
|
17036
17150
|
}
|
|
17037
17151
|
return applyPatch(identityJsonPath(paths, identityName), IdentitySchema, { provider: providerName });
|
|
17038
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
|
+
}
|
|
17039
17159
|
function setAllowAmbientCredential(paths, identityName, allow) {
|
|
17040
17160
|
if (!identityExists(paths, identityName)) {
|
|
17041
17161
|
throw new IdentityNotFoundError(identityName);
|
|
@@ -17084,65 +17204,7 @@ init_realPorts();
|
|
|
17084
17204
|
var import_node_fs10 = __toESM(require("node:fs"), 1);
|
|
17085
17205
|
var import_node_path29 = __toESM(require("node:path"), 1);
|
|
17086
17206
|
init_signIn();
|
|
17087
|
-
|
|
17088
|
-
// src/identityAccounts.ts
|
|
17089
|
-
init_account();
|
|
17090
|
-
|
|
17091
|
-
// src/usage/accountDescription.ts
|
|
17092
|
-
function describeAccountOrganisation(account) {
|
|
17093
|
-
const parts = [account.organizationName, account.organizationType].filter((part) => part !== void 0);
|
|
17094
|
-
return parts.length === 0 ? void 0 : parts.join(", ");
|
|
17095
|
-
}
|
|
17096
|
-
|
|
17097
|
-
// src/identityAccounts.ts
|
|
17098
|
-
function readIdentityAccount(fs14, identitiesDir, identity) {
|
|
17099
|
-
try {
|
|
17100
|
-
const account = readAccountMetadata(fs14, identitiesDir, identity);
|
|
17101
|
-
return account === void 0 ? void 0 : { account };
|
|
17102
|
-
} catch (error) {
|
|
17103
|
-
if (error instanceof AccountMetadataError) {
|
|
17104
|
-
return { problem: error.message };
|
|
17105
|
-
}
|
|
17106
|
-
throw error;
|
|
17107
|
-
}
|
|
17108
|
-
}
|
|
17109
|
-
function summariseIdentityAccount(account) {
|
|
17110
|
-
const summary = {
|
|
17111
|
-
...account.emailAddress === void 0 ? {} : { emailAddress: account.emailAddress },
|
|
17112
|
-
...account.organizationName === void 0 ? {} : { organizationName: account.organizationName },
|
|
17113
|
-
...account.organizationType === void 0 ? {} : { organizationType: account.organizationType },
|
|
17114
|
-
...account.organizationRole === void 0 ? {} : { organizationRole: account.organizationRole },
|
|
17115
|
-
...account.billingType === void 0 ? {} : { billingType: account.billingType },
|
|
17116
|
-
...account.seatTier === void 0 ? {} : { seatTier: account.seatTier }
|
|
17117
|
-
};
|
|
17118
|
-
return Object.keys(summary).length === 0 ? void 0 : summary;
|
|
17119
|
-
}
|
|
17120
|
-
function loginKeyOf(account) {
|
|
17121
|
-
return account.accountUuid === void 0 ? void 0 : JSON.stringify([account.accountUuid, account.organizationUuid ?? null]);
|
|
17122
|
-
}
|
|
17123
|
-
function collectByLogin(items, loginOf) {
|
|
17124
|
-
const groups = /* @__PURE__ */ new Map();
|
|
17125
|
-
for (const item of items) {
|
|
17126
|
-
const key = loginOf(item) ?? /* @__PURE__ */ Symbol("no login");
|
|
17127
|
-
const group = groups.get(key);
|
|
17128
|
-
if (group === void 0) {
|
|
17129
|
-
groups.set(key, [item]);
|
|
17130
|
-
} else {
|
|
17131
|
-
group.push(item);
|
|
17132
|
-
}
|
|
17133
|
-
}
|
|
17134
|
-
return [...groups.values()];
|
|
17135
|
-
}
|
|
17136
|
-
function groupSharedLogins(items, loginOf) {
|
|
17137
|
-
return collectByLogin(items, loginOf).filter((group) => group.length > 1);
|
|
17138
|
-
}
|
|
17139
|
-
function describeAccountHolder(summary) {
|
|
17140
|
-
const organisation = describeAccountOrganisation(summary);
|
|
17141
|
-
if (summary.emailAddress === void 0) {
|
|
17142
|
-
return organisation;
|
|
17143
|
-
}
|
|
17144
|
-
return organisation === void 0 ? summary.emailAddress : `${summary.emailAddress} (${organisation})`;
|
|
17145
|
-
}
|
|
17207
|
+
init_identityAccounts();
|
|
17146
17208
|
|
|
17147
17209
|
// src/codex/siwcStore.ts
|
|
17148
17210
|
var import_zod26 = require("zod");
|
|
@@ -17496,6 +17558,27 @@ init_providerAliases();
|
|
|
17496
17558
|
init_providersStore();
|
|
17497
17559
|
init_guard();
|
|
17498
17560
|
init_identity();
|
|
17561
|
+
|
|
17562
|
+
// src/poolSharedLogins.ts
|
|
17563
|
+
init_identityAccounts();
|
|
17564
|
+
init_identity();
|
|
17565
|
+
function sharedLoginMembers(members, accountOf) {
|
|
17566
|
+
const known = members.flatMap((identity) => {
|
|
17567
|
+
const account = poolNameOf(identity) === void 0 ? accountOf(identity) : void 0;
|
|
17568
|
+
return account === void 0 ? [] : [{ identity, account }];
|
|
17569
|
+
});
|
|
17570
|
+
return groupSharedLogins(known, (entry) => loginKeyOf(entry.account)).flatMap((group) => {
|
|
17571
|
+
const first = group[0];
|
|
17572
|
+
return first === void 0 ? [] : [{ members: group.map((entry) => entry.identity), account: first.account }];
|
|
17573
|
+
});
|
|
17574
|
+
}
|
|
17575
|
+
function describeSharedLoginMembers(poolName, shared) {
|
|
17576
|
+
const summary = summariseIdentityAccount(shared.account);
|
|
17577
|
+
const holder = summary === void 0 ? void 0 : describeAccountHolder(summary);
|
|
17578
|
+
return `Pool "${poolName}" lists ${joinNames(shared.members)}, which hold the same login${holder === void 0 ? "" : ` (${holder})`}, so they share one quota window. A launch ranks them as one candidate and never fails over from one to another; keep one of them in the pool.`;
|
|
17579
|
+
}
|
|
17580
|
+
|
|
17581
|
+
// src/doctorReport.ts
|
|
17499
17582
|
init_extends();
|
|
17500
17583
|
var DOCTOR_SEVERITIES = ["pass", "warn", "fail"];
|
|
17501
17584
|
var DOCTOR_SECTIONS = [
|
|
@@ -17518,10 +17601,6 @@ var DOCTOR_SECTIONS = [
|
|
|
17518
17601
|
"frontdoor",
|
|
17519
17602
|
"models"
|
|
17520
17603
|
];
|
|
17521
|
-
function joinNames(names) {
|
|
17522
|
-
const last = names.at(-1);
|
|
17523
|
-
return names.length < 2 || last === void 0 ? names.join("") : `${names.slice(0, -1).join(", ")} and ${last}`;
|
|
17524
|
-
}
|
|
17525
17604
|
function refinePathShadow(status, ownExecutablePath, realpath) {
|
|
17526
17605
|
if (status.status !== "shadowed") {
|
|
17527
17606
|
return status;
|
|
@@ -17834,6 +17913,7 @@ function runDoctor(params) {
|
|
|
17834
17913
|
}
|
|
17835
17914
|
const validatedGlobalConfig = params.globalConfig.raw === void 0 ? void 0 : validateJson(GlobalConfigSchema, params.globalConfig);
|
|
17836
17915
|
const pools = validatedGlobalConfig?.ok === true ? validatedGlobalConfig.data.pools ?? {} : {};
|
|
17916
|
+
const accountByIdentity = new Map(params.identities.flatMap((entry) => validIdentityNames.has(entry.name) && entry.account !== void 0 ? [[entry.name, entry.account]] : []));
|
|
17837
17917
|
for (const [poolName, pool] of Object.entries(pools)) {
|
|
17838
17918
|
const missing = pool.identities.filter((member) => poolNameOf(poolMemberIdentity(member)) === void 0 && !validIdentityNames.has(poolMemberIdentity(member)));
|
|
17839
17919
|
const undefinedPools = pool.identities.flatMap((member) => {
|
|
@@ -17849,6 +17929,9 @@ function runDoctor(params) {
|
|
|
17849
17929
|
];
|
|
17850
17930
|
push("pool", "fail", `Pool "${poolName}" names ${problems.join(" and ")}.`, poolName);
|
|
17851
17931
|
}
|
|
17932
|
+
for (const shared of sharedLoginMembers(pool.identities.map(poolMemberIdentity), (identityName) => accountByIdentity.get(identityName))) {
|
|
17933
|
+
push("pool", "warn", describeSharedLoginMembers(poolName, shared), poolName);
|
|
17934
|
+
}
|
|
17852
17935
|
}
|
|
17853
17936
|
const reportedCycles = /* @__PURE__ */ new Set();
|
|
17854
17937
|
for (const poolName of Object.keys(pools).sort()) {
|
|
@@ -18467,6 +18550,7 @@ init_providersStore();
|
|
|
18467
18550
|
// src/frontdoor/configSchemas.ts
|
|
18468
18551
|
var import_zod30 = require("zod");
|
|
18469
18552
|
init_schema();
|
|
18553
|
+
init_names();
|
|
18470
18554
|
init_statusline();
|
|
18471
18555
|
var RemovalConfirmationSchema = import_zod30.z.boolean();
|
|
18472
18556
|
var CredentialWriteSchema = (targets) => import_zod30.z.strictObject({
|
|
@@ -18492,6 +18576,7 @@ var mutationOutput = (kind, action) => import_zod30.z.strictObject({ action: imp
|
|
|
18492
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 });
|
|
18493
18577
|
var IdentityValueSchema = import_zod30.z.strictObject({
|
|
18494
18578
|
name: import_zod30.z.string(),
|
|
18579
|
+
label: import_zod30.z.string().optional(),
|
|
18495
18580
|
defaultConfigProfile: import_zod30.z.string().optional(),
|
|
18496
18581
|
provider: import_zod30.z.string().optional(),
|
|
18497
18582
|
allowAmbientCredential: import_zod30.z.boolean(),
|
|
@@ -18512,6 +18597,8 @@ var ConfigNameInputSchema = import_zod30.z.strictObject({ name: import_zod30.z.s
|
|
|
18512
18597
|
var ConfigIdentityAddOutputSchema = storedMutationOutput("identity", "created", IdentityValueSchema);
|
|
18513
18598
|
var ConfigIdentitySetInputSchema = import_zod30.z.strictObject({
|
|
18514
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(),
|
|
18515
18602
|
defaultConfigProfile: import_zod30.z.union([import_zod30.z.string().min(1), import_zod30.z.literal(false)]).optional(),
|
|
18516
18603
|
/** The provider the identity exists for; `false` clears it. */
|
|
18517
18604
|
provider: import_zod30.z.union([import_zod30.z.string().min(1), import_zod30.z.literal(false)]).optional(),
|
|
@@ -18658,6 +18745,7 @@ function identityValue(name, paths) {
|
|
|
18658
18745
|
}
|
|
18659
18746
|
return {
|
|
18660
18747
|
name: identity.name,
|
|
18748
|
+
...identity.label === void 0 ? {} : { label: identity.label },
|
|
18661
18749
|
...identity.defaultConfigProfile === void 0 ? {} : { defaultConfigProfile: identity.defaultConfigProfile },
|
|
18662
18750
|
...identity.provider === void 0 ? {} : { provider: identity.provider },
|
|
18663
18751
|
allowAmbientCredential: identity.allowAmbientCredential,
|
|
@@ -18692,9 +18780,9 @@ function createConfigApiRouter(deps) {
|
|
|
18692
18780
|
return { action: "created", kind: "identity", name: input.name, value: identityValue(input.name, paths) };
|
|
18693
18781
|
})
|
|
18694
18782
|
),
|
|
18695
|
-
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(
|
|
18696
18784
|
({ input }) => guarded(() => {
|
|
18697
|
-
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");
|
|
18698
18786
|
if (!identityExists(paths, input.name)) {
|
|
18699
18787
|
throw new IdentityNotFoundError(input.name);
|
|
18700
18788
|
}
|
|
@@ -18704,6 +18792,9 @@ function createConfigApiRouter(deps) {
|
|
|
18704
18792
|
if (typeof input.provider === "string") {
|
|
18705
18793
|
requireProviderExists(paths, input.provider);
|
|
18706
18794
|
}
|
|
18795
|
+
if (input.label !== void 0) {
|
|
18796
|
+
setIdentityLabel(paths, input.name, input.label === false ? void 0 : input.label);
|
|
18797
|
+
}
|
|
18707
18798
|
if (input.defaultConfigProfile !== void 0) {
|
|
18708
18799
|
setDefaultConfigProfile(paths, input.name, input.defaultConfigProfile === false ? void 0 : input.defaultConfigProfile);
|
|
18709
18800
|
}
|