pilotswarm 0.5.48 → 0.5.49
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/package.json +2 -2
- package/ui/core/src/controller.js +19 -3
- package/ui/core/src/selectors.js +41 -4
- package/ui/react/src/web-app.js +52 -26
- package/web/dist/assets/{abnfDiagram-VRR7QNED-6rYy4Wj8.js → abnfDiagram-VRR7QNED-CXF6f3n3.js} +1 -1
- package/web/dist/assets/{arc-CrRZ1Za7.js → arc-MlDVINID.js} +1 -1
- package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-CPe2QuQL.js → architectureDiagram-ZJ3FMSHR-Bdz1J9H-.js} +1 -1
- package/web/dist/assets/{blockDiagram-677ZJIJ3-DfT6vWOg.js → blockDiagram-677ZJIJ3-tO706-rr.js} +1 -1
- package/web/dist/assets/{c4Diagram-LMCZKHZV-BO-VXBT8.js → c4Diagram-LMCZKHZV-BuZrMrYZ.js} +1 -1
- package/web/dist/assets/channel-moQWQGwr.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-nq8p0xwC.js → chunk-2Q5K7J3B-BWWIPnCk.js} +1 -1
- package/web/dist/assets/{chunk-32BRIVSS-DstJjLIA.js → chunk-32BRIVSS-TyL8x2Q5.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-Bq0MPH_Q.js → chunk-5VM5RSS4-ZTwZyN5B.js} +1 -1
- package/web/dist/assets/{chunk-EX3LRPZG-BPofXJWl.js → chunk-EX3LRPZG-CjWsKz70.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-BBr7v6mo.js → chunk-JWPE2WC7-BNQrzsa3.js} +1 -1
- package/web/dist/assets/{chunk-MOJQB5TN-DA7ca6Jr.js → chunk-MOJQB5TN-B51xJi0l.js} +1 -1
- package/web/dist/assets/{chunk-RYQCIY6F-fdXZe4nw.js → chunk-RYQCIY6F-BCdsh9nc.js} +1 -1
- package/web/dist/assets/{chunk-V7JOEXUC-BSATEdk2.js → chunk-V7JOEXUC-C7FFxC7C.js} +1 -1
- package/web/dist/assets/{chunk-VR4S4FIN-RR27eQST.js → chunk-VR4S4FIN-DWoFV0Pb.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-Bh8VimxP.js → chunk-XXDRQBXY-plM48yQb.js} +1 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-33Sv-tmv.js +1 -0
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-33Sv-tmv.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-eP239MQJ.js → cose-bilkent-JH36ORCC-cPPsd8jq.js} +1 -1
- package/web/dist/assets/{cynefin-VYW2F7L2-Sb8l4Vm6.js → cynefin-VYW2F7L2-DLoMRcB-.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-TSTJHNR4-BrWMkhw9.js → cynefinDiagram-TSTJHNR4-DbxB1EcR.js} +1 -1
- package/web/dist/assets/{dagre-VKFMJZFB-DT5kNKEx.js → dagre-VKFMJZFB-Cl5J3v7U.js} +1 -1
- package/web/dist/assets/{diagram-FQU43EPY-Dy0Bxyod.js → diagram-FQU43EPY-C_5l69HJ.js} +1 -1
- package/web/dist/assets/{diagram-G47NLZAW-R_yWa2-6.js → diagram-G47NLZAW-B_nxM69x.js} +1 -1
- package/web/dist/assets/{diagram-NH7WQ7WH-BV2cGmgX.js → diagram-NH7WQ7WH-BogLLCcM.js} +1 -1
- package/web/dist/assets/{diagram-OA4YK3LP-auayiDmq.js → diagram-OA4YK3LP-1HZ1DJgO.js} +1 -1
- package/web/dist/assets/{diagram-WEI45ONY-CE7bHIYE.js → diagram-WEI45ONY-CZ9akwtz.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-CCIWWBDH-C3SMk6Uu.js → ebnfDiagram-CCIWWBDH-CCg2iaF2.js} +1 -1
- package/web/dist/assets/{erDiagram-Q63AITRT-CnTs6X2D.js → erDiagram-Q63AITRT-BCYw6hLk.js} +1 -1
- package/web/dist/assets/{flowDiagram-23GEKE2U-DobYm7mq.js → flowDiagram-23GEKE2U-B3O-UeAj.js} +1 -1
- package/web/dist/assets/{ganttDiagram-NO4QXBWP-AkTQtAsR.js → ganttDiagram-NO4QXBWP-GJzz1tR4.js} +1 -1
- package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-CpLWsqgx.js → gitGraphDiagram-IHSO6WYX-Ch1cfaOe.js} +1 -1
- package/web/dist/assets/{index-BCzNnCl0.js → index-wYKm3Bnl.js} +2 -2
- package/web/dist/assets/{infoDiagram-FWYZ7A6U-ByzTSgj_.js → infoDiagram-FWYZ7A6U-Bjo2ImAx.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-CaL9Wi8i.js → ishikawaDiagram-FXEZZL3T-Cknf936W.js} +1 -1
- package/web/dist/assets/{journeyDiagram-5HDEW3XC-BillueZJ.js → journeyDiagram-5HDEW3XC-Chy2vDKP.js} +1 -1
- package/web/dist/assets/{kanban-definition-HUTT4EX6-DI_IRVWQ.js → kanban-definition-HUTT4EX6-BL4WMBwi.js} +1 -1
- package/web/dist/assets/{linear-Cabaq-RD.js → linear-B8XSGnZ8.js} +1 -1
- package/web/dist/assets/{mermaid.core-D8KnBjxP.js → mermaid.core-CFdkmvEY.js} +4 -4
- package/web/dist/assets/{mindmap-definition-LN4V7U3C-Bl7FpPwk.js → mindmap-definition-LN4V7U3C-CHOBIkSR.js} +1 -1
- package/web/dist/assets/{papaparse.min-CcjjKk0h.js → papaparse.min-DnG1sqyK.js} +1 -1
- package/web/dist/assets/{pegDiagram-2B236MQR-CmsG2owD.js → pegDiagram-2B236MQR-VuMpZEdm.js} +1 -1
- package/web/dist/assets/{pieDiagram-ENE6RG2P-CLA_mcHl.js → pieDiagram-ENE6RG2P-CkFTLWPp.js} +1 -1
- package/web/dist/assets/{pilotswarm-DMCBXi5A.js → pilotswarm-CLJw14xm.js} +46 -46
- package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-hT9bnnUG.js → quadrantDiagram-ABIIQ3AL-B74MHjsI.js} +1 -1
- package/web/dist/assets/{railroadDiagram-RFXS5EU6-CNC0kFW6.js → railroadDiagram-RFXS5EU6-CwcT-BI1.js} +1 -1
- package/web/dist/assets/{requirementDiagram-TGXJPOKE-C-nSthhK.js → requirementDiagram-TGXJPOKE-CfV8rmaQ.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-HTMAVEWB-C5JdV5bI.js → sankeyDiagram-HTMAVEWB-BECA4LLx.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-BMKBxKk9.js → sequenceDiagram-DBY2YBRQ-C80kbBkw.js} +1 -1
- package/web/dist/assets/{sizeCapture-X5ZJPWSS-CbwNw-TR.js → sizeCapture-X5ZJPWSS-BgdLZC94.js} +1 -1
- package/web/dist/assets/{stateDiagram-2N3HPSRC-ChvGrUa_.js → stateDiagram-2N3HPSRC-DY_mnuOT.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-Dw3VhZ5V.js +1 -0
- package/web/dist/assets/{swimlanes-5IMT3BWC-D9Uzkbi7.js → swimlanes-5IMT3BWC-9m8kjDvw.js} +2 -2
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-DoOI0AiK.js +8 -0
- package/web/dist/assets/{timeline-definition-FHXFAJF6-ctFEfgUp.js → timeline-definition-FHXFAJF6-CRDqu4Os.js} +1 -1
- package/web/dist/assets/{vennDiagram-L72KCM5P-DGrJhlyF.js → vennDiagram-L72KCM5P-B2KNeFvN.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-EHGQE667-BGqtZ8dQ.js → wardleyDiagram-EHGQE667-DC0vN3Ub.js} +1 -1
- package/web/dist/assets/{xychartDiagram-FW5EYKEG-DAXXs9xC.js → xychartDiagram-FW5EYKEG-DOY6Rwu4.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/dist/assets/channel-HtOTPdHg.js +0 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-C2P3dws0.js +0 -1
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-C2P3dws0.js +0 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-DLbEwVA2.js +0 -1
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-DMzhdO6y.js +0 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pilotswarm",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.49",
|
|
4
4
|
"description": "PilotSwarm application package: terminal UI, browser portal + Web API server, and MCP server — one install, three bins.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"ink": "^6.8.0",
|
|
82
82
|
"jose": "^6.2.2",
|
|
83
83
|
"mermaid": "^11.16.0",
|
|
84
|
-
"pilotswarm-sdk": "0.5.
|
|
84
|
+
"pilotswarm-sdk": "0.5.49",
|
|
85
85
|
"react": "^19.2.4",
|
|
86
86
|
"react-dom": "^19.2.4",
|
|
87
87
|
"ws": "^8.18.2"
|
|
@@ -3455,6 +3455,12 @@ export class PilotSwarmUiController {
|
|
|
3455
3455
|
});
|
|
3456
3456
|
}
|
|
3457
3457
|
|
|
3458
|
+
/** Does the selected provider type authenticate as the worker itself? */
|
|
3459
|
+
_adminProviderTypeUsesWorkloadIdentity(typeId) {
|
|
3460
|
+
const types = selectAdminConsole(this.getState()).modelProviders?.providerTypes || [];
|
|
3461
|
+
return types.find((type) => type.id === typeId)?.usesWorkloadIdentity === true;
|
|
3462
|
+
}
|
|
3463
|
+
|
|
3458
3464
|
cycleAdminProviderCreateType() {
|
|
3459
3465
|
const providers = selectAdminConsole(this.getState()).modelProviders;
|
|
3460
3466
|
const create = this.getState().admin?.modelProviders?.create;
|
|
@@ -3512,16 +3518,26 @@ export class PilotSwarmUiController {
|
|
|
3512
3518
|
async saveAdminProviderCreate() {
|
|
3513
3519
|
const create = this.getState().admin?.modelProviders?.create;
|
|
3514
3520
|
if (!create?.editing || create.saving || create.stage !== "credential") return;
|
|
3521
|
+
// A workload-identity type has no key to type. The stage is still
|
|
3522
|
+
// reached — it is where the person confirms — but the draft is empty
|
|
3523
|
+
// by design, so demanding a credential would make the type
|
|
3524
|
+
// unusable from this screen.
|
|
3525
|
+
const workloadIdentity = this._adminProviderTypeUsesWorkloadIdentity(create.typeId);
|
|
3515
3526
|
const credential = String(create.draft || "").trim();
|
|
3516
|
-
if (!credential) {
|
|
3527
|
+
if (!credential && !workloadIdentity) {
|
|
3517
3528
|
this.dispatch({ type: "admin/modelProviders/createFailed", error: "Enter a provider credential." });
|
|
3518
3529
|
return;
|
|
3519
3530
|
}
|
|
3520
3531
|
const input = {
|
|
3521
3532
|
name: create.name,
|
|
3522
3533
|
type: create.typeId,
|
|
3523
|
-
credentials:
|
|
3524
|
-
|
|
3534
|
+
credentials: workloadIdentity
|
|
3535
|
+
? { kind: "workloadIdentity" }
|
|
3536
|
+
: /github/i.test(create.typeId) ? { githubToken: credential } : { apiKey: credential },
|
|
3537
|
+
// It runs on the worker's identity, which belongs to the
|
|
3538
|
+
// organization, so it can only be shared. The server refuses a
|
|
3539
|
+
// personal one; asking for it here would only earn an error.
|
|
3540
|
+
shared: workloadIdentity ? true : create.shared === true,
|
|
3525
3541
|
};
|
|
3526
3542
|
// Clear the credential from shared state before any network await.
|
|
3527
3543
|
this.dispatch({ type: "admin/modelProviders/createSaving" });
|
package/ui/core/src/selectors.js
CHANGED
|
@@ -39,6 +39,22 @@ import { isRecoverableTransportErrorText } from "./session-errors.js";
|
|
|
39
39
|
|
|
40
40
|
export const ACTIVE_HIGHLIGHT_BACKGROUND = "activeHighlightBackground";
|
|
41
41
|
export const ACTIVE_HIGHLIGHT_FOREGROUND = "activeHighlightForeground";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Provider types that authenticate as the worker rather than with a key.
|
|
45
|
+
*
|
|
46
|
+
* The same rule as `providerTypeUsesWorkloadIdentity` in the SDK, restated
|
|
47
|
+
* because the UI packages do not import from it. Both sides read the `type`
|
|
48
|
+
* field of the deployment's model-providers file, so they agree on the value
|
|
49
|
+
* even though they cannot share the function.
|
|
50
|
+
*/
|
|
51
|
+
export function providerTypeUsesWorkloadIdentity(type) {
|
|
52
|
+
return type === "anthropic-wif";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** What the add-provider form says where the key field would be. */
|
|
56
|
+
export const WORKLOAD_IDENTITY_CREDENTIAL_NOTE =
|
|
57
|
+
"Use the Workload Identity configured in the worker";
|
|
42
58
|
const USER_CHAT_COLOR = "userChat";
|
|
43
59
|
const USER_CHAT_LABEL_COLOR = "userChatLabel";
|
|
44
60
|
// Speaker label for a message from another person in a shared session.
|
|
@@ -3939,11 +3955,19 @@ export function selectAdminConsole(state) {
|
|
|
3939
3955
|
providerTypeMap.set(model.providerId, {
|
|
3940
3956
|
id: model.providerId,
|
|
3941
3957
|
label: model.providerType || model.providerId,
|
|
3958
|
+
// Carried on the type so that no screen has to know which type
|
|
3959
|
+
// names mean "no key": the add-provider form asks for a
|
|
3960
|
+
// credential unless this says the worker already holds one.
|
|
3961
|
+
usesWorkloadIdentity: providerTypeUsesWorkloadIdentity(model.providerType),
|
|
3942
3962
|
});
|
|
3943
3963
|
}
|
|
3944
3964
|
const providerSummary = (provider) => ({
|
|
3945
3965
|
name: provider.name,
|
|
3946
3966
|
typeId: provider.typeId || provider.type || null,
|
|
3967
|
+
// There is no key on this one to rotate, so the screens that offer
|
|
3968
|
+
// "Update key" leave it off rather than offering an action the server
|
|
3969
|
+
// refuses.
|
|
3970
|
+
usesWorkloadIdentity: providerTypeMap.get(provider.typeId || provider.type)?.usesWorkloadIdentity === true,
|
|
3947
3971
|
class: provider.class === "shared" ? "shared" : "personal",
|
|
3948
3972
|
hasCredential: Boolean(provider.hasCredential),
|
|
3949
3973
|
usableByMe: provider.usableByMe !== false,
|
|
@@ -4680,6 +4704,12 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
|
|
|
4680
4704
|
? "Add GitHub Copilot provider"
|
|
4681
4705
|
: `Add ${create.typeId || "model"} provider`;
|
|
4682
4706
|
const value = String(create.draft || "");
|
|
4707
|
+
// A workload-identity type has no key to ask for. The stage still exists
|
|
4708
|
+
// — it is where the person confirms what they are adding — but it prompts
|
|
4709
|
+
// instead of demanding, and nothing is typed into it.
|
|
4710
|
+
const typeRow = (admin.modelProviders?.models || [])
|
|
4711
|
+
.find((model) => model?.providerId === create.typeId);
|
|
4712
|
+
const workloadIdentity = providerTypeUsesWorkloadIdentity(typeRow?.providerType);
|
|
4683
4713
|
return {
|
|
4684
4714
|
type: "adminProviderCreate",
|
|
4685
4715
|
title: updating
|
|
@@ -4687,10 +4717,12 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
|
|
|
4687
4717
|
: credentialStage
|
|
4688
4718
|
? (shared ? "Add shared model provider" : ownTitle)
|
|
4689
4719
|
: (shared ? "Name the shared provider" : ownTitle),
|
|
4690
|
-
label: credentialStage ? "credential" : "provider name",
|
|
4691
|
-
displayValue: credentialStage && value ? "•".repeat(value.length) : value,
|
|
4720
|
+
label: credentialStage ? (workloadIdentity ? "authentication" : "credential") : "provider name",
|
|
4721
|
+
displayValue: credentialStage && value && !workloadIdentity ? "•".repeat(value.length) : value,
|
|
4692
4722
|
cursorIndex: Math.max(0, Math.min(Number(create.cursorIndex) || 0, value.length)),
|
|
4693
|
-
placeholder: credentialStage
|
|
4723
|
+
placeholder: credentialStage
|
|
4724
|
+
? (workloadIdentity ? WORKLOAD_IDENTITY_CREDENTIAL_NOTE : "Paste token")
|
|
4725
|
+
: "my-ghcp",
|
|
4694
4726
|
saving: Boolean(create.saving),
|
|
4695
4727
|
error: create.error || null,
|
|
4696
4728
|
idealWidth: Math.max(56, Math.min(maxWidth, 76)),
|
|
@@ -4698,6 +4730,9 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
|
|
|
4698
4730
|
? [
|
|
4699
4731
|
{ text: `Provider ${create.name}`, color: "white", bold: true },
|
|
4700
4732
|
{ text: `Type ${create.typeId}`, color: "cyan" },
|
|
4733
|
+
...(workloadIdentity
|
|
4734
|
+
? [{ text: WORKLOAD_IDENTITY_CREDENTIAL_NOTE, color: "gray" }]
|
|
4735
|
+
: []),
|
|
4701
4736
|
{ text: shared ? "Shared" : "Only you", color: "gray" },
|
|
4702
4737
|
]
|
|
4703
4738
|
: [
|
|
@@ -4706,7 +4741,9 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
|
|
|
4706
4741
|
{ text: "Letters, numbers, dot, dash, and underscore only.", color: "gray" },
|
|
4707
4742
|
],
|
|
4708
4743
|
helpLines: credentialStage
|
|
4709
|
-
?
|
|
4744
|
+
? workloadIdentity
|
|
4745
|
+
? ["No key needed", "Enter create provider", "Esc cancel"]
|
|
4746
|
+
: ["Type/paste credential", `Enter ${updating ? "update key" : "create provider"}`, "Esc cancel and clear"]
|
|
4710
4747
|
: ["Type provider name", "Tab next provider type", "Enter continue to credential", "Esc cancel"],
|
|
4711
4748
|
};
|
|
4712
4749
|
}
|
package/ui/react/src/web-app.js
CHANGED
|
@@ -10733,14 +10733,26 @@ function CreateProviderSheet({
|
|
|
10733
10733
|
// Bounded and named here instead, where the rule can be said precisely.
|
|
10734
10734
|
const badChars = trimmed !== "" && !/^[A-Za-z0-9._-]+$/.test(trimmed);
|
|
10735
10735
|
const tooLong = trimmed.length > 64;
|
|
10736
|
+
// A workload-identity type carries no key: the worker authenticates as
|
|
10737
|
+
// itself. So the form asks for nothing to paste, and requiring a
|
|
10738
|
+
// credential would make the type impossible to add from this screen.
|
|
10739
|
+
const workloadIdentity = types.find((option) => option.id === type)?.usesWorkloadIdentity === true;
|
|
10740
|
+
// It runs on the worker's identity, which is the organization's, so it can
|
|
10741
|
+
// only be shared — a personal one would spend the cluster's account under
|
|
10742
|
+
// a name no administrator can cap. The server refuses it too.
|
|
10743
|
+
const sharedOnly = workloadIdentity;
|
|
10744
|
+
const effectiveShared = sharedOnly ? true : shared;
|
|
10736
10745
|
const valid = Boolean(trimmed) && !taken && !badChars && !tooLong
|
|
10737
|
-
&& Boolean(type) && Boolean(credential.trim())
|
|
10746
|
+
&& Boolean(type) && (workloadIdentity || Boolean(credential.trim()))
|
|
10747
|
+
&& (!sharedOnly || isAdmin);
|
|
10738
10748
|
const isGithub = /github/i.test(type);
|
|
10739
10749
|
const submit = () => {
|
|
10740
10750
|
if (!valid) return;
|
|
10741
10751
|
const input = {
|
|
10742
|
-
name: trimmed, type, shared,
|
|
10743
|
-
credentials:
|
|
10752
|
+
name: trimmed, type, shared: effectiveShared,
|
|
10753
|
+
credentials: workloadIdentity
|
|
10754
|
+
? { kind: "workloadIdentity" }
|
|
10755
|
+
: isGithub ? { githubToken: credential.trim() } : { apiKey: credential.trim() },
|
|
10744
10756
|
baseUrl: baseUrl.trim() || null,
|
|
10745
10757
|
};
|
|
10746
10758
|
setCredential("");
|
|
@@ -10753,7 +10765,7 @@ function CreateProviderSheet({
|
|
|
10753
10765
|
|
|
10754
10766
|
return React.createElement(BudgetSheet, {
|
|
10755
10767
|
title: updating ? `Update key for ${trimmed}` : (isGithub ? "Add GitHub Copilot provider" : "Add model provider"),
|
|
10756
|
-
subtitle:
|
|
10768
|
+
subtitle: effectiveShared ? "Shared" : "Personal",
|
|
10757
10769
|
confirmLabel: updating ? "Update key" : "Add provider", busy, disabled: !valid, error, onCancel: cancel, onConfirm: submit,
|
|
10758
10770
|
// The whole point of an update is what does NOT change. Saying so is
|
|
10759
10771
|
// the difference between "replace the key" and "did I just make a
|
|
@@ -10789,33 +10801,45 @@ function CreateProviderSheet({
|
|
|
10789
10801
|
}, types.length === 0
|
|
10790
10802
|
? React.createElement("option", { value: "" }, "No provider types are listed on this deployment")
|
|
10791
10803
|
: types.map((option) => React.createElement("option", { key: option.id, value: option.id }, option.id)))),
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
:
|
|
10796
|
-
|
|
10797
|
-
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
|
|
10802
|
-
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
10811
|
-
|
|
10804
|
+
workloadIdentity
|
|
10805
|
+
? React.createElement(SheetField, {
|
|
10806
|
+
label: "Authentication",
|
|
10807
|
+
hint: "Nothing is stored. The worker mints a short-lived token for each request.",
|
|
10808
|
+
},
|
|
10809
|
+
React.createElement("div", { className: "ps-budget-input is-static", role: "note" },
|
|
10810
|
+
"Use the Workload Identity configured in the worker"))
|
|
10811
|
+
: React.createElement(SheetField, {
|
|
10812
|
+
label: updating
|
|
10813
|
+
? (isGithub ? "New GitHub Copilot token" : "New API key")
|
|
10814
|
+
: (isGithub ? "GitHub Copilot token" : "API key"),
|
|
10815
|
+
hint: updating
|
|
10816
|
+
? "Replaces the current one. The existing key is never shown."
|
|
10817
|
+
: "Paste the token value.",
|
|
10818
|
+
},
|
|
10819
|
+
React.createElement("input", {
|
|
10820
|
+
className: "ps-budget-input", type: "password", autoComplete: "off",
|
|
10821
|
+
"aria-label": updating
|
|
10822
|
+
? (isGithub ? "New GitHub Copilot token" : "New API key")
|
|
10823
|
+
: (isGithub ? "GitHub Copilot token" : "API key"),
|
|
10824
|
+
value: credential, placeholder: "Paste token",
|
|
10825
|
+
onChange: (event) => { onDirty?.(); setCredential(event.target.value); },
|
|
10826
|
+
// While updating this is the only editable field, and the Name input
|
|
10827
|
+
// that carries the other Enter handler is disabled — so without this
|
|
10828
|
+
// the sheet cannot be submitted from the keyboard at all.
|
|
10829
|
+
onKeyDown: (event) => { if (event.key === "Enter" && valid) submit(); },
|
|
10830
|
+
})),
|
|
10812
10831
|
!updating ? React.createElement(SheetField, { label: "Base URL", hint: "Optional." },
|
|
10813
10832
|
React.createElement("input", {
|
|
10814
10833
|
className: "ps-budget-input", value: baseUrl, placeholder: "https://…",
|
|
10815
10834
|
"aria-label": "Base URL",
|
|
10816
10835
|
onChange: (event) => setBaseUrl(event.target.value),
|
|
10817
10836
|
})) : null,
|
|
10818
|
-
|
|
10837
|
+
sharedOnly && !updating ? React.createElement(SheetField, {
|
|
10838
|
+
label: "Access",
|
|
10839
|
+
hint: "It runs on the worker's own identity, which belongs to the organization, so it cannot be personal.",
|
|
10840
|
+
},
|
|
10841
|
+
React.createElement("div", { className: "ps-budget-input is-static", role: "note" }, "Shared"))
|
|
10842
|
+
: isAdmin && !updating ? React.createElement(SheetField, { label: "Access" },
|
|
10819
10843
|
React.createElement(Segmented, {
|
|
10820
10844
|
value: shared ? "shared" : "mine", onChange: (value) => setShared(value === "shared"),
|
|
10821
10845
|
label: "Access",
|
|
@@ -13385,7 +13409,9 @@ function AdminProviderRows({ providers, isAdmin, personal, busy, onSystemUse, on
|
|
|
13385
13409
|
// drops the cluster-default flag, the allowance, any hold, the
|
|
13386
13410
|
// system-use routing and the usage history, i.e. everything this
|
|
13387
13411
|
// feature exists to preserve.
|
|
13388
|
-
|
|
13412
|
+
// A workload-identity provider has no stored key: the worker
|
|
13413
|
+
// authenticates as itself, and the server refuses the update.
|
|
13414
|
+
(personal || isAdmin) && !provider.usesWorkloadIdentity ? React.createElement("button", {
|
|
13389
13415
|
type: "button",
|
|
13390
13416
|
className: "ps-mini-button",
|
|
13391
13417
|
// Several providers means several identical "Update Key"
|
package/web/dist/assets/{abnfDiagram-VRR7QNED-6rYy4Wj8.js → abnfDiagram-VRR7QNED-CXF6f3n3.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-B51xJi0l.js";import{p as f}from"./chunk-JWPE2WC7-BNQrzsa3.js";import{_ as n,l as o}from"./mermaid.core-CFdkmvEY.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DLoMRcB-.js";import"./pilotswarm-CLJw14xm.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-CFdkmvEY.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|