local-operator-ui 0.29.6 → 0.29.7
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/out/main/index.js +288 -11
- package/out/renderer/assets/{_basePickBy-D-VwFtKc.js → _basePickBy-DcTwJYO_.js} +1 -1
- package/out/renderer/assets/{_baseUniq-DDJz-WZw.js → _baseUniq-DvPSd9xZ.js} +1 -1
- package/out/renderer/assets/{agent-details-page-jO2PvB7X.js → agent-details-page-DnhScOnI.js} +1 -1
- package/out/renderer/assets/{agent-hub-page-xdes-D_X.js → agent-hub-page-BQ4Wcnxb.js} +1 -1
- package/out/renderer/assets/{agents-page-j8DAg52R.js → agents-page-BCsceEiI.js} +2 -2
- package/out/renderer/assets/{arc-CjaBvXDL.js → arc-CDMjXyzV.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CYVtl1Tr.js → architectureDiagram-IEHRJDOE-DAy3J7qv.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-DfMbDEPW.js → blockDiagram-JOT3LUYC-THM4jJLl.js} +1 -1
- package/out/renderer/assets/{browser-page-Dw1FPkTB.js → browser-page-BkOVSS3V.js} +1 -1
- package/out/renderer/assets/{browser-webauthn-prompt-3S4O_0eV.js → browser-webauthn-prompt-CsnZvLQM.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-D_lTZwGe.js → c4Diagram-VJAJSXHY-DmKqFqN2.js} +1 -1
- package/out/renderer/assets/channel-D5pOQ8_v.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-BPOpt_G1.js → chunk-4BMEZGHF-CTvxe0Qv.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-DTq_POy_.js → chunk-A2AXSNBT-Bs0eNJeb.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-DOAjbTBV.js → chunk-AEK57VVT-7zo4HKxz.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-CLeUkHhx.js → chunk-D6G4REZN-CujTp3N4.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-DR3q6hDQ.js → chunk-RZ5BOZE2-DagQiTA1.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-DeI7Tei8.js → chunk-XZIHB7SX-EUyPfdjE.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-C2odzhaf.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-C2odzhaf.js +1 -0
- package/out/renderer/assets/clone-Dzzjex5C.js +1 -0
- package/out/renderer/assets/{compact-pagination-pR_TewmZ.js → compact-pagination-4Yt2xb-Y.js} +1 -1
- package/out/renderer/assets/{dagre-OKDRZEBW-BzCAmNFs.js → dagre-OKDRZEBW-CE_XdZbQ.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-DJhkbiTK.js → diagram-SSKATNLV-Ptt_uQaX.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-C198p3CS.js → diagram-VNBRO52H-DUi-Kwq3.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-BXMHZzg7.js → erDiagram-Q7BY3M3F-rWuUD2VL.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-BH25N-UK.js → flowDiagram-4HSFHLVR-DggskyIO.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-C90nUk9-.js → ganttDiagram-APWFNJXF-BjyQcRgJ.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-CGCN32Lb.js → gitGraphDiagram-7IBYFJ6S-D73cnsKt.js} +1 -1
- package/out/renderer/assets/{graph-CnshGmMM.js → graph-Blj6eB_I.js} +1 -1
- package/out/renderer/assets/{index-Dic-nJw9.js → index-C3_lkDT_.js} +1 -1
- package/out/renderer/assets/{index-CbEqOOj5.js → index-CanR4Tr_.js} +5 -5
- package/out/renderer/assets/{index-CLOkmTr3.js → index-Ci7qsPse.js} +1 -1
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-yhFK8QbZ.js → infoDiagram-PH2N3AL5-CZhLBS28.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-Bh_mQdVI.js → journeyDiagram-U35MCT3I-C9vwvYUe.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-CFxjCPF4.js → kanban-definition-NDS4AKOZ-noOVueME.js} +1 -1
- package/out/renderer/assets/{layout-CEBnys_f.js → layout-BO2FtYI8.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-BV5wNeFT.js → legacy-agents-page-CpvPE5Y4.js} +1 -1
- package/out/renderer/assets/{mermaid.core-CItomUrR.js → mermaid.core-BylrYsTL.js} +5 -5
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-B-uWszwf.js → mindmap-definition-ALO5MXBD-BCMhPSkA.js} +1 -1
- package/out/renderer/assets/{parseISO-Dkhkl_3Q.js → parseISO-BtKaZLD8.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-CqJrFz8P.js → pieDiagram-IB7DONF6-rcahe9BM.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-Bla_rG-3.js → quadrantDiagram-7GDLP6J5-DxyeVGPJ.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-DM-Fttuo.js → radar-MK3ICKWK-nm5lycWc.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-5BZmMSkU.js → radient-auth-buttons-Ctvl_4_t.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-f1n0Vj3U.js → requirementDiagram-KVF5MWMF-CRS0W_DU.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-WBvrc_GC.js → sankeyDiagram-QLVOVGJD-CQL_jB_D.js} +1 -1
- package/out/renderer/assets/{schedules-page-CufYrWWt.js → schedules-page-DMy2NLrj.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DXNQl5UM.js → sequenceDiagram-X6HHIX6F-CLZ4yPPV.js} +1 -1
- package/out/renderer/assets/settings-page-D5Dxhcm-.js +317 -0
- package/out/renderer/assets/{stateDiagram-DGXRK772-Dc-HE3Jh.js → stateDiagram-DGXRK772-Bx_8B6PV.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CHFeLpR9.js +1 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-DAE8SRiO.js → timeline-definition-BDJGKUSR-D2TdXm7n.js} +1 -1
- package/out/renderer/assets/{use-agent-like-mutation-BmPMhO1j.js → use-agent-like-mutation-C-7u11gk.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-DoRBXwwS.js → xychartDiagram-VJFVF3MP-ncq15Qkv.js} +1 -1
- package/out/renderer/index.html +1 -1
- package/package.json +1 -1
- package/out/renderer/assets/channel-Dfi7uOIV.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-Dln1fC0q.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-Dln1fC0q.js +0 -1
- package/out/renderer/assets/clone-DA5JBsPm.js +0 -1
- package/out/renderer/assets/settings-page-BppBUxvd.js +0 -317
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CEPLahMP.js +0 -1
package/out/main/index.js
CHANGED
|
@@ -2387,6 +2387,14 @@ const BUNDLED_PYTHON_LAYOUT = {
|
|
|
2387
2387
|
checkoutSeedNames,
|
|
2388
2388
|
machOMagics
|
|
2389
2389
|
};
|
|
2390
|
+
const embeddedProvisioningProfilePath = "Contents/embedded.provisionprofile";
|
|
2391
|
+
const unrestrictedEntitlementKeys = ["com.apple.security.app-sandbox", "com.apple.security.application-groups", "com.apple.security.get-task-allow", "com.apple.security.inherit", "com.apple.security.print", "com.apple.security.smartcard"];
|
|
2392
|
+
const unrestrictedEntitlementPrefixes = ["com.apple.security.cs.", "com.apple.security.network.", "com.apple.security.files.", "com.apple.security.device.", "com.apple.security.personal-information.", "com.apple.security.assets.", "com.apple.security.automation."];
|
|
2393
|
+
const MACOS_ENTITLEMENT_POLICY = {
|
|
2394
|
+
embeddedProvisioningProfilePath,
|
|
2395
|
+
unrestrictedEntitlementKeys,
|
|
2396
|
+
unrestrictedEntitlementPrefixes
|
|
2397
|
+
};
|
|
2390
2398
|
const PENDING_INSTALL_MARKER_FILE = "pending-update-install.json";
|
|
2391
2399
|
const INSTALL_DISK_SLACK_BYTES = 256 * 1024 * 1024;
|
|
2392
2400
|
const DOWNLOAD_PAGE_URL = "https://local-operator.com/download";
|
|
@@ -2688,6 +2696,70 @@ function resolveStagedArtifactPath(input) {
|
|
|
2688
2696
|
}
|
|
2689
2697
|
return null;
|
|
2690
2698
|
}
|
|
2699
|
+
const EMBEDDED_PROVISIONING_PROFILE_PATH = MACOS_ENTITLEMENT_POLICY.embeddedProvisioningProfilePath;
|
|
2700
|
+
function isProfileBackedEntitlement(key) {
|
|
2701
|
+
if (MACOS_ENTITLEMENT_POLICY.unrestrictedEntitlementKeys.includes(key)) {
|
|
2702
|
+
return false;
|
|
2703
|
+
}
|
|
2704
|
+
return !MACOS_ENTITLEMENT_POLICY.unrestrictedEntitlementPrefixes.some(
|
|
2705
|
+
(prefix) => key.startsWith(prefix)
|
|
2706
|
+
);
|
|
2707
|
+
}
|
|
2708
|
+
function profileBackedEntitlementKeys(plistText) {
|
|
2709
|
+
const keys = [];
|
|
2710
|
+
for (const match of String(plistText ?? "").matchAll(
|
|
2711
|
+
/<key>([^<]+)<\/key>/g
|
|
2712
|
+
)) {
|
|
2713
|
+
const key = match[1];
|
|
2714
|
+
if (isProfileBackedEntitlement(key) && !keys.includes(key)) keys.push(key);
|
|
2715
|
+
}
|
|
2716
|
+
return keys;
|
|
2717
|
+
}
|
|
2718
|
+
function zipListingHasEmbeddedProfile(listing) {
|
|
2719
|
+
const suffix = `/${EMBEDDED_PROVISIONING_PROFILE_PATH}`;
|
|
2720
|
+
return String(listing ?? "").split("\n").some((entry) => entry.trim().endsWith(suffix));
|
|
2721
|
+
}
|
|
2722
|
+
function zipMainExecutableEntry(listing) {
|
|
2723
|
+
for (const raw of String(listing ?? "").split("\n")) {
|
|
2724
|
+
const entry = raw.trim();
|
|
2725
|
+
if (!entry || entry.endsWith("/")) continue;
|
|
2726
|
+
if (/^[^/]+\.app\/Contents\/MacOS\/[^/]+$/.test(entry)) return entry;
|
|
2727
|
+
}
|
|
2728
|
+
return null;
|
|
2729
|
+
}
|
|
2730
|
+
function stagedSignatureBlock(facts) {
|
|
2731
|
+
if (facts.entitlementsPlist == null) {
|
|
2732
|
+
if (facts.embeddedProfile) return null;
|
|
2733
|
+
return {
|
|
2734
|
+
code: "artifact-cannot-launch",
|
|
2735
|
+
heading: "The update couldn't be checked",
|
|
2736
|
+
message: facts.version ? `The update to version ${facts.version} can't be checked for launch, so it wasn't installed.` : "The downloaded update can't be checked for launch, so it wasn't installed.",
|
|
2737
|
+
remedy: {
|
|
2738
|
+
text: "Check for updates again to re-download the release."
|
|
2739
|
+
},
|
|
2740
|
+
detail: `${facts.artifactName} carries no ${EMBEDDED_PROVISIONING_PROFILE_PATH} and its signature could not be read.`,
|
|
2741
|
+
dismissLabel: "Not now"
|
|
2742
|
+
};
|
|
2743
|
+
}
|
|
2744
|
+
const claimed = profileBackedEntitlementKeys(facts.entitlementsPlist);
|
|
2745
|
+
if (claimed.length === 0) return null;
|
|
2746
|
+
if (facts.embeddedProfile) return null;
|
|
2747
|
+
return {
|
|
2748
|
+
code: "artifact-cannot-launch",
|
|
2749
|
+
message: facts.version ? `The update to version ${facts.version} can't be launched by macOS, so it wasn't installed.` : "The downloaded update can't be launched by macOS, so it wasn't installed.",
|
|
2750
|
+
remedy: {
|
|
2751
|
+
text: facts.version ? `Keep using this copy, and skip version ${facts.version} if you download one by hand — the next release will be offered here as usual.` : "Keep using this copy; the next release will be offered here as usual."
|
|
2752
|
+
},
|
|
2753
|
+
// The facts a reader can check, and nothing else: which archive, which
|
|
2754
|
+
// claim, which file macOS found missing. TN3125's rule (a restricted
|
|
2755
|
+
// entitlement needs a profile) is what makes the refusal TRUE, but a
|
|
2756
|
+
// reader who wants the rule wants Apple's document, and 250 characters of
|
|
2757
|
+
// it in a mono column made the details block 44% of the panel (design
|
|
2758
|
+
// round 1, D4). It belongs in this comment, not in the card.
|
|
2759
|
+
detail: `${facts.artifactName} claims ${claimed.join(", ")} and carries no ${EMBEDDED_PROVISIONING_PROFILE_PATH}.`,
|
|
2760
|
+
dismissLabel: "Not now"
|
|
2761
|
+
};
|
|
2762
|
+
}
|
|
2691
2763
|
function pendingInstallMarkerPath(dir) {
|
|
2692
2764
|
return path$1.join(dir, PENDING_INSTALL_MARKER_FILE);
|
|
2693
2765
|
}
|
|
@@ -2854,6 +2926,20 @@ function recordInstallFailure(dir, input) {
|
|
|
2854
2926
|
fs.renameSync(temp, target2);
|
|
2855
2927
|
return record;
|
|
2856
2928
|
}
|
|
2929
|
+
function installAttemptSupersededBy(record, runningVersion) {
|
|
2930
|
+
const standing = targetStanding(record.targetVersion, runningVersion);
|
|
2931
|
+
return standing === "reached" || standing === "passed";
|
|
2932
|
+
}
|
|
2933
|
+
function clearLastInstallAttempt(dir) {
|
|
2934
|
+
const path2 = lastInstallAttemptPath(dir);
|
|
2935
|
+
if (!fs.existsSync(path2)) return false;
|
|
2936
|
+
try {
|
|
2937
|
+
fs.rmSync(path2, { force: true });
|
|
2938
|
+
return true;
|
|
2939
|
+
} catch {
|
|
2940
|
+
return false;
|
|
2941
|
+
}
|
|
2942
|
+
}
|
|
2857
2943
|
const VERSION_TRIPLE_REGEX = /^v?(\d+)\.(\d+)\.(\d+)/;
|
|
2858
2944
|
function compareVersions(a, b) {
|
|
2859
2945
|
const parse = (value) => {
|
|
@@ -2870,14 +2956,20 @@ function compareVersions(a, b) {
|
|
|
2870
2956
|
}
|
|
2871
2957
|
return 0;
|
|
2872
2958
|
}
|
|
2959
|
+
function targetStanding(target2, runningVersion) {
|
|
2960
|
+
if (target2 === runningVersion) return "reached";
|
|
2961
|
+
const order = compareVersions(target2, runningVersion);
|
|
2962
|
+
if (order === null) return "unorderable";
|
|
2963
|
+
if (order < 0) return "passed";
|
|
2964
|
+
if (order > 0) return "ahead";
|
|
2965
|
+
return "same-triple";
|
|
2966
|
+
}
|
|
2873
2967
|
function evaluatePendingInstall(input) {
|
|
2874
2968
|
const { marker } = input;
|
|
2875
2969
|
if (marker == null) return { kind: "none" };
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
}
|
|
2879
|
-
const order = compareVersions(marker.targetVersion, input.runningVersion);
|
|
2880
|
-
if (order !== null && order < 0) return { kind: "stale", marker };
|
|
2970
|
+
const standing = targetStanding(marker.targetVersion, input.runningVersion);
|
|
2971
|
+
if (standing === "reached") return { kind: "succeeded", marker };
|
|
2972
|
+
if (standing === "passed") return { kind: "stale", marker };
|
|
2881
2973
|
if (input.installInFlight === true) return { kind: "in-flight", marker };
|
|
2882
2974
|
return { kind: "failed", marker };
|
|
2883
2975
|
}
|
|
@@ -3700,6 +3792,23 @@ function generationInstallRoot(identity) {
|
|
|
3700
3792
|
dir = parent;
|
|
3701
3793
|
}
|
|
3702
3794
|
}
|
|
3795
|
+
function installPointerPath(filePath) {
|
|
3796
|
+
if (!filePath) return null;
|
|
3797
|
+
const identity = readInstallIdentity(filePath);
|
|
3798
|
+
const generation = generationInstallRoot(identity);
|
|
3799
|
+
if (!generation) return filePath;
|
|
3800
|
+
let resolved;
|
|
3801
|
+
try {
|
|
3802
|
+
resolved = fs.realpathSync(identity.realPath ?? filePath);
|
|
3803
|
+
} catch {
|
|
3804
|
+
return filePath;
|
|
3805
|
+
}
|
|
3806
|
+
const inside2 = path$1.relative(generation, resolved);
|
|
3807
|
+
if (inside2 === "" || inside2.startsWith("..") || path$1.isAbsolute(inside2)) {
|
|
3808
|
+
return filePath;
|
|
3809
|
+
}
|
|
3810
|
+
return path$1.join(path$1.dirname(path$1.dirname(generation)), "current", inside2);
|
|
3811
|
+
}
|
|
3703
3812
|
function classifyGlobalInstall(identity) {
|
|
3704
3813
|
if (!identity.path) return "global-unknown";
|
|
3705
3814
|
if (identity.editable) return "editable";
|
|
@@ -17618,6 +17727,7 @@ const INSTALL_IN_FLIGHT_RECHECK_MS = 1e4;
|
|
|
17618
17727
|
const LAUNCHCTL_NOT_LOADED_REGEX = /could not find|no such process/i;
|
|
17619
17728
|
const APP_OWNED_PUBLISH_HEADROOM_BYTES = 450 * 1024 * 1024;
|
|
17620
17729
|
const SEAL_PROBE_TIMEOUT_MS = 45e3;
|
|
17730
|
+
const STAGED_SIGNATURE_PROBE_TIMEOUT_MS = 2e4;
|
|
17621
17731
|
const STARTUP_SEAL_PROBE_DELAY_MS = 15e3;
|
|
17622
17732
|
const POST_WAKE_CHECK_DELAY_MS = 2e4;
|
|
17623
17733
|
function versionSuffix(version) {
|
|
@@ -18310,6 +18420,7 @@ class UpdateService {
|
|
|
18310
18420
|
);
|
|
18311
18421
|
this.reapWatchdog(outcome.marker, true);
|
|
18312
18422
|
clearPendingInstallMarker(this.markerDir());
|
|
18423
|
+
this.retireSupersededInstallRecord();
|
|
18313
18424
|
return;
|
|
18314
18425
|
case "stale":
|
|
18315
18426
|
logger.info(
|
|
@@ -18318,6 +18429,7 @@ class UpdateService {
|
|
|
18318
18429
|
);
|
|
18319
18430
|
this.reapWatchdog(outcome.marker, true);
|
|
18320
18431
|
clearPendingInstallMarker(this.markerDir());
|
|
18432
|
+
this.retireSupersededInstallRecord();
|
|
18321
18433
|
return;
|
|
18322
18434
|
case "in-flight": {
|
|
18323
18435
|
this.installWasInFlight = true;
|
|
@@ -19094,10 +19206,123 @@ ${heal.removed.join("\n")}`,
|
|
|
19094
19206
|
`Staged artifact verified: ${artifactPath} (${verdict.size} bytes, sha512 matches, ${required} bytes required free, ${installedBundleSize ?? "unknown"} byte app).`,
|
|
19095
19207
|
LogFileType.UPDATE_SERVICE
|
|
19096
19208
|
);
|
|
19097
|
-
return
|
|
19209
|
+
return this.stagedSignatureBlock(artifactPath, info);
|
|
19098
19210
|
}
|
|
19099
19211
|
return verdict.block;
|
|
19100
19212
|
}
|
|
19213
|
+
/**
|
|
19214
|
+
* Refuse a staged artifact macOS would not launch, before the app quits.
|
|
19215
|
+
*
|
|
19216
|
+
* Why this is worth a probe of its own. On 2026-09-19 the operator's install
|
|
19217
|
+
* updated itself to 0.29.6, which was Developer-ID signed, notarized, stapled,
|
|
19218
|
+
* `codesign --verify --deep --strict`-clean and `spctl -t exec`-accepted - and
|
|
19219
|
+
* completely unlaunchable: every executable in the bundle claimed the
|
|
19220
|
+
* restricted `keychain-access-groups` entitlement while the bundle embedded no
|
|
19221
|
+
* provisioning profile to authorize it, so amfid refused every Mach-O at exec
|
|
19222
|
+
* (`AppleMobileFileIntegrityError Code=-413 "No matching profile found"`).
|
|
19223
|
+
* `open` reported `RBSRequestErrorDomain Code=5 / NSPOSIXErrorDomain Code=163
|
|
19224
|
+
* "Launchd job spawn failed"`. The ShipIt that should have relaunched the app
|
|
19225
|
+
* was refused for the same reason, so the install completed and left the user
|
|
19226
|
+
* with no app, no message and no automatic way back.
|
|
19227
|
+
*
|
|
19228
|
+
* The signature check is done on the STAGED artifact rather than on the
|
|
19229
|
+
* installed bundle because by the time the installed bundle is the broken one,
|
|
19230
|
+
* there is nothing left running to report it.
|
|
19231
|
+
*
|
|
19232
|
+
* A probe that could not read the artifact at all is not a refusal by itself -
|
|
19233
|
+
* `stagedSignatureBlock` decides that - and neither is a non-zip artifact: the
|
|
19234
|
+
* macOS in-app update is a `.zip`, and an artifact this cannot read is reported
|
|
19235
|
+
* as such rather than treated as clean.
|
|
19236
|
+
*/
|
|
19237
|
+
async stagedSignatureBlock(artifactPath, info) {
|
|
19238
|
+
const facts = await this.inspectStagedSignature(artifactPath, info);
|
|
19239
|
+
if (!facts) return null;
|
|
19240
|
+
const block = stagedSignatureBlock(facts);
|
|
19241
|
+
if (!block) {
|
|
19242
|
+
logger.info(
|
|
19243
|
+
`Staged artifact signature checked: ${facts.artifactName} claims no entitlement macOS needs a provisioning profile for.`,
|
|
19244
|
+
LogFileType.UPDATE_SERVICE
|
|
19245
|
+
);
|
|
19246
|
+
return null;
|
|
19247
|
+
}
|
|
19248
|
+
logger.warn(
|
|
19249
|
+
`Refusing the update to ${info?.version ?? "an unknown version"}: ${block.detail}`,
|
|
19250
|
+
LogFileType.UPDATE_SERVICE
|
|
19251
|
+
);
|
|
19252
|
+
return block;
|
|
19253
|
+
}
|
|
19254
|
+
/**
|
|
19255
|
+
* The facts `stagedSignatureBlock` decides on, read out of the archive.
|
|
19256
|
+
*
|
|
19257
|
+
* Two members of the zip and one `codesign`, which is cheap because the file
|
|
19258
|
+
* that carries the entitlements is the bundle's LAUNCHER rather than the app
|
|
19259
|
+
* (`Contents/MacOS/Local Operator` is ~54 KB beside a ~376 MB bundle). The
|
|
19260
|
+
* listing comes from the central directory, so neither the interpreter nor the
|
|
19261
|
+
* frameworks are ever decompressed.
|
|
19262
|
+
*
|
|
19263
|
+
* Returns null when there is nothing this can ask about - not a zip, or a zip
|
|
19264
|
+
* whose listing could not be read - and says so in the log. That is a
|
|
19265
|
+
* deliberate "we could not tell", which is different from "we looked and it is
|
|
19266
|
+
* clean"; the caller logs the clean case itself.
|
|
19267
|
+
*/
|
|
19268
|
+
async inspectStagedSignature(artifactPath, info) {
|
|
19269
|
+
const artifactName = path$1.basename(artifactPath);
|
|
19270
|
+
if (!artifactPath.toLowerCase().endsWith(".zip")) {
|
|
19271
|
+
logger.info(
|
|
19272
|
+
`Staged artifact ${artifactName} is not a zip; its signature was not inspected before the install.`,
|
|
19273
|
+
LogFileType.UPDATE_SERVICE
|
|
19274
|
+
);
|
|
19275
|
+
return null;
|
|
19276
|
+
}
|
|
19277
|
+
const listing = await runCommand("/usr/bin/unzip", ["-Z1", artifactPath], {
|
|
19278
|
+
timeoutMs: STAGED_SIGNATURE_PROBE_TIMEOUT_MS
|
|
19279
|
+
});
|
|
19280
|
+
if (!listing.ran || listing.exitCode !== 0) {
|
|
19281
|
+
logger.warn(
|
|
19282
|
+
`Could not list ${artifactName} to check its signature (exit ${listing.exitCode}): ${listing.stderr.trim() || "no output"}`,
|
|
19283
|
+
LogFileType.UPDATE_SERVICE
|
|
19284
|
+
);
|
|
19285
|
+
return null;
|
|
19286
|
+
}
|
|
19287
|
+
const embeddedProfile = zipListingHasEmbeddedProfile(listing.stdout);
|
|
19288
|
+
const entry = zipMainExecutableEntry(listing.stdout);
|
|
19289
|
+
const base = {
|
|
19290
|
+
entitlementsPlist: null,
|
|
19291
|
+
embeddedProfile,
|
|
19292
|
+
artifactName,
|
|
19293
|
+
version: info?.version ?? null
|
|
19294
|
+
};
|
|
19295
|
+
if (!entry) {
|
|
19296
|
+
logger.warn(
|
|
19297
|
+
`${artifactName} has no Contents/MacOS entry to read a signature from; its entitlements were not inspected before the install.`,
|
|
19298
|
+
LogFileType.UPDATE_SERVICE
|
|
19299
|
+
);
|
|
19300
|
+
return base;
|
|
19301
|
+
}
|
|
19302
|
+
const scratch = fs.mkdtempSync(path$1.join(os.tmpdir(), "lo-staged-signature-"));
|
|
19303
|
+
try {
|
|
19304
|
+
const extracted = await runCommand(
|
|
19305
|
+
"/usr/bin/unzip",
|
|
19306
|
+
["-o", "-q", artifactPath, entry, "-d", scratch],
|
|
19307
|
+
{ timeoutMs: STAGED_SIGNATURE_PROBE_TIMEOUT_MS }
|
|
19308
|
+
);
|
|
19309
|
+
if (!extracted.ran || extracted.exitCode !== 0) {
|
|
19310
|
+
logger.warn(
|
|
19311
|
+
`Could not extract ${entry} from ${artifactName} (exit ${extracted.exitCode}): ${extracted.stderr.trim() || "no output"}`,
|
|
19312
|
+
LogFileType.UPDATE_SERVICE
|
|
19313
|
+
);
|
|
19314
|
+
return base;
|
|
19315
|
+
}
|
|
19316
|
+
const signature = await runCommand(
|
|
19317
|
+
"/usr/bin/codesign",
|
|
19318
|
+
["-d", "--entitlements", "-", "--xml", path$1.join(scratch, entry)],
|
|
19319
|
+
{ timeoutMs: STAGED_SIGNATURE_PROBE_TIMEOUT_MS }
|
|
19320
|
+
);
|
|
19321
|
+
return signature.ran && signature.exitCode === 0 ? { ...base, entitlementsPlist: signature.stdout } : base;
|
|
19322
|
+
} finally {
|
|
19323
|
+
fs.rmSync(scratch, { recursive: true, force: true });
|
|
19324
|
+
}
|
|
19325
|
+
}
|
|
19101
19326
|
/**
|
|
19102
19327
|
* Everything that has to hold before the app is allowed to quit.
|
|
19103
19328
|
*
|
|
@@ -19315,9 +19540,39 @@ ${heal.removed.join("\n")}`,
|
|
|
19315
19540
|
* a dismiss: the panel that reports a failure is not the only place the user
|
|
19316
19541
|
* can find out what happened, which is what made Dismiss an information loss
|
|
19317
19542
|
* (reviews U1, D3).
|
|
19543
|
+
*
|
|
19544
|
+
* AND IT RETIRES ONCE THE MACHINE HAS ARRIVED, which is the other half of that
|
|
19545
|
+
* promise: a record that survives a dismiss must not survive the state it
|
|
19546
|
+
* describes, or "Version 0.28.2 is running" is printed to a user on 0.29.1 for
|
|
19547
|
+
* ever (the operator's report, 2026-09-18 - a 0.28.3 record against a running
|
|
19548
|
+
* 0.29.1). The test is read-time because the fact becomes true without this
|
|
19549
|
+
* process doing anything: the installer ran, the user relaunched, and the app
|
|
19550
|
+
* that comes up is the one that answers every reader.
|
|
19318
19551
|
*/
|
|
19319
19552
|
lastInstallAttempt() {
|
|
19320
|
-
return
|
|
19553
|
+
return this.retireSupersededInstallRecord();
|
|
19554
|
+
}
|
|
19555
|
+
/**
|
|
19556
|
+
* The record, retired first when the version now running has reached its target.
|
|
19557
|
+
*
|
|
19558
|
+
* One function rather than the same test written at each site, because there are two
|
|
19559
|
+
* moments the fact becomes true - the launch that reads the record, and a start-up
|
|
19560
|
+
* that observes an install having succeeded or been superseded - and two spellings of
|
|
19561
|
+
* one rule is how the arms drift apart. The predicate keeps a record whose versions
|
|
19562
|
+
* cannot be ordered, so nothing is dropped on a guess (`installAttemptSupersededBy`).
|
|
19563
|
+
*/
|
|
19564
|
+
retireSupersededInstallRecord() {
|
|
19565
|
+
const record = readLastInstallAttempt(this.markerDir());
|
|
19566
|
+
if (!record) return null;
|
|
19567
|
+
const running = electron.app.getVersion();
|
|
19568
|
+
if (!installAttemptSupersededBy(record, running)) return record;
|
|
19569
|
+
if (clearLastInstallAttempt(this.markerDir())) {
|
|
19570
|
+
logger.info(
|
|
19571
|
+
`Retired the recorded install failure for ${record.targetVersion}: this app is running ${running}, so the target has been reached and the record describes a state the machine has left`,
|
|
19572
|
+
LogFileType.UPDATE_SERVICE
|
|
19573
|
+
);
|
|
19574
|
+
}
|
|
19575
|
+
return null;
|
|
19321
19576
|
}
|
|
19322
19577
|
/**
|
|
19323
19578
|
* Note that a check was asked for, and let an explicit one re-offer a release
|
|
@@ -20155,9 +20410,15 @@ ${heal.removed.join("\n")}`,
|
|
|
20155
20410
|
* uv tool root), so a prefix held from minutes ago can name a tree nothing is
|
|
20156
20411
|
* using any more. The reading is what `didSourceRebuildLand` compares, in both
|
|
20157
20412
|
* directions.
|
|
20413
|
+
*
|
|
20414
|
+
* Read through the install's own pointer for the same reason the version is (see
|
|
20415
|
+
* `readInstallVersionAt`): a rebuild keeps `pyproject.toml`'s version and moves the
|
|
20416
|
+
* `.lop-source` ref, so the marker is the ONLY evidence of that move on this route -
|
|
20417
|
+
* and a marker read from the frozen `generations/<id>` the daemon started from cannot
|
|
20418
|
+
* show it any more than the version could.
|
|
20158
20419
|
*/
|
|
20159
20420
|
readRebuildMarkerState(installPath) {
|
|
20160
|
-
const identity = readInstallIdentity(installPath);
|
|
20421
|
+
const identity = readInstallIdentity(installPointerPath(installPath));
|
|
20161
20422
|
return readSourceMarkerState(identity.venvPrefix ?? null);
|
|
20162
20423
|
}
|
|
20163
20424
|
/**
|
|
@@ -20943,9 +21204,16 @@ ${heal.removed.join("\n")}`,
|
|
|
20943
21204
|
* than into a plausible number. The one caller with a record and no path - the
|
|
20944
21205
|
* reconciliation reading a marker an older build wrote - names its fallback explicitly
|
|
20945
21206
|
* and logs it.
|
|
21207
|
+
*
|
|
21208
|
+
* AND THE INSTALL IS READ THROUGH ITS OWN POINTER, because on a generation layout the
|
|
21209
|
+
* install it names cannot move under it: the tree `/health` reports as the install root
|
|
21210
|
+
* is `generations/<id>`, an install lands BESIDE it, and only `<stable>/current` moves.
|
|
21211
|
+
* Reading the concrete path here is what produced the false "did not take effect" verdict
|
|
21212
|
+
* of 2026-09-18; `installPointerPath` is the same install named so the flip is visible,
|
|
21213
|
+
* and it is a no-op on every other layout.
|
|
20946
21214
|
*/
|
|
20947
21215
|
readInstallVersionAt(installPath) {
|
|
20948
|
-
return readInstallIdentity(installPath)?.version ?? null;
|
|
21216
|
+
return readInstallIdentity(installPointerPath(installPath))?.version ?? null;
|
|
20949
21217
|
}
|
|
20950
21218
|
/**
|
|
20951
21219
|
* Run the install's own front end: `<resolved shim> update`.
|
|
@@ -21175,8 +21443,17 @@ ${heal.removed.join("\n")}`,
|
|
|
21175
21443
|
* The install this attempt runs, recorded so a later launch does not have to resolve
|
|
21176
21444
|
* one of its own: the reconciliation reads this, and a marker without it (an older
|
|
21177
21445
|
* build's) is the only case that falls back.
|
|
21446
|
+
*
|
|
21447
|
+
* RECORDED THROUGH ITS OWN POINTER where the layout has one, so the record outlives
|
|
21448
|
+
* the tree it names: on a generation install the flip an install performs is visible
|
|
21449
|
+
* only through `<stable>/current`, and the generation this attempt started from is
|
|
21450
|
+
* unreferenced the moment it is superseded - which makes it prunable, and a record
|
|
21451
|
+
* naming a pruned tree reads as "nothing moved" for an install that landed. A record
|
|
21452
|
+
* an older build wrote carries the concrete generation path instead, which the reader
|
|
21453
|
+
* resolves through the same pointer (`installPointerPath` is idempotent, so both
|
|
21454
|
+
* spellings land in the same place).
|
|
21178
21455
|
*/
|
|
21179
|
-
installPath
|
|
21456
|
+
installPath: installPointerPath(installPath)
|
|
21180
21457
|
};
|
|
21181
21458
|
writePendingServerUpdateMarker(this.markerDir(), marker);
|
|
21182
21459
|
const run = await this.runGlobalUpdate(
|
|
@@ -21198,7 +21475,7 @@ ${heal.removed.join("\n")}`,
|
|
|
21198
21475
|
deadlineAt: marker.deadlineAt,
|
|
21199
21476
|
groupPid: pid,
|
|
21200
21477
|
groupStartedAt: readProcessStartStamp(pid),
|
|
21201
|
-
installPath
|
|
21478
|
+
installPath: installPointerPath(installPath)
|
|
21202
21479
|
});
|
|
21203
21480
|
}
|
|
21204
21481
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-
|
|
1
|
+
import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-DvPSd9xZ.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-BylrYsTL.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-CItomUrR.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=tℜif(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
|
|
1
|
+
import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-BylrYsTL.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=tℜif(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
|
package/out/renderer/assets/{agent-details-page-jO2PvB7X.js → agent-details-page-DnhScOnI.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as le,r as S,j as e,L as ce,T as G,B as l,S as L,l as te,m as q,n as _,h as v,X as de,o as w,A as J,i as V,k as X,c as Z}from"./icon-B19NuJYm.js";import{g as ae,as as ue,f as z,a4 as b,a6 as M,ar as O,at as I,au as me,av as he,aw as xe,ax as ge,ay as R,az as je,aA as se,aB as fe,h as ne,aC as ye,aD as pe,u as ve,ah as we,ap as be,aE as Ce,B as Ne,aF as Ae,aG as ke,aH as De,aj as Se,aI as Ee,aJ as ee,aq as Te,aK as Fe,aL as Pe}from"./index-
|
|
1
|
+
import{a as le,r as S,j as e,L as ce,T as G,B as l,S as L,l as te,m as q,n as _,h as v,X as de,o as w,A as J,i as V,k as X,c as Z}from"./icon-B19NuJYm.js";import{g as ae,as as ue,f as z,a4 as b,a6 as M,ar as O,at as I,au as me,av as he,aw as xe,ax as ge,ay as R,az as je,aA as se,aB as fe,h as ne,aC as ye,aD as pe,u as ve,ah as we,ap as be,aE as Ce,B as Ne,aF as Ae,aG as ke,aH as De,aj as Se,aI as Ee,aJ as ee,aq as Te,aK as Fe,aL as Pe}from"./index-CanR4Tr_.js";import{b as qe,i as _e,u as Le,a as ze}from"./use-agent-like-mutation-C-7u11gk.js";/**
|
|
2
2
|
* @license lucide-react v0.507.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as ce,r,j as e,c as L,I as de,b as K,d as Y,e as $,f as q,g as B,B as C,h as c,A as ue,i as he,k as ge}from"./icon-B19NuJYm.js";import{a4 as G,ah as me,ai as xe,aj as fe,ak as be,al as Z,r as pe,am as ve,h as je,an as Ne,ao as we,ap as ye}from"./index-
|
|
1
|
+
import{a as ce,r,j as e,c as L,I as de,b as K,d as Y,e as $,f as q,g as B,B as C,h as c,A as ue,i as he,k as ge}from"./icon-B19NuJYm.js";import{a4 as G,ah as me,ai as xe,aj as fe,ak as be,al as Z,r as pe,am as ve,h as je,an as Ne,ao as we,ap as ye}from"./index-CanR4Tr_.js";import{C as Se}from"./compact-pagination-4Yt2xb-Y.js";import{P as ke}from"./page-header-D1a45b0y.js";import{u as Ce,a as Ae,b as Re,i as Ee}from"./use-agent-like-mutation-C-7u11gk.js";/**
|
|
2
2
|
* @license lucide-react v0.507.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./legacy-agents-page-
|
|
2
|
-
import{u as O,a as Q,b as J,d as V,c as W,e as G,f as H,g as X,B as Y,U as Z,P as ee,r as te,_ as ae,h as $,i as z,j as U}from"./index-CbEqOOj5.js";import{j as e,r as n,B as u,c as P}from"./icon-B19NuJYm.js";const se=n.lazy(()=>ae(()=>import("./legacy-agents-page-BV5wNeFT.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),d="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:v,onSaved:g}){const[r,k]=n.useState(!1),[o,m]=n.useState(v),[p,b]=n.useState(t?.name??""),[x,C]=n.useState(t?.kind??"role"),[h,y]=n.useState(t?.description??""),[j,S]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,N]=n.useState(t?.effort??"inherit"),[R,L]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[c,l]=n.useState(null),i=n.useRef(null),w=$(),E=v||r,K=async s=>{if(s.preventDefault(),f)return;const M={kind:x,description:h,instructions:j,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:R},A=JSON.stringify({name:p,fields:M,fresh:E});if(i.current&&i.current.body!==A){l("The previous save has not been confirmed. Retry it unchanged or reload the profile to reconcile before editing again.");return}i.current??={id:crypto.randomUUID(),body:A},a(!0),l(null);try{const q=await U({op:E?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,m(!1),g(q.name)}catch(q){l(q instanceof Error?q.message:"Profile could not be saved.")}finally{a(!1)}},F=async()=>{if(!(!t||f)){a(!0),l(null);try{const s=await U({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});m(!1),k(!1),i.current=null,b(s.name),C(s.kind),y(s.description??""),S(s.instructions??""),D(s.tools?.join(", ")??""),N(s.effort??"inherit"),L(s.delegate??!1),g(s.name)}catch(s){l(s instanceof Error?s.message:"Profile could not be installed.")}finally{a(!1)}}};return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:E?r?"Extend agent":"Create agent":t?.name}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"Reusable instructions shared by agent commands, subagents and teams. Chats remain separate."})]}),t&&!E&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"text-meta text-ink-muted",children:[t.source==="builtin"?"Built-in":t.source==="installed"?"Installed":"Custom",t.divergent_fields?.length?" · Modified":""," ·"," ",t.kind]}),t.source==="builtin"?e.jsx(u,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(u,{variant:"outline",onClick:()=>m(!0),children:"Edit"}),e.jsx(u,{variant:"outline",onClick:()=>{k(!0),m(!0),b(""),i.current=null},children:"Extend"}),e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),w("/chat")},children:"New chat"})]}),c&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:c}),!o&&t?.source==="builtin"&&e.jsx("p",{id:"builtin-readonly",className:"text-body-sm text-ink-muted",children:"Built-in agents are read-only. Install this one to edit it, or Extend it to start a separate agent from its instructions."}),e.jsxs("form",{onSubmit:K,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:!o||f,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:d,value:p,disabled:!E,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>b(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:d,value:x,disabled:!E,onChange:s=>C(s.target.value),children:[e.jsx("option",{value:"role",children:"Role"}),e.jsx("option",{value:"specialist",children:"Specialist"})]})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"When to use this agent"}),e.jsx("input",{className:d,value:h,maxLength:8e3,onChange:s=>y(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:P(d,"min-h-52"),value:j,required:!0,maxLength:8e3,onChange:s=>S(s.target.value)})]}),x==="role"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Allowed tools"}),e.jsx("input",{className:d,value:_,onChange:s=>D(s.target.value),placeholder:"All tools when empty; otherwise comma-separated names"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Effort tier"}),e.jsx("input",{className:d,value:I,onChange:s=>N(s.target.value),"aria-describedby":"effort-help"}),e.jsx("span",{id:"effort-help",className:"text-meta text-ink-muted",children:"Use inherit, or a tier configured in backend settings. Unsupported tiers are rejected before saving."})]}),e.jsxs("label",{className:"flex items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:R,onChange:s=>L(s.target.checked)}),"May delegate to subagents"]})]})]}),o&&e.jsx(u,{type:"submit",disabled:f,children:f?"Saving…":E?"Create agent":"Save changes"})]}),!o&&t?.packaged_instructions&&t.divergent_fields?.length?e.jsxs("details",{className:"text-body-sm",children:[e.jsx("summary",{children:"Compare packaged instructions"}),e.jsx("pre",{className:"mt-2 whitespace-pre-wrap text-body-sm text-ink-muted",children:t.packaged_instructions})]}):null]})}function B({team:t,onSaved:v}){const[g,r]=n.useState(t?.name??""),[k,o]=n.useState(t?.description??""),[m,p]=n.useState(t?.manager??"manager"),[b,x]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[C,h]=n.useState(t?.instructions??""),[y,j]=n.useState(t?.project??""),[S,_]=n.useState(!1),[D,I]=n.useState(null),N=n.useRef(null),R=$(),L=async a=>{if(a.preventDefault(),S)return;const c={name:g,description:k,manager:m,members:b.map(({key:i,...w})=>w),instructions:C,project:y},l=JSON.stringify(c);if(N.current&&N.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}N.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await U({op:"teams.update",name:t.name,requestId:N.current.id,fields:c}):await U({op:"teams.create",requestId:N.current.id,fields:c});N.current=null,v(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,c)=>x(l=>l.map((i,w)=>w===a?{...i,...c}:i));return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:t?t.name:"Create team"}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"The manager leads the chat. Members retain their own instructions and start only when delegated work."})]}),t&&e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),R("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:L,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:S,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:d,required:!0,maxLength:64,value:g,onChange:a=>r(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:d,value:k,onChange:a=>o(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Manager agent"}),e.jsx("input",{className:d,required:!0,value:m,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),b.map((a,c)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:P(d,"w-48 flex-1"),"aria-label":`Member ${c+1} name`,required:!0,value:a.role,onChange:l=>f(c,{role:l.target.value})}),e.jsxs("select",{className:P(d,"w-32"),"aria-label":`Member ${c+1} kind`,value:a.kind,onChange:l=>f(c,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:P(d,"w-20"),"aria-label":`Member ${c+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(c,{count:Number(l.target.value)})}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>x(l=>l.filter((i,w)=>w!==c)),children:"Remove"})]},a.key)),e.jsx(u,{type:"button",variant:"outline",onClick:()=>x(a=>[...a,{role:"",count:1,kind:"agent",key:crypto.randomUUID()}]),children:"Add member"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Collaboration instructions"}),e.jsx("textarea",{className:P(d,"min-h-36"),maxLength:8e3,value:C,onChange:a=>h(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Project brief"}),e.jsx("textarea",{className:P(d,"min-h-36"),maxLength:8e3,value:y,onChange:a=>j(a.target.value)})]})]}),e.jsx(u,{type:"submit",disabled:S,children:S?"Saving…":t?"Save team":"Create team"})]})]})}function le(){const{agentId:t}=O(),[v,g]=Q(),r=v.get("kind")==="team"||v.get("create")==="team",k=v.has("create"),o=v.get("name"),m=J(),p=V(m.data,r?"team_catalogue":"profile_catalogue"),b=W(p&&!r),x=G(p&&r),C=H(),h=X({queryKey:["desktop",r?"team":"profile",o],enabled:p&&!!o&&!k,queryFn:()=>U({op:r?"teams.get":"profiles.get",name:o??""}),retry:!1}),y=async j=>{await C.invalidateQueries({queryKey:["desktop"]}),g({kind:r?"team":"agent",name:j})};return t?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(se,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{className:"flex w-64 shrink-0 flex-col gap-4 border-r border-hairline bg-surface p-4",children:[e.jsx("h1",{className:"text-heading",children:"Agents and teams"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(u,{variant:r?"ghost":"outline",onClick:()=>g({kind:"agent"}),children:[e.jsx(Y,{className:"size-4"}),"Agents"]}),e.jsxs(u,{variant:r?"outline":"ghost",onClick:()=>g({kind:"team"}),children:[e.jsx(Z,{className:"size-4"}),"Teams"]})]}),e.jsxs(u,{variant:"outline",disabled:!p,onClick:()=>g({create:r?"team":"agent"}),children:[e.jsx(ee,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?x.data:b.data)?.map(j=>e.jsx("button",{type:"button",className:P("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",j.name===o&&te),onClick:()=>g({kind:r?"team":"agent",name:j.name}),children:e.jsx("span",{className:"truncate",children:j.name})},j.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:p?b.error||x.error||h.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:b.error?.message||x.error?.message||h.error?.message}),e.jsx(u,{variant:"outline",onClick:()=>{b.refetch(),x.refetch(),h.refetch()},children:"Retry"})]}):k?r?e.jsx(B,{onSaved:y},"create-team"):e.jsx(T,{creating:!0,onSaved:y},"create-agent"):o&&h.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):o&&h.data?r?e.jsx(B,{team:h.data,onSaved:y},o):e.jsx(T,{profile:h.data,creating:!1,onSaved:y},`${o}:${h.data.source}`):e.jsxs("div",{children:[e.jsx("h2",{className:"text-title",children:r?"Reusable teams":"Reusable agents"}),e.jsx("p",{className:"mt-2 text-body text-ink-muted",children:"Select a definition to view or edit it. A new chat does not change its definition."})]}):e.jsxs("div",{"aria-live":"polite",className:"space-y-3 text-body-sm",children:[e.jsx("p",{children:m.isLoading?"Connecting to the backend…":m.error?m.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(u,{variant:"outline",onClick:()=>void m.refetch(),children:"Retry connection"})]})})]})}export{le as AgentsPage};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./legacy-agents-page-CpvPE5Y4.js","./icon-B19NuJYm.js","./icon-DryJ1IIw.css","./page-header-D1a45b0y.js","./index-CanR4Tr_.js","./index-D_SlEnpm.css","./radient-auth-buttons-Ctvl_4_t.js","./compact-pagination-4Yt2xb-Y.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as O,a as Q,b as J,d as V,c as W,e as G,f as H,g as X,B as Y,U as Z,P as ee,r as te,_ as ae,h as $,i as z,j as U}from"./index-CanR4Tr_.js";import{j as e,r as n,B as u,c as P}from"./icon-B19NuJYm.js";const se=n.lazy(()=>ae(()=>import("./legacy-agents-page-CpvPE5Y4.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),d="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:v,onSaved:g}){const[r,k]=n.useState(!1),[o,m]=n.useState(v),[p,b]=n.useState(t?.name??""),[x,C]=n.useState(t?.kind??"role"),[h,y]=n.useState(t?.description??""),[j,S]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,N]=n.useState(t?.effort??"inherit"),[R,L]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[c,l]=n.useState(null),i=n.useRef(null),w=$(),E=v||r,K=async s=>{if(s.preventDefault(),f)return;const M={kind:x,description:h,instructions:j,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:R},A=JSON.stringify({name:p,fields:M,fresh:E});if(i.current&&i.current.body!==A){l("The previous save has not been confirmed. Retry it unchanged or reload the profile to reconcile before editing again.");return}i.current??={id:crypto.randomUUID(),body:A},a(!0),l(null);try{const q=await U({op:E?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,m(!1),g(q.name)}catch(q){l(q instanceof Error?q.message:"Profile could not be saved.")}finally{a(!1)}},F=async()=>{if(!(!t||f)){a(!0),l(null);try{const s=await U({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});m(!1),k(!1),i.current=null,b(s.name),C(s.kind),y(s.description??""),S(s.instructions??""),D(s.tools?.join(", ")??""),N(s.effort??"inherit"),L(s.delegate??!1),g(s.name)}catch(s){l(s instanceof Error?s.message:"Profile could not be installed.")}finally{a(!1)}}};return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:E?r?"Extend agent":"Create agent":t?.name}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"Reusable instructions shared by agent commands, subagents and teams. Chats remain separate."})]}),t&&!E&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"text-meta text-ink-muted",children:[t.source==="builtin"?"Built-in":t.source==="installed"?"Installed":"Custom",t.divergent_fields?.length?" · Modified":""," ·"," ",t.kind]}),t.source==="builtin"?e.jsx(u,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(u,{variant:"outline",onClick:()=>m(!0),children:"Edit"}),e.jsx(u,{variant:"outline",onClick:()=>{k(!0),m(!0),b(""),i.current=null},children:"Extend"}),e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),w("/chat")},children:"New chat"})]}),c&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:c}),!o&&t?.source==="builtin"&&e.jsx("p",{id:"builtin-readonly",className:"text-body-sm text-ink-muted",children:"Built-in agents are read-only. Install this one to edit it, or Extend it to start a separate agent from its instructions."}),e.jsxs("form",{onSubmit:K,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:!o||f,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:d,value:p,disabled:!E,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>b(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:d,value:x,disabled:!E,onChange:s=>C(s.target.value),children:[e.jsx("option",{value:"role",children:"Role"}),e.jsx("option",{value:"specialist",children:"Specialist"})]})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"When to use this agent"}),e.jsx("input",{className:d,value:h,maxLength:8e3,onChange:s=>y(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:P(d,"min-h-52"),value:j,required:!0,maxLength:8e3,onChange:s=>S(s.target.value)})]}),x==="role"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Allowed tools"}),e.jsx("input",{className:d,value:_,onChange:s=>D(s.target.value),placeholder:"All tools when empty; otherwise comma-separated names"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Effort tier"}),e.jsx("input",{className:d,value:I,onChange:s=>N(s.target.value),"aria-describedby":"effort-help"}),e.jsx("span",{id:"effort-help",className:"text-meta text-ink-muted",children:"Use inherit, or a tier configured in backend settings. Unsupported tiers are rejected before saving."})]}),e.jsxs("label",{className:"flex items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:R,onChange:s=>L(s.target.checked)}),"May delegate to subagents"]})]})]}),o&&e.jsx(u,{type:"submit",disabled:f,children:f?"Saving…":E?"Create agent":"Save changes"})]}),!o&&t?.packaged_instructions&&t.divergent_fields?.length?e.jsxs("details",{className:"text-body-sm",children:[e.jsx("summary",{children:"Compare packaged instructions"}),e.jsx("pre",{className:"mt-2 whitespace-pre-wrap text-body-sm text-ink-muted",children:t.packaged_instructions})]}):null]})}function B({team:t,onSaved:v}){const[g,r]=n.useState(t?.name??""),[k,o]=n.useState(t?.description??""),[m,p]=n.useState(t?.manager??"manager"),[b,x]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[C,h]=n.useState(t?.instructions??""),[y,j]=n.useState(t?.project??""),[S,_]=n.useState(!1),[D,I]=n.useState(null),N=n.useRef(null),R=$(),L=async a=>{if(a.preventDefault(),S)return;const c={name:g,description:k,manager:m,members:b.map(({key:i,...w})=>w),instructions:C,project:y},l=JSON.stringify(c);if(N.current&&N.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}N.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await U({op:"teams.update",name:t.name,requestId:N.current.id,fields:c}):await U({op:"teams.create",requestId:N.current.id,fields:c});N.current=null,v(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,c)=>x(l=>l.map((i,w)=>w===a?{...i,...c}:i));return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:t?t.name:"Create team"}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"The manager leads the chat. Members retain their own instructions and start only when delegated work."})]}),t&&e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),R("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:L,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:S,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:d,required:!0,maxLength:64,value:g,onChange:a=>r(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:d,value:k,onChange:a=>o(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Manager agent"}),e.jsx("input",{className:d,required:!0,value:m,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),b.map((a,c)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:P(d,"w-48 flex-1"),"aria-label":`Member ${c+1} name`,required:!0,value:a.role,onChange:l=>f(c,{role:l.target.value})}),e.jsxs("select",{className:P(d,"w-32"),"aria-label":`Member ${c+1} kind`,value:a.kind,onChange:l=>f(c,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:P(d,"w-20"),"aria-label":`Member ${c+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(c,{count:Number(l.target.value)})}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>x(l=>l.filter((i,w)=>w!==c)),children:"Remove"})]},a.key)),e.jsx(u,{type:"button",variant:"outline",onClick:()=>x(a=>[...a,{role:"",count:1,kind:"agent",key:crypto.randomUUID()}]),children:"Add member"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Collaboration instructions"}),e.jsx("textarea",{className:P(d,"min-h-36"),maxLength:8e3,value:C,onChange:a=>h(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Project brief"}),e.jsx("textarea",{className:P(d,"min-h-36"),maxLength:8e3,value:y,onChange:a=>j(a.target.value)})]})]}),e.jsx(u,{type:"submit",disabled:S,children:S?"Saving…":t?"Save team":"Create team"})]})]})}function le(){const{agentId:t}=O(),[v,g]=Q(),r=v.get("kind")==="team"||v.get("create")==="team",k=v.has("create"),o=v.get("name"),m=J(),p=V(m.data,r?"team_catalogue":"profile_catalogue"),b=W(p&&!r),x=G(p&&r),C=H(),h=X({queryKey:["desktop",r?"team":"profile",o],enabled:p&&!!o&&!k,queryFn:()=>U({op:r?"teams.get":"profiles.get",name:o??""}),retry:!1}),y=async j=>{await C.invalidateQueries({queryKey:["desktop"]}),g({kind:r?"team":"agent",name:j})};return t?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(se,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{className:"flex w-64 shrink-0 flex-col gap-4 border-r border-hairline bg-surface p-4",children:[e.jsx("h1",{className:"text-heading",children:"Agents and teams"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(u,{variant:r?"ghost":"outline",onClick:()=>g({kind:"agent"}),children:[e.jsx(Y,{className:"size-4"}),"Agents"]}),e.jsxs(u,{variant:r?"outline":"ghost",onClick:()=>g({kind:"team"}),children:[e.jsx(Z,{className:"size-4"}),"Teams"]})]}),e.jsxs(u,{variant:"outline",disabled:!p,onClick:()=>g({create:r?"team":"agent"}),children:[e.jsx(ee,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?x.data:b.data)?.map(j=>e.jsx("button",{type:"button",className:P("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",j.name===o&&te),onClick:()=>g({kind:r?"team":"agent",name:j.name}),children:e.jsx("span",{className:"truncate",children:j.name})},j.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:p?b.error||x.error||h.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:b.error?.message||x.error?.message||h.error?.message}),e.jsx(u,{variant:"outline",onClick:()=>{b.refetch(),x.refetch(),h.refetch()},children:"Retry"})]}):k?r?e.jsx(B,{onSaved:y},"create-team"):e.jsx(T,{creating:!0,onSaved:y},"create-agent"):o&&h.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):o&&h.data?r?e.jsx(B,{team:h.data,onSaved:y},o):e.jsx(T,{profile:h.data,creating:!1,onSaved:y},`${o}:${h.data.source}`):e.jsxs("div",{children:[e.jsx("h2",{className:"text-title",children:r?"Reusable teams":"Reusable agents"}),e.jsx("p",{className:"mt-2 text-body text-ink-muted",children:"Select a definition to view or edit it. A new chat does not change its definition."})]}):e.jsxs("div",{"aria-live":"polite",className:"space-y-3 text-body-sm",children:[e.jsx("p",{children:m.isLoading?"Connecting to the backend…":m.error?m.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(u,{variant:"outline",onClick:()=>void m.refetch(),children:"Retry connection"})]})})]})}export{le as AgentsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as ln,p as un,l as H,s as q,m as B,n as an,o as y,t as tn,q as L,v as _,x as rn,y as o,z as sn,A as on,D as fn}from"./index-
|
|
1
|
+
import{w as ln,p as un,l as H,s as q,m as B,n as an,o as y,t as tn,q as L,v as _,x as rn,y as o,z as sn,A as on,D as fn}from"./index-CanR4Tr_.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,E,D,v,A,C,u){var I=E-l,s=D-h,n=C-v,m=u-A,a=m*I-n*s;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*I,h+a*s]}function W(l,h,E,D,v,A,C){var u=l-E,I=h-D,s=(C?A:-A)/L(u*u+I*I),n=s*I,m=-s*u,a=l+n,i=h+m,f=E+n,c=D+m,F=(a+f)/2,t=(i+c)/2,p=f-a,g=c-i,R=p*p+g*g,T=v-A,P=a*c-f*i,O=(g<0?-1:1)*L(on(0,T*T*R-P*P)),S=(P*g-p*O)/R,j=(-P*p-g*O)/R,w=(P*g+p*O)/R,d=(-P*p+g*O)/R,x=S-F,e=j-t,r=w-F,G=d-t;return x*x+e*e>r*r+G*G&&(S=w,j=d),{cx:S,cy:j,x01:-n,y01:-m,x11:S*(v/T-1),y11:j*(v/T-1)}}function hn(){var l=cn,h=yn,E=B(0),D=null,v=gn,A=mn,C=pn,u=null,I=ln(s);function s(){var n,m,a=+l.apply(this,arguments),i=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=rn(c-f),t=c>f;if(u||(u=n=I()),i<a&&(m=i,i=a,a=m),!(i>y))u.moveTo(0,0);else if(F>tn-y)u.moveTo(i*H(f),i*q(f)),u.arc(0,0,i,f,c,!t),a>y&&(u.moveTo(a*H(c),a*q(c)),u.arc(0,0,a,c,f,t));else{var p=f,g=c,R=f,T=c,P=F,O=F,S=C.apply(this,arguments)/2,j=S>y&&(D?+D.apply(this,arguments):L(a*a+i*i)),w=_(rn(i-a)/2,+E.apply(this,arguments)),d=w,x=w,e,r;if(j>y){var G=sn(j/a*q(S)),M=sn(j/i*q(S));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(O-=M*2)>y?(M*=t?1:-1,p+=M,g-=M):(O=0,p=g=(f+c)/2)}var J=i*H(p),K=i*q(p),N=a*H(T),Q=a*q(T);if(w>y){var U=i*H(g),V=i*q(g),X=a*H(R),Y=a*q(R),z;if(F<un)if(z=dn(J,K,X,Y,U,V,N,Q)){var Z=J-z[0],$=K-z[1],k=U-z[0],b=V-z[1],nn=1/q(fn((Z*k+$*b)/(L(Z*Z+$*$)*L(k*k+b*b)))/2),en=L(z[0]*z[0]+z[1]*z[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(i-en)/(nn+1))}else d=x=0}O>y?x>y?(e=W(X,Y,J,K,i,x,t),r=W(U,V,N,Q,i,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,i,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),u.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(u.moveTo(J,K),u.arc(0,0,i,p,g,!t)):u.moveTo(J,K),!(a>y)||!(P>y)?u.lineTo(N,Q):d>y?(e=W(N,Q,U,V,a,-d,t),r=W(J,K,X,Y,a,-d,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,a,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),u.arc(r.cx,r.cy,d,o(r.y11,r.x11),o(r.y01,r.x01),!t))):u.arc(0,0,a,T,R,t)}if(u.closePath(),n)return u=null,n+""||null}return s.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-un/2;return[H(m)*n,q(m)*n]},s.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),s):l},s.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),s):h},s.cornerRadius=function(n){return arguments.length?(E=typeof n=="function"?n:B(+n),s):E},s.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),s):D},s.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),s):v},s.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),s):A},s.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),s):C},s.context=function(n){return arguments.length?(u=n??null,s):u},s}export{hn as d};
|