@dsh-electron/dsh-plugin-multi-root-workspace 0.1.10 → 0.1.12
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/CHANGELOG.en.md +25 -1
- package/CHANGELOG.md +25 -1
- package/README.en.md +11 -9
- package/README.md +11 -9
- package/cordis.patch.yml +3 -2
- package/lib/auto-review.js +1 -1
- package/lib/client.js +252 -129
- package/lib/client.js.map +1 -1
- package/lib/{command-BGdz7VBH.js → command-CmLekG1M.js} +3 -2
- package/lib/command.js +1 -1
- package/lib/{compat-D-MljsPV.js → compat-Bg2HFVMX.js} +6 -1
- package/lib/compat.js +1 -1
- package/lib/{sandbox-CXk5h-ct.js → dialects-Dr4rDR-H.js} +6 -264
- package/lib/{fs-BTXySwSG.js → fs-CfzJq2wd.js} +23 -8
- package/lib/fs.js +1 -1
- package/lib/index.js +7 -6
- package/lib/{instructions-MePoRigy.js → instructions-KsUwUFE0.js} +53 -37
- package/lib/instructions.js +1 -1
- package/lib/lsp.js +19 -16
- package/lib/native-win32-2waCRkPI.js +312 -0
- package/lib/process-fence.js +62 -12
- package/lib/protocol-4zdwV7u4.js +641 -0
- package/lib/{registry-KSsmU393.js → registry-YTUOjmVu.js} +368 -25
- package/lib/registry-operation-C2ZV3Jhw.js +116 -0
- package/lib/registry.js +3 -2
- package/lib/{review-context-AH-SXHmj.js → review-context-NDpKeMCc.js} +1 -1
- package/lib/review-context.js +1 -1
- package/lib/sandbox-C-vCJCp3.js +278 -0
- package/lib/sandbox.js +1 -1
- package/lib/scope.js +70 -10
- package/lib/skills.js +48 -29
- package/lib/types/authority/native-win32.d.ts +7 -0
- package/lib/types/authority/native.d.ts +23 -0
- package/lib/types/authority/protocol.d.ts +70 -0
- package/lib/types/client/open-in-app/OpenInAppAction.d.ts +5 -3
- package/lib/types/client/open-in-app/OpenTargetButton.d.ts +16 -10
- package/lib/types/client/open-in-app/adapter.d.ts +5 -1
- package/lib/types/client/open-in-app/controller.d.ts +5 -2
- package/lib/types/client/open-in-app/device.d.ts +11 -0
- package/lib/types/client/open-in-app/locales.d.ts +1 -1
- package/lib/types/client/open-in-app/open-path.d.ts +6 -5
- package/lib/types/client/open-in-app/open-toast.d.ts +39 -0
- package/lib/types/client/open-in-app/outcome.d.ts +23 -0
- package/lib/types/client/styles.d.ts +1 -1
- package/lib/types/compat/authority-storage.d.ts +6 -0
- package/lib/types/compat/dsh-version.d.ts +4 -4
- package/lib/types/compat/open-in-app-device.d.ts +23 -0
- package/lib/types/compat/process-entrypoints.d.ts +2 -0
- package/lib/types/compat/process-profile.d.ts +3 -0
- package/lib/types/compat/sandbox-confine.d.ts +2 -0
- package/lib/types/fs.d.ts +4 -1
- package/lib/types/instructions.d.ts +0 -47
- package/lib/types/registry-operation.d.ts +31 -0
- package/lib/types/registry.d.ts +47 -6
- package/lib/types/scope.d.ts +12 -0
- package/lib/types/skills/catalog.d.ts +3 -0
- package/lib/types/skills/pool.d.ts +1 -1
- package/lib/workspace-files.js +63 -7
- package/package.json +87 -80
- package/lib/types/client/open-in-app/open-failure-toast.d.ts +0 -11
package/lib/client.js
CHANGED
|
@@ -123,7 +123,7 @@ window.__ModuleLoader__.load({
|
|
|
123
123
|
return typeof count === "number" && count > 0;
|
|
124
124
|
}
|
|
125
125
|
//#endregion
|
|
126
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
126
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/util.js
|
|
127
127
|
function getEnumValues(entries) {
|
|
128
128
|
const numericValues = Object.values(entries).filter((v) => typeof v === "number");
|
|
129
129
|
return Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
|
|
@@ -430,6 +430,17 @@ window.__ModuleLoader__.load({
|
|
|
430
430
|
function unwrapMessage(message) {
|
|
431
431
|
return typeof message === "string" ? message : message?.message;
|
|
432
432
|
}
|
|
433
|
+
/** The leading size checks of `defChecks` that set an upper bound, each paired with it. */
|
|
434
|
+
function sizeCaps(defChecks) {
|
|
435
|
+
const caps = [];
|
|
436
|
+
for (const ch of defChecks ?? []) {
|
|
437
|
+
const d = ch._zod.def;
|
|
438
|
+
if (!/_(length|size)$|_equals$/.test(d.check)) break;
|
|
439
|
+
const max = d.maximum ?? d.length ?? d.size;
|
|
440
|
+
if (max >= 0) caps.push([max, ch]);
|
|
441
|
+
}
|
|
442
|
+
return caps;
|
|
443
|
+
}
|
|
433
444
|
function attachSchema(issues, start, inst) {
|
|
434
445
|
var _a;
|
|
435
446
|
for (let i = start; i < issues.length; i++) (_a = issues[i]).schema ?? (_a.schema = inst);
|
|
@@ -506,7 +517,6 @@ window.__ModuleLoader__.load({
|
|
|
506
517
|
});
|
|
507
518
|
else defineBound(proto, key, desc.value);
|
|
508
519
|
}
|
|
509
|
-
for (const sym of Object.getOwnPropertySymbols(table)) defineBound(proto, sym, table[sym]);
|
|
510
520
|
}
|
|
511
521
|
/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */
|
|
512
522
|
function own(inst, key, value, enumerable = true) {
|
|
@@ -647,7 +657,7 @@ window.__ModuleLoader__.load({
|
|
|
647
657
|
return fn;
|
|
648
658
|
}
|
|
649
659
|
//#endregion
|
|
650
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
660
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/core.js
|
|
651
661
|
var _a$1;
|
|
652
662
|
const _zodDesc = {
|
|
653
663
|
value: void 0,
|
|
@@ -692,8 +702,7 @@ window.__ModuleLoader__.load({
|
|
|
692
702
|
} finally {
|
|
693
703
|
_zodDesc.value = void 0;
|
|
694
704
|
}
|
|
695
|
-
}
|
|
696
|
-
if (inst._zod.traits.has(name)) return;
|
|
705
|
+
} else if (inst._zod.traits.has(name)) return;
|
|
697
706
|
inst._zod.traits.add(name);
|
|
698
707
|
initializer(inst, def);
|
|
699
708
|
if (initialized) {
|
|
@@ -754,7 +763,7 @@ window.__ModuleLoader__.load({
|
|
|
754
763
|
return globalConfig;
|
|
755
764
|
}
|
|
756
765
|
//#endregion
|
|
757
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
766
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/errors.js
|
|
758
767
|
function _getMessage() {
|
|
759
768
|
const internals = this._zod;
|
|
760
769
|
internals.message ?? (internals.message = JSON.stringify(internals.def, jsonStringifyReplacer, 2));
|
|
@@ -870,7 +879,7 @@ window.__ModuleLoader__.load({
|
|
|
870
879
|
return fieldErrors;
|
|
871
880
|
}
|
|
872
881
|
//#endregion
|
|
873
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
882
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/parse.js
|
|
874
883
|
function finalizeParams(callee, params) {
|
|
875
884
|
return {
|
|
876
885
|
callee: params?.callee ?? callee,
|
|
@@ -1073,7 +1082,7 @@ window.__ModuleLoader__.load({
|
|
|
1073
1082
|
return _safeParseAsync(_Err)(schema, value, _ctx);
|
|
1074
1083
|
};
|
|
1075
1084
|
//#endregion
|
|
1076
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
1085
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/regexes.js
|
|
1077
1086
|
/**
|
|
1078
1087
|
* @deprecated CUID v1 is deprecated by its authors due to information leakage
|
|
1079
1088
|
* (timestamps embedded in the id). Use {@link cuid2} instead.
|
|
@@ -1144,7 +1153,7 @@ window.__ModuleLoader__.load({
|
|
|
1144
1153
|
const lowercase = /^[^A-Z]*$/;
|
|
1145
1154
|
const uppercase = /^[^a-z]*$/;
|
|
1146
1155
|
//#endregion
|
|
1147
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
1156
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/checks.js
|
|
1148
1157
|
const $ZodCheck = /*@__PURE__*/ $constructor("$ZodCheck", (inst, def) => {
|
|
1149
1158
|
var _a;
|
|
1150
1159
|
inst._zod ?? (inst._zod = {});
|
|
@@ -1440,7 +1449,7 @@ window.__ModuleLoader__.load({
|
|
|
1440
1449
|
};
|
|
1441
1450
|
});
|
|
1442
1451
|
//#endregion
|
|
1443
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
1452
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/doc.js
|
|
1444
1453
|
var Doc = class {
|
|
1445
1454
|
constructor(args = [], closed = {}) {
|
|
1446
1455
|
this.content = [];
|
|
@@ -1474,14 +1483,14 @@ window.__ModuleLoader__.load({
|
|
|
1474
1483
|
}
|
|
1475
1484
|
};
|
|
1476
1485
|
//#endregion
|
|
1477
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
1486
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/versions.js
|
|
1478
1487
|
const version = {
|
|
1479
1488
|
major: 4,
|
|
1480
1489
|
minor: 6,
|
|
1481
|
-
patch:
|
|
1490
|
+
patch: 7
|
|
1482
1491
|
};
|
|
1483
1492
|
//#endregion
|
|
1484
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
1493
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/schemas.js
|
|
1485
1494
|
const $ZodType = /*@__PURE__*/ $constructor("$ZodType", (inst, def) => {
|
|
1486
1495
|
var _a;
|
|
1487
1496
|
inst ?? (inst = {});
|
|
@@ -1641,10 +1650,27 @@ window.__ModuleLoader__.load({
|
|
|
1641
1650
|
def.pattern ?? (def.pattern = email);
|
|
1642
1651
|
$ZodStringFormat.init(inst, def);
|
|
1643
1652
|
});
|
|
1644
|
-
|
|
1653
|
+
function canParseURL(input) {
|
|
1654
|
+
try {
|
|
1655
|
+
if (typeof URL !== "undefined" && typeof URL.canParse === "function") return URL.canParse(input);
|
|
1656
|
+
new URL(input);
|
|
1657
|
+
return true;
|
|
1658
|
+
} catch {
|
|
1659
|
+
return false;
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
function validateURL(trimmed, def) {
|
|
1663
|
+
if (!("normalize" in def) && !("hostname" in def) && !("protocol" in def)) return canParseURL(trimmed) || 2;
|
|
1664
|
+
return parseURLObject(trimmed, def);
|
|
1665
|
+
}
|
|
1666
|
+
/** Parses a URL while preserving the non-normalizing HTTP guard. */
|
|
1645
1667
|
function parseURLObject(trimmed, def) {
|
|
1646
1668
|
if (!def.normalize && def.protocol?.source === httpProtocol.source && !/^https?:\/\//i.test(trimmed)) return 1;
|
|
1647
1669
|
try {
|
|
1670
|
+
if (typeof URL !== "undefined") {
|
|
1671
|
+
const URLStatic = URL;
|
|
1672
|
+
if (typeof URLStatic.parse === "function") return URLStatic.parse(trimmed) ?? 2;
|
|
1673
|
+
}
|
|
1648
1674
|
return new URL(trimmed);
|
|
1649
1675
|
} catch {
|
|
1650
1676
|
return 2;
|
|
@@ -1668,7 +1694,7 @@ window.__ModuleLoader__.load({
|
|
|
1668
1694
|
inst._zod.check = (payload) => {
|
|
1669
1695
|
try {
|
|
1670
1696
|
const trimmed = payload.value.trim();
|
|
1671
|
-
const url =
|
|
1697
|
+
const url = validateURL(trimmed, def);
|
|
1672
1698
|
if (url === 1) {
|
|
1673
1699
|
payload.issues.push({
|
|
1674
1700
|
code: "invalid_format",
|
|
@@ -1690,6 +1716,10 @@ window.__ModuleLoader__.load({
|
|
|
1690
1716
|
});
|
|
1691
1717
|
return;
|
|
1692
1718
|
}
|
|
1719
|
+
if (url === true) {
|
|
1720
|
+
payload.value = stripTabAndNewline(trimmed);
|
|
1721
|
+
return;
|
|
1722
|
+
}
|
|
1693
1723
|
if (def.hostname && !urlHostnameOk(url, def.hostname)) payload.issues.push({
|
|
1694
1724
|
code: "invalid_format",
|
|
1695
1725
|
format: "url",
|
|
@@ -1779,12 +1809,7 @@ window.__ModuleLoader__.load({
|
|
|
1779
1809
|
const ipv6Alphabet = /^[0-9a-fA-F:.]+$/;
|
|
1780
1810
|
function isValidIPv6(value) {
|
|
1781
1811
|
if (!ipv6Alphabet.test(value)) return false;
|
|
1782
|
-
|
|
1783
|
-
new URL(`http://[${value}]`);
|
|
1784
|
-
return true;
|
|
1785
|
-
} catch {
|
|
1786
|
-
return false;
|
|
1787
|
-
}
|
|
1812
|
+
return canParseURL(`http://[${value}]`);
|
|
1788
1813
|
}
|
|
1789
1814
|
const $ZodIPv6 = /*@__PURE__*/ $constructor("$ZodIPv6", (inst, def) => {
|
|
1790
1815
|
def.pattern ?? (def.pattern = ipv6);
|
|
@@ -1962,6 +1987,26 @@ window.__ModuleLoader__.load({
|
|
|
1962
1987
|
return payload;
|
|
1963
1988
|
};
|
|
1964
1989
|
});
|
|
1990
|
+
function capSize(inst, size) {
|
|
1991
|
+
const caps = sizeCaps(inst._zod.def.checks);
|
|
1992
|
+
if (!caps.length) return;
|
|
1993
|
+
const cap = Math.min(...caps.map((c) => c[0]));
|
|
1994
|
+
const parse = inst._zod.parse;
|
|
1995
|
+
inst._zod.parse = (payload, ctx) => {
|
|
1996
|
+
const n = size(payload.value);
|
|
1997
|
+
if (n > cap && !ctx?.skipChecks && ctx?.direction !== "backward") {
|
|
1998
|
+
for (const [max, ch] of sizeCaps(inst._zod.def.checks)) if (n > max && ch._zod.def.when(payload)) {
|
|
1999
|
+
const start = payload.issues.length;
|
|
2000
|
+
ch._zod.check(payload);
|
|
2001
|
+
payload.issues[start].continue = false;
|
|
2002
|
+
attachSchema(payload.issues, start, inst);
|
|
2003
|
+
return payload;
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
2006
|
+
return parse(payload, ctx);
|
|
2007
|
+
};
|
|
2008
|
+
}
|
|
2009
|
+
const arraySize = (input) => Array.isArray(input) ? input.length : -1;
|
|
1965
2010
|
function handleArrayResult(result, final, index) {
|
|
1966
2011
|
if (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));
|
|
1967
2012
|
final.value[index] = result.value;
|
|
@@ -1999,6 +2044,7 @@ window.__ModuleLoader__.load({
|
|
|
1999
2044
|
if (proms.length) return Promise.all(proms).then(() => payload);
|
|
2000
2045
|
return payload;
|
|
2001
2046
|
};
|
|
2047
|
+
capSize(inst, arraySize);
|
|
2002
2048
|
});
|
|
2003
2049
|
function handlePropertyResult(result, final, key, input, optin, optout) {
|
|
2004
2050
|
const isPresent = key in input;
|
|
@@ -2107,7 +2153,7 @@ window.__ModuleLoader__.load({
|
|
|
2107
2153
|
}
|
|
2108
2154
|
return propValues;
|
|
2109
2155
|
});
|
|
2110
|
-
const isObject$
|
|
2156
|
+
const isObject$1 = isObject;
|
|
2111
2157
|
const catchall = def.catchall;
|
|
2112
2158
|
let value;
|
|
2113
2159
|
const memo = globalConfig.memoizer;
|
|
@@ -2115,7 +2161,7 @@ window.__ModuleLoader__.load({
|
|
|
2115
2161
|
inst._zod.parse = (payload, ctx) => {
|
|
2116
2162
|
value ?? (value = _normalized.value);
|
|
2117
2163
|
const input = payload.value;
|
|
2118
|
-
if (!isObject$
|
|
2164
|
+
if (!isObject$1(input)) {
|
|
2119
2165
|
payload.issues.push({
|
|
2120
2166
|
expected: "object",
|
|
2121
2167
|
code: "invalid_type",
|
|
@@ -2245,7 +2291,7 @@ window.__ModuleLoader__.load({
|
|
|
2245
2291
|
return doc.compile();
|
|
2246
2292
|
};
|
|
2247
2293
|
let fastpass;
|
|
2248
|
-
const isObject$
|
|
2294
|
+
const isObject$2 = isObject;
|
|
2249
2295
|
const jit = !globalConfig.jitless;
|
|
2250
2296
|
const fastEnabled = jit && allowsEval.value;
|
|
2251
2297
|
const catchall = def.catchall;
|
|
@@ -2253,7 +2299,7 @@ window.__ModuleLoader__.load({
|
|
|
2253
2299
|
inst._zod.parse = (payload, ctx) => {
|
|
2254
2300
|
value ?? (value = _normalized.value);
|
|
2255
2301
|
const input = payload.value;
|
|
2256
|
-
if (!isObject$
|
|
2302
|
+
if (!isObject$2(input)) {
|
|
2257
2303
|
payload.issues.push({
|
|
2258
2304
|
expected: "object",
|
|
2259
2305
|
code: "invalid_type",
|
|
@@ -2683,7 +2729,7 @@ window.__ModuleLoader__.load({
|
|
|
2683
2729
|
}
|
|
2684
2730
|
}
|
|
2685
2731
|
//#endregion
|
|
2686
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
2732
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/memoizer.js
|
|
2687
2733
|
var $ZodCyclicError = class extends Error {
|
|
2688
2734
|
constructor() {
|
|
2689
2735
|
super(`Cannot parse a reference cycle that closes through a transform`);
|
|
@@ -2694,7 +2740,7 @@ window.__ModuleLoader__.load({
|
|
|
2694
2740
|
const STATE = "~memo";
|
|
2695
2741
|
const NO_ISSUES = [];
|
|
2696
2742
|
function isRef(value) {
|
|
2697
|
-
return value !== null &&
|
|
2743
|
+
return value !== null && typeof value === "object";
|
|
2698
2744
|
}
|
|
2699
2745
|
function cloneIssues(issues) {
|
|
2700
2746
|
return issues.map((iss) => iss.path ? {
|
|
@@ -2741,9 +2787,6 @@ window.__ModuleLoader__.load({
|
|
|
2741
2787
|
check(def.catchall);
|
|
2742
2788
|
break;
|
|
2743
2789
|
}
|
|
2744
|
-
case "properties":
|
|
2745
|
-
merge(shape(def.shape, false));
|
|
2746
|
-
break;
|
|
2747
2790
|
case "array":
|
|
2748
2791
|
check(def.element);
|
|
2749
2792
|
break;
|
|
@@ -2939,7 +2982,7 @@ window.__ModuleLoader__.load({
|
|
|
2939
2982
|
return backEdges !== void 0 && isRef(value) && backEdges.has(value);
|
|
2940
2983
|
}
|
|
2941
2984
|
//#endregion
|
|
2942
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
2985
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/locales/en.js
|
|
2943
2986
|
const error = () => {
|
|
2944
2987
|
const Sizable = {
|
|
2945
2988
|
string: {
|
|
@@ -2994,6 +3037,7 @@ window.__ModuleLoader__.load({
|
|
|
2994
3037
|
base64url: "base64url-encoded string",
|
|
2995
3038
|
json_string: "JSON string",
|
|
2996
3039
|
e164: "E.164 number",
|
|
3040
|
+
currency_code: "currency code",
|
|
2997
3041
|
credit_card: "credit card number",
|
|
2998
3042
|
iban: "IBAN",
|
|
2999
3043
|
jwt: "JWT",
|
|
@@ -3046,7 +3090,7 @@ window.__ModuleLoader__.load({
|
|
|
3046
3090
|
return { localeError: error() };
|
|
3047
3091
|
}
|
|
3048
3092
|
//#endregion
|
|
3049
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
3093
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/registries.js
|
|
3050
3094
|
var _a;
|
|
3051
3095
|
var $ZodRegistry = class {
|
|
3052
3096
|
constructor() {
|
|
@@ -3093,13 +3137,17 @@ window.__ModuleLoader__.load({
|
|
|
3093
3137
|
(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
|
|
3094
3138
|
const globalRegistry = globalThis.__zod_globalRegistry;
|
|
3095
3139
|
//#endregion
|
|
3096
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
3140
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/api.js
|
|
3141
|
+
function snapshotChecks(def) {
|
|
3142
|
+
if (def.checks) def.checks = [...def.checks];
|
|
3143
|
+
return def;
|
|
3144
|
+
}
|
|
3097
3145
|
// @__NO_SIDE_EFFECTS__
|
|
3098
3146
|
function _string(Class, params) {
|
|
3099
|
-
return new Class({
|
|
3147
|
+
return new Class(snapshotChecks({
|
|
3100
3148
|
type: "string",
|
|
3101
3149
|
...normalizeParams(params)
|
|
3102
|
-
});
|
|
3150
|
+
}));
|
|
3103
3151
|
}
|
|
3104
3152
|
// @__NO_SIDE_EFFECTS__
|
|
3105
3153
|
function _email(Class, params) {
|
|
@@ -3371,11 +3419,11 @@ window.__ModuleLoader__.load({
|
|
|
3371
3419
|
}
|
|
3372
3420
|
// @__NO_SIDE_EFFECTS__
|
|
3373
3421
|
function _number(Class, params) {
|
|
3374
|
-
return new Class({
|
|
3422
|
+
return new Class(snapshotChecks({
|
|
3375
3423
|
type: "number",
|
|
3376
3424
|
checks: [],
|
|
3377
3425
|
...normalizeParams(params)
|
|
3378
|
-
});
|
|
3426
|
+
}));
|
|
3379
3427
|
}
|
|
3380
3428
|
// @__NO_SIDE_EFFECTS__
|
|
3381
3429
|
function _int(Class, params) {
|
|
@@ -3598,7 +3646,7 @@ window.__ModuleLoader__.load({
|
|
|
3598
3646
|
return ch;
|
|
3599
3647
|
}
|
|
3600
3648
|
//#endregion
|
|
3601
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
3649
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/to-json-schema.js
|
|
3602
3650
|
function assignProps(target, ...sources) {
|
|
3603
3651
|
for (const source of sources) for (const key of Reflect.ownKeys(source)) if (Object.prototype.propertyIsEnumerable.call(source, key)) assignProp(target, key, source[key]);
|
|
3604
3652
|
return target;
|
|
@@ -4042,7 +4090,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4042
4090
|
return finalize(ctx, schema);
|
|
4043
4091
|
};
|
|
4044
4092
|
//#endregion
|
|
4045
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
4093
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/json-schema-processors.js
|
|
4046
4094
|
const narrowMin = (agg, key, value) => {
|
|
4047
4095
|
if (agg[key] === void 0 || value > agg[key]) agg[key] = value;
|
|
4048
4096
|
};
|
|
@@ -4229,13 +4277,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4229
4277
|
key
|
|
4230
4278
|
]
|
|
4231
4279
|
}));
|
|
4232
|
-
const
|
|
4233
|
-
const
|
|
4280
|
+
const requiredKeys = [];
|
|
4281
|
+
for (const key of Object.keys(shape)) {
|
|
4234
4282
|
const field = def.shape[key];
|
|
4235
|
-
if (ctx.io === "input"
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
if (requiredKeys.size > 0) json.required = Array.from(requiredKeys);
|
|
4283
|
+
if (ctx.io === "input" ? inputOptin(field) === void 0 : field._zod.optout === void 0) requiredKeys.push(key);
|
|
4284
|
+
}
|
|
4285
|
+
if (requiredKeys.length > 0) json.required = requiredKeys;
|
|
4239
4286
|
if (def.catchall?._zod.def.type === "never") json.additionalProperties = false;
|
|
4240
4287
|
else if (!def.catchall) {
|
|
4241
4288
|
if (ctx.io === "output") json.additionalProperties = false;
|
|
@@ -4364,7 +4411,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4364
4411
|
seen.ref = def.innerType;
|
|
4365
4412
|
};
|
|
4366
4413
|
//#endregion
|
|
4367
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
4414
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/errors.js
|
|
4368
4415
|
const _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);
|
|
4369
4416
|
function _lazyMethod(proto, key, make) {
|
|
4370
4417
|
Object.defineProperty(proto, key, {
|
|
@@ -4414,7 +4461,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4414
4461
|
};
|
|
4415
4462
|
const ZodRealError = /*@__PURE__*/ $constructor("ZodError", initializer, void 0, { Parent: Error });
|
|
4416
4463
|
//#endregion
|
|
4417
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
4464
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/parse.js
|
|
4418
4465
|
const parse = /* @__PURE__ */ _parse(ZodRealError);
|
|
4419
4466
|
const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
|
|
4420
4467
|
const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
@@ -4428,7 +4475,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
4428
4475
|
const safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
|
|
4429
4476
|
const safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
|
|
4430
4477
|
//#endregion
|
|
4431
|
-
//#region node_modules/.pnpm/zod@4.6.
|
|
4478
|
+
//#region node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/schemas.js
|
|
4432
4479
|
function _ensureDefaultLocale() {
|
|
4433
4480
|
if (!globalConfig.localeError) config(en_default());
|
|
4434
4481
|
}
|
|
@@ -5986,7 +6033,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
5986
6033
|
|
|
5987
6034
|
/* ── files-tree fork (verbatim rules, renamed classes) ─────────────────────
|
|
5988
6035
|
Copied from upstream's FilesBody.module.css (ui-sidebar-files @
|
|
5989
|
-
0.2.
|
|
6036
|
+
0.2.2-alpha.2) with local names mapped to mrfw-ft* so the rules cannot
|
|
5990
6037
|
collide with host DOM — and so the fork's own body (which must NOT carry
|
|
5991
6038
|
data-files-body) stays visible while the rules above hide the native one.
|
|
5992
6039
|
The header-only rules (root/header/path/tool/status/statusLine/titleIcon)
|
|
@@ -6043,8 +6090,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6043
6090
|
cursor: pointer;
|
|
6044
6091
|
}
|
|
6045
6092
|
|
|
6046
|
-
|
|
6047
|
-
|
|
6093
|
+
@media (hover: hover) {
|
|
6094
|
+
.mrfw-ftRow:hover {
|
|
6095
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
6096
|
+
}
|
|
6048
6097
|
}
|
|
6049
6098
|
|
|
6050
6099
|
/* The folder glyph rides the tertiary ink, as the workspace tree's does. */
|
|
@@ -6072,8 +6121,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6072
6121
|
cursor: default;
|
|
6073
6122
|
}
|
|
6074
6123
|
|
|
6075
|
-
|
|
6076
|
-
|
|
6124
|
+
@media (hover: hover) {
|
|
6125
|
+
.mrfw-ftOther:hover {
|
|
6126
|
+
background: transparent;
|
|
6127
|
+
}
|
|
6077
6128
|
}
|
|
6078
6129
|
|
|
6079
6130
|
.mrfw-ftNote {
|
|
@@ -6898,7 +6949,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6898
6949
|
* Named imports cannot spell both releases: each name is absent from the
|
|
6899
6950
|
* other release's declaration, so the compiler is told once, here.
|
|
6900
6951
|
*/
|
|
6901
|
-
const installed$
|
|
6952
|
+
const installed$2 = _deepseek_ai_dsh_client_ui_primitives;
|
|
6902
6953
|
/**
|
|
6903
6954
|
* Pick the first export name this release actually provides.
|
|
6904
6955
|
* @param module - the icon module to read.
|
|
@@ -6921,7 +6972,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6921
6972
|
*/
|
|
6922
6973
|
function maybeIcon(names) {
|
|
6923
6974
|
for (const name of names) {
|
|
6924
|
-
const found = installed$
|
|
6975
|
+
const found = installed$2[name];
|
|
6925
6976
|
if (found !== void 0) return found;
|
|
6926
6977
|
}
|
|
6927
6978
|
}
|
|
@@ -6936,7 +6987,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6936
6987
|
}
|
|
6937
6988
|
/** Resolved once, against the installed module. */
|
|
6938
6989
|
function icon(pixelName, regularName) {
|
|
6939
|
-
return selectIcon(installed$
|
|
6990
|
+
return selectIcon(installed$2, [pixelName, regularName]);
|
|
6940
6991
|
}
|
|
6941
6992
|
const IconChevronDown = icon("IconChevronDownOutline14", "IconChevronDownOutlineRegular");
|
|
6942
6993
|
const IconChevronUp = icon("IconChevronUpOutline14", "IconChevronUpOutlineRegular");
|
|
@@ -6953,7 +7004,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6953
7004
|
const IconAccessReadOnly = maybeIcon(["PermissionIconReadOnlyRegular", "IconReadOnlyRegular"]);
|
|
6954
7005
|
const IconAccessInherit = maybeIcon(["IconWorkspaceTreeOutline16", "IconWorkspaceTreeOutlineRegular"]);
|
|
6955
7006
|
//#endregion
|
|
6956
|
-
//#region node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.
|
|
7007
|
+
//#region node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.2-alpha.2_@deepseek-ai+cordis@4.0.6-alpha.1/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
|
|
6957
7008
|
/** The one Remote failure class shared by owners, the Gateway, and consumers. */
|
|
6958
7009
|
/**
|
|
6959
7010
|
* One Remote call failure: a real Error carrying its stable code and typed
|
|
@@ -7463,7 +7514,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7463
7514
|
return n;
|
|
7464
7515
|
}
|
|
7465
7516
|
//#endregion
|
|
7466
|
-
//#region node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.
|
|
7517
|
+
//#region node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.2-alpha.2_@deepseek-ai+cordis@4.0.6-alpha.1/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js
|
|
7467
7518
|
/**
|
|
7468
7519
|
* The `dsh-resource://file/…` address grammar: how a file is named across the
|
|
7469
7520
|
* Sidebar and the resource model, built and parsed without touching a
|
|
@@ -7885,7 +7936,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7885
7936
|
};
|
|
7886
7937
|
}
|
|
7887
7938
|
//#endregion
|
|
7888
|
-
//#region node_modules/.pnpm/@deepseek-ai+dsh-host-open-in-app@0.2.
|
|
7939
|
+
//#region node_modules/.pnpm/@deepseek-ai+dsh-host-open-in-app@0.2.2-alpha.2_@deepseek-ai+cordis@4.0.6-alpha.1_@deep_d76f08f4e35ff3a756a48d7d013379f6/node_modules/@deepseek-ai/dsh-host-open-in-app/lib/types/shared.js
|
|
7889
7940
|
var shared_exports = /* @__PURE__ */ __exportAll({
|
|
7890
7941
|
OPEN_IN_APP_APPS_PATH: () => OPEN_IN_APP_APPS_PATH,
|
|
7891
7942
|
OPEN_IN_APP_APPS_ROUTE: () => OPEN_IN_APP_APPS_ROUTE,
|
|
@@ -7941,7 +7992,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7941
7992
|
* Named imports cannot spell both eras: each name is absent from the other
|
|
7942
7993
|
* era's declaration, so the compiler is told once, here.
|
|
7943
7994
|
*/
|
|
7944
|
-
const installed = shared_exports;
|
|
7995
|
+
const installed$1 = shared_exports;
|
|
7945
7996
|
/**
|
|
7946
7997
|
* Pick the first export name this release actually provides.
|
|
7947
7998
|
* @param module - the shared module to read.
|
|
@@ -7963,7 +8014,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7963
8014
|
* `iconUrl` on runtimes whose glyph gate already passed, and on the pixel era
|
|
7964
8015
|
* the absolute form is exactly what upstream's own client fetched.
|
|
7965
8016
|
*/
|
|
7966
|
-
const OPEN_IN_APP_ICON_URL_PREFIX = selectSharedRoute(installed, ["OPEN_IN_APP_ICON_PREFIX_ROUTE", "OPEN_IN_APP_ICON_PREFIX"]);
|
|
8017
|
+
const OPEN_IN_APP_ICON_URL_PREFIX = selectSharedRoute(installed$1, ["OPEN_IN_APP_ICON_PREFIX_ROUTE", "OPEN_IN_APP_ICON_PREFIX"]);
|
|
7967
8018
|
//#endregion
|
|
7968
8019
|
//#region src/client/open-in-app/applications.ts
|
|
7969
8020
|
/** Label keys for applications supported by this client. */
|
|
@@ -8059,10 +8110,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8059
8110
|
* @param appId - catalog id from the availability list.
|
|
8060
8111
|
* @param path - the session's absolute workspace directory.
|
|
8061
8112
|
* Concurrent gestures are ignored until the current Host request settles.
|
|
8062
|
-
* @returns
|
|
8113
|
+
* @returns the acknowledged handoff, or `{ kind: 'skipped' }` while another
|
|
8114
|
+
* launch holds the operation, or a named failure when the Host refuses or
|
|
8115
|
+
* cannot be reached. Host and transport failures resolve without rejecting.
|
|
8063
8116
|
*/
|
|
8064
8117
|
async launch(appId, path) {
|
|
8065
|
-
if (this.operation.getSnapshot().phase === "busy") return;
|
|
8118
|
+
if (this.operation.getSnapshot().phase === "busy") return { kind: "skipped" };
|
|
8066
8119
|
this.operation.set({
|
|
8067
8120
|
phase: "busy",
|
|
8068
8121
|
path
|
|
@@ -8082,12 +8135,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8082
8135
|
phase: "idle",
|
|
8083
8136
|
path
|
|
8084
8137
|
});
|
|
8085
|
-
|
|
8138
|
+
return { kind: "opened" };
|
|
8139
|
+
} catch (_error) {
|
|
8086
8140
|
this.operation.set({
|
|
8087
8141
|
phase: "error",
|
|
8088
8142
|
path
|
|
8089
8143
|
});
|
|
8090
|
-
|
|
8144
|
+
return {
|
|
8145
|
+
kind: "failed",
|
|
8146
|
+
failure: "openError"
|
|
8147
|
+
};
|
|
8091
8148
|
}
|
|
8092
8149
|
}
|
|
8093
8150
|
async run() {
|
|
@@ -8107,36 +8164,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8107
8164
|
/** Dictionary namespace owned by upstream's plugin (verbatim). */
|
|
8108
8165
|
const NS = "open-in-app";
|
|
8109
8166
|
//#endregion
|
|
8110
|
-
//#region src/client/open-in-app/open-failure-toast.tsx
|
|
8111
|
-
/** Per-control failure banner for path gestures. */
|
|
8112
|
-
/**
|
|
8113
|
-
* Transient failure banner owned by the control that initiated the gesture,
|
|
8114
|
-
* so one failed request announces once, from the control the user pressed.
|
|
8115
|
-
* @returns `toast` owned by the control and `show` to announce one
|
|
8116
|
-
* failure with resolved copy; announcing again replays the banner.
|
|
8117
|
-
*/
|
|
8118
|
-
function useOpenFailureToast() {
|
|
8119
|
-
const seq = (0, react.useRef)(0);
|
|
8120
|
-
const [banner, setBanner] = (0, react.useState)(null);
|
|
8121
|
-
const dismiss = (0, react.useCallback)(() => {
|
|
8122
|
-
setBanner(null);
|
|
8123
|
-
}, []);
|
|
8124
|
-
return {
|
|
8125
|
-
toast: banner === null ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
|
|
8126
|
-
text: banner.text,
|
|
8127
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
|
|
8128
|
-
onDone: dismiss
|
|
8129
|
-
}, banner.seq),
|
|
8130
|
-
show: (text) => {
|
|
8131
|
-
seq.current += 1;
|
|
8132
|
-
setBanner({
|
|
8133
|
-
seq: seq.current,
|
|
8134
|
-
text
|
|
8135
|
-
});
|
|
8136
|
-
}
|
|
8137
|
-
};
|
|
8138
|
-
}
|
|
8139
|
-
//#endregion
|
|
8140
8167
|
//#region src/client/open-in-app/OpenTargetButton.module.css.ts
|
|
8141
8168
|
/**
|
|
8142
8169
|
* Fork-facing shim for upstream `OpenTargetButton.module.css`.
|
|
@@ -8168,27 +8195,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8168
8195
|
};
|
|
8169
8196
|
//#endregion
|
|
8170
8197
|
//#region src/client/open-in-app/OpenTargetButton.tsx
|
|
8171
|
-
/** Shared file and directory opener: one default action, application menu, and per
|
|
8198
|
+
/** Shared file and directory opener: one default action, application menu, and one reported outcome per gesture. */
|
|
8172
8199
|
/**
|
|
8173
|
-
* Serialize gestures and
|
|
8174
|
-
*
|
|
8175
|
-
* @param
|
|
8176
|
-
* @
|
|
8200
|
+
* Serialize gestures and report the outcome each one settles on to the app-wide
|
|
8201
|
+
* announcer, which outlives this control and the panel holding it.
|
|
8202
|
+
* @param execute - target adapter that settles on the gesture's outcome.
|
|
8203
|
+
* @param report - announcement seat the settled outcome is sent to.
|
|
8204
|
+
* @returns the pending state and the guarded action callback.
|
|
8177
8205
|
*/
|
|
8178
|
-
function useOpenTargetGesture(execute,
|
|
8206
|
+
function useOpenTargetGesture(execute, report) {
|
|
8179
8207
|
const [pending, setPending] = (0, react.useState)(false);
|
|
8180
8208
|
const inFlight = (0, react.useRef)(false);
|
|
8181
|
-
const { toast, show } = useOpenFailureToast();
|
|
8182
8209
|
return {
|
|
8183
8210
|
pending,
|
|
8184
|
-
toast,
|
|
8185
8211
|
act: (operation) => {
|
|
8186
8212
|
if (inFlight.current) return;
|
|
8187
8213
|
inFlight.current = true;
|
|
8188
8214
|
setPending(true);
|
|
8189
|
-
execute(operation).then((
|
|
8190
|
-
if (failure !== null) show(t(`path.${failure}`));
|
|
8191
|
-
}).finally(() => {
|
|
8215
|
+
execute(operation).then(report).finally(() => {
|
|
8192
8216
|
inFlight.current = false;
|
|
8193
8217
|
setPending(false);
|
|
8194
8218
|
});
|
|
@@ -8214,12 +8238,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8214
8238
|
* Render identical split buttons for files and directories. File reveal always
|
|
8215
8239
|
* stays last; it is the default only when no application is registered.
|
|
8216
8240
|
* @param props - target applications, default selection, and operations.
|
|
8217
|
-
* @returns the control
|
|
8241
|
+
* @returns the control alone: its settled outcomes are announced by the seat it reports to.
|
|
8218
8242
|
*/
|
|
8219
8243
|
function OpenTargetButton(props) {
|
|
8220
8244
|
const { applications, defaultId, kind, t } = props;
|
|
8221
8245
|
const [menuOpen, setMenuOpen] = (0, react.useState)(false);
|
|
8222
|
-
const { pending,
|
|
8246
|
+
const { pending, act } = useOpenTargetGesture(props.execute, props.report);
|
|
8223
8247
|
const preferred = kind === "file" ? applications.find((app) => app.id === defaultId) ?? applications[0] : applications.find((app) => app.id === defaultId);
|
|
8224
8248
|
const disabled = pending || props.busy === true || props.loading === true;
|
|
8225
8249
|
const hasMenu = props.loading === true || props.failed || applications.length + (kind === "file" ? 1 : 0) > 1;
|
|
@@ -8255,7 +8279,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8255
8279
|
source: preferred?.icon ?? null,
|
|
8256
8280
|
size: props.prominent ? 18 : 13
|
|
8257
8281
|
}, preferred?.icon);
|
|
8258
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
8282
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
8259
8283
|
className: css.menuAnchor,
|
|
8260
8284
|
open: menuOpen && !disabled && hasMenu,
|
|
8261
8285
|
autoFocus: true,
|
|
@@ -8323,13 +8347,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8323
8347
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: props.prominent ? 14 : 10 })
|
|
8324
8348
|
})]
|
|
8325
8349
|
})
|
|
8326
|
-
})
|
|
8350
|
+
});
|
|
8327
8351
|
}
|
|
8328
8352
|
//#endregion
|
|
8329
8353
|
//#region src/client/open-in-app/OpenInAppAction.tsx
|
|
8330
8354
|
/**
|
|
8331
8355
|
* Adapt the installed directory catalog to the shared opening control.
|
|
8332
|
-
* @param props - displayed directory, installed catalog, and
|
|
8356
|
+
* @param props - displayed directory, installed catalog, launch operations, and the announcement seat.
|
|
8333
8357
|
* @returns the shared control, or null without an eligible application.
|
|
8334
8358
|
*/
|
|
8335
8359
|
function OpenInAppAction(props) {
|
|
@@ -8356,19 +8380,101 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8356
8380
|
t,
|
|
8357
8381
|
busy: operation.phase === "busy",
|
|
8358
8382
|
shortcut,
|
|
8383
|
+
report: props.report,
|
|
8359
8384
|
execute: async (operation) => {
|
|
8360
8385
|
const id = operation.kind === "application" ? operation.id : preferred.id;
|
|
8361
|
-
|
|
8362
|
-
|
|
8363
|
-
|
|
8364
|
-
return "openError";
|
|
8365
|
-
}
|
|
8366
|
-
if (operation.kind === "application") props.choose(id);
|
|
8367
|
-
return null;
|
|
8386
|
+
const outcome = await props.launch(id, absolutePath);
|
|
8387
|
+
if (outcome.kind === "opened" && operation.kind === "application") props.choose(id);
|
|
8388
|
+
return outcome;
|
|
8368
8389
|
}
|
|
8369
8390
|
}, absolutePath);
|
|
8370
8391
|
}
|
|
8371
8392
|
//#endregion
|
|
8393
|
+
//#region src/compat/open-in-app-device.ts
|
|
8394
|
+
/**
|
|
8395
|
+
* Compatibility adapter for `isMobileDevice` from
|
|
8396
|
+
* `@deepseek-ai/dsh-client-ui-primitives`.
|
|
8397
|
+
*
|
|
8398
|
+
* ```text
|
|
8399
|
+
* 0.1.5-rc.2 through 0.2.1-rc.5 no `isMobileDevice` export
|
|
8400
|
+
* 0.2.2-alpha.2 + `isMobileDevice` exported
|
|
8401
|
+
* ```
|
|
8402
|
+
*
|
|
8403
|
+
* The open-in-app fork's verbatim `open-toast.tsx` spells the detector as a
|
|
8404
|
+
* primitives import — a name absent before `0.2.2-alpha.2` — so the lookup
|
|
8405
|
+
* is by export name, not by release string (the `client-icons.ts` pattern).
|
|
8406
|
+
* An older runtime falls back to upstream's identical detection: mobile
|
|
8407
|
+
* userAgent, or a touch-capable MacIntel platform, memoized like upstream's.
|
|
8408
|
+
*
|
|
8409
|
+
* @module @dsh-electron/dsh-plugin-multi-root-workspace/compat/open-in-app-device
|
|
8410
|
+
*/
|
|
8411
|
+
/** The primitives module, addressed by export name. */
|
|
8412
|
+
const installed = _deepseek_ai_dsh_client_ui_primitives;
|
|
8413
|
+
/** Upstream's own detector when the installed release carries it (verbatim logic below otherwise). */
|
|
8414
|
+
const upstream = typeof installed.isMobileDevice === "function" ? installed.isMobileDevice : void 0;
|
|
8415
|
+
let fallbackResult;
|
|
8416
|
+
/**
|
|
8417
|
+
* Whether this browser is a mobile device — upstream's detection verbatim.
|
|
8418
|
+
* @returns true for a mobile userAgent or a touch-capable macOS surface.
|
|
8419
|
+
*/
|
|
8420
|
+
function isMobileDeviceFallback() {
|
|
8421
|
+
fallbackResult ??= /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
|
|
8422
|
+
return fallbackResult;
|
|
8423
|
+
}
|
|
8424
|
+
/**
|
|
8425
|
+
* Resolve the installed release's `isMobileDevice`, or the identical local
|
|
8426
|
+
* fallback on releases that predate the export.
|
|
8427
|
+
* @returns the mobile-device verdict.
|
|
8428
|
+
*/
|
|
8429
|
+
function isMobileDevice() {
|
|
8430
|
+
return upstream === void 0 ? isMobileDeviceFallback() : upstream();
|
|
8431
|
+
}
|
|
8432
|
+
//#endregion
|
|
8433
|
+
//#region src/client/open-in-app/open-toast.tsx
|
|
8434
|
+
/**
|
|
8435
|
+
* Create the one outcome store the overlay entry shows.
|
|
8436
|
+
* @returns the observable notice with its report and dismiss actions.
|
|
8437
|
+
*/
|
|
8438
|
+
function createOpenInAppToastSource() {
|
|
8439
|
+
const store = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(null);
|
|
8440
|
+
let seq = 0;
|
|
8441
|
+
return {
|
|
8442
|
+
hooks: { toast: store },
|
|
8443
|
+
report: (outcome) => {
|
|
8444
|
+
if (outcome.kind === "skipped") return;
|
|
8445
|
+
if (outcome.kind !== "failed" && !isMobileDevice()) return;
|
|
8446
|
+
seq += 1;
|
|
8447
|
+
store.set({
|
|
8448
|
+
...outcome,
|
|
8449
|
+
seq
|
|
8450
|
+
});
|
|
8451
|
+
},
|
|
8452
|
+
dismiss: () => {
|
|
8453
|
+
store.set(null);
|
|
8454
|
+
}
|
|
8455
|
+
};
|
|
8456
|
+
}
|
|
8457
|
+
/**
|
|
8458
|
+
* Render a mobile handoff confirmation or a native-open failure.
|
|
8459
|
+
* @param props - the notice hook, its dismissal, and the locale seat.
|
|
8460
|
+
* @returns the banner on display, or null.
|
|
8461
|
+
*/
|
|
8462
|
+
function OpenInAppToast({ useToast, dismiss, t }) {
|
|
8463
|
+
const toast = useToast((current) => current);
|
|
8464
|
+
if (toast === null) return null;
|
|
8465
|
+
const key = `open-in-app-${String(toast.seq)}`;
|
|
8466
|
+
if (toast.kind === "failed") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
|
|
8467
|
+
text: t(toast.failure === "revealError" ? "path.revealError" : "path.openError"),
|
|
8468
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
|
|
8469
|
+
onDone: dismiss
|
|
8470
|
+
}, key);
|
|
8471
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
|
|
8472
|
+
text: t(toast.kind === "opened" ? "path.opened" : "path.revealed"),
|
|
8473
|
+
tone: "success",
|
|
8474
|
+
onDone: dismiss
|
|
8475
|
+
}, key);
|
|
8476
|
+
}
|
|
8477
|
+
//#endregion
|
|
8372
8478
|
//#region src/client/open-in-app/adapter.tsx
|
|
8373
8479
|
/**
|
|
8374
8480
|
* The plugin-owned wiring around the verbatim open-in-app fork.
|
|
@@ -8433,17 +8539,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8433
8539
|
if (!REQUIRED_GLYPHS.every((name) => maybeIcon([name]) !== void 0)) return void 0;
|
|
8434
8540
|
const controller = new OpenInAppController();
|
|
8435
8541
|
controller.load();
|
|
8542
|
+
const toast = createOpenInAppToastSource();
|
|
8436
8543
|
return {
|
|
8437
|
-
|
|
8438
|
-
|
|
8439
|
-
|
|
8440
|
-
|
|
8441
|
-
|
|
8442
|
-
|
|
8443
|
-
controller.
|
|
8444
|
-
|
|
8445
|
-
|
|
8446
|
-
|
|
8544
|
+
toast,
|
|
8545
|
+
adapter: {
|
|
8546
|
+
useOpenInAppApps: bindSnapshot(controller.apps),
|
|
8547
|
+
useOpenInAppChoice: bindSnapshot(controller.choice),
|
|
8548
|
+
useOpenInAppLaunch: bindSnapshot(controller.operation),
|
|
8549
|
+
useShortcuts: bindSnapshot(deps.shortcuts ?? NO_SHORTCUTS),
|
|
8550
|
+
launch: (appId, path) => controller.launch(appId, path),
|
|
8551
|
+
report: toast.report,
|
|
8552
|
+
choose: (appId) => {
|
|
8553
|
+
controller.choose(appId);
|
|
8554
|
+
},
|
|
8555
|
+
iconUrl: (appId) => `${OPEN_IN_APP_ICON_URL_PREFIX}/${appId}`,
|
|
8556
|
+
t: deps.t
|
|
8557
|
+
}
|
|
8447
8558
|
};
|
|
8448
8559
|
}
|
|
8449
8560
|
//#endregion
|
|
@@ -9747,6 +9858,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9747
9858
|
t: ctx.locale.bind(NS),
|
|
9748
9859
|
shortcuts: readService(ctx, "shortcuts")?.catalog
|
|
9749
9860
|
});
|
|
9861
|
+
if (openInApp !== void 0) {
|
|
9862
|
+
const { toast } = openInApp;
|
|
9863
|
+
ctx.slots.inject("shell.overlay", () => ctx.slots.register({
|
|
9864
|
+
name: "shell.overlay",
|
|
9865
|
+
id: "multi-root-open-in-app.toast",
|
|
9866
|
+
locale: NS,
|
|
9867
|
+
inject: () => ({
|
|
9868
|
+
hooks: toast.hooks,
|
|
9869
|
+
dismiss: toast.dismiss
|
|
9870
|
+
})
|
|
9871
|
+
}, OpenInAppToast));
|
|
9872
|
+
}
|
|
9750
9873
|
const filesTreeSeats = createFilesTreeSeats(ctx);
|
|
9751
9874
|
const filesTreeT = ctx.locale.bind(NS$1);
|
|
9752
9875
|
ctx.slots.inject("sidebar.footer.action", () => ctx.slots.register({
|
|
@@ -9790,7 +9913,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9790
9913
|
sessionId: paneSessionId,
|
|
9791
9914
|
subscribeSession,
|
|
9792
9915
|
t,
|
|
9793
|
-
openInApp,
|
|
9916
|
+
openInApp: openInApp?.adapter,
|
|
9794
9917
|
filesTree
|
|
9795
9918
|
});
|
|
9796
9919
|
}));
|