@dsh-workbench/shared 1.1.1 → 1.1.3

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.
@@ -258,6 +258,7 @@ export declare const dictionaries: {
258
258
  readonly 'panels.market.add.failurePnpmMissing': "没有找到 pnpm,无法安装";
259
259
  readonly 'panels.market.add.failureInstalled': "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。";
260
260
  readonly 'panels.market.add.failureGeneric': "安装过程中出错,原因见安装详情";
261
+ readonly 'panels.market.add.failureCredentials': "这个仓库要凭证:本机没有它的 git 凭据。先在终端里 clone 一次、配好凭据助手,或改用 SSH 地址,再装一次。";
261
262
  readonly 'panels.market.add.approveTitle': "需要你允许安装脚本";
262
263
  readonly 'panels.market.add.approveCaution': "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。";
263
264
  readonly 'panels.market.add.approveRun': "允许并继续安装";
@@ -299,10 +300,16 @@ export declare const dictionaries: {
299
300
  readonly 'panels.discover.addingSource': "正在添加…";
300
301
  readonly 'panels.discover.addFirstSource': "添加索引源";
301
302
  readonly 'panels.discover.removeSource': "移除";
302
- readonly 'panels.discover.removeSourceNamed': "移除 {url}";
303
- readonly 'panels.discover.useSource': "使用";
304
- readonly 'panels.discover.useSourceNamed': "使用 {label}";
305
- readonly 'panels.discover.sourceCurrent': "当前使用";
303
+ readonly 'panels.discover.removeTitle': "移除这个索引源?";
304
+ readonly 'panels.discover.removeBody': "会把「{label}」从这份列表里移除;仓库本身不会被删,之后还能再添加。";
305
+ readonly 'panels.discover.sourceActions': "「{label}」的操作";
306
+ readonly 'panels.discover.sourceStateWritable': "可发布";
307
+ readonly 'panels.discover.sourceStateReadOnly': "仅读取模块列表";
308
+ readonly 'panels.discover.sourceEnable': "设为可发布";
309
+ readonly 'panels.discover.sourceDisable': "设为只读";
310
+ readonly 'panels.discover.sourceWorking': "设置中…";
311
+ readonly 'panels.discover.sourceEnabled': "已把「{label}」设为可发布";
312
+ readonly 'panels.discover.sourceReadOnly': "已把「{label}」设为只读";
306
313
  readonly 'panels.discover.refresh': "刷新";
307
314
  readonly 'panels.discover.search': "搜索模块";
308
315
  readonly 'panels.discover.clearSearch': "清除搜索";
@@ -324,12 +331,13 @@ export declare const dictionaries: {
324
331
  readonly 'panels.discover.noSourceHint': "添加一个模块市场索引(http 地址或 git 仓库),即可在这里浏览和安装其中的模块";
325
332
  readonly 'panels.discover.sourcesFailed': "无法读取索引源";
326
333
  readonly 'panels.discover.unreadable': "无法读取此索引";
334
+ readonly 'panels.discover.sourceAuth': "这个索引源读不了:本机没有它的 git 凭据。配好凭据(或在源里改用 SSH 地址),再点右上角的刷新。";
327
335
  readonly 'panels.discover.invalid': "此索引的格式无效";
328
336
  readonly 'panels.discover.emptyRepo': "这个仓库还没有任何提交";
329
337
  readonly 'panels.discover.missingIndex': "仓库里还没有索引文件 {path}";
330
338
  readonly 'panels.discover.initTitle': "把这个仓库初始化成模块市场索引?";
331
339
  readonly 'panels.discover.initCta': "初始化成市场索引";
332
- readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。";
340
+ readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。";
333
341
  readonly 'panels.discover.initBranch': "分支";
334
342
  readonly 'panels.discover.initBranchHint': "索引和打包文件都发到这个分支;空仓库会新建它。";
335
343
  readonly 'panels.discover.initBranchBad': "分支名只能用字母、数字、点、下划线、斜杠或短横线";
@@ -347,8 +355,23 @@ export declare const dictionaries: {
347
355
  readonly 'panels.discover.badShellDetail': "此版本与当前的工作台 {current} 不兼容,它要求 {peer}";
348
356
  readonly 'panels.discover.unverified': "工作台未验证";
349
357
  readonly 'panels.discover.installing': "正在安装…";
358
+ readonly 'panels.discover.installingNamed': "正在安装「{name}」…";
359
+ readonly 'panels.discover.cancelInstall': "取消安装";
360
+ readonly 'panels.discover.cancelling': "正在取消…";
361
+ readonly 'panels.discover.installCancelled': "已取消安装:{name}";
350
362
  readonly 'panels.discover.installedDone': "装好了:{name}";
351
363
  readonly 'panels.discover.failed': "操作失败:{reason}";
364
+ readonly 'panels.discover.transportTitle': "从哪读这个仓库";
365
+ readonly 'panels.discover.transportSsh': "SSH";
366
+ readonly 'panels.discover.transportHttps': "HTTPS";
367
+ readonly 'panels.discover.transportOk': "能读";
368
+ readonly 'panels.discover.transportAuth': "要凭证";
369
+ readonly 'panels.discover.transportUnreachable': "连不上";
370
+ readonly 'panels.discover.transportUnknown': "没探成";
371
+ readonly 'panels.discover.transportChecking': "正在探测…";
372
+ readonly 'panels.discover.transportTest': "试这个地址";
373
+ readonly 'panels.discover.transportPlaceholder': "或贴一个别的地址(公司镜像、别名)";
374
+ readonly 'panels.discover.transportNeedsAuth': "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。";
352
375
  readonly 'panels.discover.expand': "展开版本";
353
376
  readonly 'panels.discover.collapse': "收起版本";
354
377
  readonly 'panels.discover.versionCount': "{n} 个版本";
@@ -639,6 +662,13 @@ export declare const dictionaries: {
639
662
  readonly 'approval.publish.version': "版本";
640
663
  readonly 'approval.publish.author': "作者";
641
664
  readonly 'approval.publish.authorMissing': "未署名";
665
+ readonly 'approval.publish.owner': "认领人";
666
+ readonly 'approval.publish.ownerUnowned': "原来没署名";
667
+ readonly 'approval.publish.ownerTaken': "已有主人:{owner}";
668
+ readonly 'approval.publish.unit': "模块 id";
669
+ readonly 'approval.publish.unitTaken': "已被 {entry} 占用";
670
+ readonly 'approval.publish.path': "产物目录";
671
+ readonly 'approval.publish.pathTaken': "已被 {entry} 占用";
642
672
  readonly 'approval.publish.registry': "源";
643
673
  readonly 'approval.publish.repo': "仓库";
644
674
  readonly 'approval.publish.branch': "分支";
@@ -649,6 +679,7 @@ export declare const dictionaries: {
649
679
  readonly 'approval.publish.twoCommits': "打包文件 + market.json 两次提交,一次推送";
650
680
  readonly 'approval.publish.reading': "读取中…";
651
681
  readonly 'approval.publish.changelog': "{version} 的更新日志";
682
+ readonly 'approval.publish.changelogPending': "{version} 这一版会写进更新日志,随包发布";
652
683
  readonly 'approval.publish.changelogMissing': "这一版还没有更新日志({version}),发布会被拦下";
653
684
  readonly 'approval.publish.targetAuto': "按配置默认";
654
685
  readonly 'approval.publish.targetTeam': "团队源";
@@ -657,6 +688,15 @@ export declare const dictionaries: {
657
688
  readonly 'approval.publish.targetGit': "git 仓库";
658
689
  readonly 'approval.publish.targetMarket': "模块市场索引";
659
690
  readonly 'approval.publish.targetLocal': "留在本机";
691
+ readonly 'approval.market.source': "索引源";
692
+ readonly 'approval.market.url': "地址";
693
+ readonly 'approval.market.action': "这次操作";
694
+ readonly 'approval.market.policy': "当前状态";
695
+ readonly 'approval.market.enable': "设为可发布";
696
+ readonly 'approval.market.disable': "改回只读";
697
+ readonly 'approval.market.writable': "可发布";
698
+ readonly 'approval.market.readOnly': "仅读取模块列表";
699
+ readonly 'approval.market.reading': "正在读取…";
660
700
  readonly 'markdown.copy': "复制";
661
701
  readonly 'markdown.copied': "已复制";
662
702
  readonly 'markdown.footnotes': "脚注";
@@ -712,7 +752,7 @@ export declare const dictionaries: {
712
752
  readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行同步过来,或自己去「模型」里配。";
713
753
  readonly 'configSync.failed': "同步没成功,再试一次。";
714
754
  };
715
- en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.unsupported" | "env.unit.unsupportedHint" | "env.unit.degraded" | "env.unit.degradedHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "profileCreate.nav" | "profileCreate.lead" | "profileCreate.name" | "profileCreate.nameHint" | "profileCreate.source" | "profileCreate.current" | "profileCreate.copy" | "profileCreate.settings" | "profileCreate.create" | "profileCreate.creating" | "profileCreate.created" | "profileCreate.command" | "profileCreate.readFailed" | "profileCreate.retry" | "profileCreate.reading" | "profileCreate.noProfiles" | "profileCreate.failed" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedUnverified" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "env.need.bin.missing" | "env.need.bin.hint" | "env.need.extension.missing" | "env.need.extension.outdated" | "env.need.extension.hint" | "env.need.lib.missing" | "env.need.lib.outdated" | "env.need.lib.unsatisfied" | "env.need.lib.hint" | "env.need.env.missing" | "env.need.env.hint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.unchecked" | "panels.dep.missing" | "panels.dep.outdated" | "panels.dep.degraded" | "panels.dep.unsupported" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.uncheckedHint" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.removeSlow" | "panels.market.updateNoChange" | "panels.market.updateUnknownVersion" | "panels.market.updateGone" | "panels.market.updateRestored" | "panels.market.updateBehind" | "panels.market.selfUpdateFailed" | "panels.market.selfUpdateUnknown" | "panels.market.selfUpdateRolledBack" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.needBinary" | "panels.market.needLib" | "panels.market.localMark" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.updateNeedsWorkbench" | "panels.market.updateIncompatible" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.pendingFollowUp" | "panels.market.migrationHint" | "panels.market.migrateAction" | "panels.market.migrating" | "panels.market.migrateConfirmTitle" | "panels.market.migrateConfirmDetail" | "panels.market.migrateConfirmAck" | "panels.market.migrateConfirmYes" | "panels.market.migrateDone" | "panels.market.dismissFollowUp" | "panels.market.dismissing" | "panels.market.dismissFollowUpTitle" | "panels.market.dismissFollowUpDetail" | "panels.market.dismissFollowUpAck" | "panels.market.dismissFollowUpYes" | "panels.market.dismissed" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.tabInstalled" | "panels.market.tabs" | "panels.tab.discover" | "panels.discover.loading" | "panels.discover.slowHint" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.useSource" | "panels.discover.useSourceNamed" | "panels.discover.sourceCurrent" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.clearSearch" | "panels.discover.all" | "panels.discover.sourceLabel" | "panels.discover.sourceKind" | "panels.discover.sourceKindHttp" | "panels.discover.sourceKindGit" | "panels.discover.sourceUrl" | "panels.discover.sourcePlaceholder" | "panels.discover.sourceRef" | "panels.discover.sourcePath" | "panels.discover.sourceLocal" | "panels.discover.sourceLocalHint" | "panels.discover.save" | "panels.discover.cancel" | "panels.discover.retry" | "panels.discover.noSource" | "panels.discover.noSourceHint" | "panels.discover.sourcesFailed" | "panels.discover.unreadable" | "panels.discover.invalid" | "panels.discover.emptyRepo" | "panels.discover.missingIndex" | "panels.discover.initTitle" | "panels.discover.initCta" | "panels.discover.initWhat" | "panels.discover.initBranch" | "panels.discover.initBranchHint" | "panels.discover.initBranchBad" | "panels.discover.initOk" | "panels.discover.initBusy" | "panels.discover.initDone" | "panels.discover.stale" | "panels.discover.empty" | "panels.discover.noMatch" | "panels.discover.notInstalled" | "panels.discover.installed" | "panels.discover.installedVersion" | "panels.discover.update" | "panels.discover.badShell" | "panels.discover.badShellDetail" | "panels.discover.unverified" | "panels.discover.installing" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.expand" | "panels.discover.collapse" | "panels.discover.versionCount" | "panels.discover.sourceNpm" | "panels.discover.sourceNpmDefault" | "panels.discover.sourceGit" | "panels.discover.installVersion" | "panels.discover.confirmTitle" | "panels.discover.confirmDetail" | "panels.discover.confirmAck" | "panels.discover.confirmOk" | "panels.discover.confirmCancel" | "panels.discover.marketMenu" | "panels.discover.manageSources" | "panels.discover.sourcesTitle" | "panels.discover.sourcesIntro" | "panels.discover.sourcesLabel" | "panels.discover.sourceTrust" | "panels.discover.sourceDuplicate" | "panels.discover.sourceBadUrl" | "panels.discover.close" | "panels.discover.labelsMenu" | "panels.discover.labelsCount" | "panels.discover.tagsAll" | "panels.discover.sort" | "panels.discover.sortWith" | "panels.discover.sortRelevance" | "panels.discover.sortDefault" | "panels.discover.sortPublished" | "panels.discover.categoriesLabel" | "panels.discover.showMore" | "panels.discover.entryMeta" | "panels.discover.entryMetaAuthor" | "panels.discover.openEntry" | "panels.discover.cardInstall" | "panels.discover.cardInstalled" | "panels.discover.cardUpdate" | "panels.discover.cardBlocked" | "panels.discover.installTitle" | "panels.discover.installVersionTitle" | "panels.discover.openInstalled" | "panels.discover.noCompatibleVersion" | "panels.discover.detailBack" | "panels.discover.publishedAt" | "panels.discover.detailMarket" | "panels.discover.detailIncompatible" | "panels.discover.detailUnknown" | "panels.discover.detailSource" | "panels.discover.authorUnknown" | "panels.discover.tabOverview" | "panels.discover.tabReadme" | "panels.discover.tabChangelog" | "panels.discover.docReadme" | "panels.discover.docChangelog" | "panels.discover.docLoading" | "panels.discover.docMissing" | "panels.discover.docUnavailable" | "panels.discover.docUnknownReason" | "panels.discover.detailTabs" | "panels.discover.factPackage" | "panels.discover.factRegistry" | "panels.discover.factRepository" | "panels.discover.factCommit" | "panels.discover.factDirectory" | "panels.discover.factPublished" | "panels.discover.factAuthor" | "panels.discover.factHomepage" | "panels.discover.factCategory" | "panels.discover.factLabels" | "panels.discover.factMarket" | "panels.discover.detailVersions" | "panels.discover.versionsLabel" | "panels.discover.tagRecommended" | "panels.discover.tagPrerelease" | "panels.discover.tagInstalled" | "panels.discover.tagIncompatible" | "panels.discover.tagUnknown" | "panels.discover.selected" | "panels.discover.done" | "panels.discover.installTrust" | "panels.discover.progress" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.update" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.toolchain.ok" | "env.toolchain.warn" | "env.opencli.ok" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.wake" | "env.wake.opening" | "env.wake.browserOpen" | "env.wake.noBrowser" | "env.wake.failed" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.toolchain" | "env.step.opencli" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "adapterSet.not-configured" | "adapterSet.no-profile" | "adapterSet.malformed" | "adapterSet.not-resolvable" | "adapterSet.import-failed" | "adapterSet.bad-export" | "adapterSet.factory-failed" | "adapterSet.incompatible-version" | "adapterSet.missing-member" | "env.unit.hint" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "adapterSet.title" | "adapterSet.lead" | "adapterSet.active" | "adapterSet.defaults" | "adapterSet.failed" | "adapterSet.healthUnreadable" | "workbenchSettings.nav" | "workbenchSettings.lead" | "sidebarEdition.nav" | "sidebarEdition.lead" | "sidebarEdition.official" | "sidebarEdition.officialHint" | "sidebarEdition.custom" | "sidebarEdition.customHint" | "sidebarEdition.saving" | "sidebarEdition.reloadRequired" | "sidebarEdition.reload" | "sidebarEdition.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.author" | "approval.publish.authorMissing" | "approval.publish.registry" | "approval.publish.repo" | "approval.publish.branch" | "approval.publish.defaultBranch" | "approval.publish.artifacts" | "approval.publish.index" | "approval.publish.commits" | "approval.publish.twoCommits" | "approval.publish.reading" | "approval.publish.changelog" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
755
+ en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.unsupported" | "env.unit.unsupportedHint" | "env.unit.degraded" | "env.unit.degradedHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "profileCreate.nav" | "profileCreate.lead" | "profileCreate.name" | "profileCreate.nameHint" | "profileCreate.source" | "profileCreate.current" | "profileCreate.copy" | "profileCreate.settings" | "profileCreate.create" | "profileCreate.creating" | "profileCreate.created" | "profileCreate.command" | "profileCreate.readFailed" | "profileCreate.retry" | "profileCreate.reading" | "profileCreate.noProfiles" | "profileCreate.failed" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedUnverified" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "env.need.bin.missing" | "env.need.bin.hint" | "env.need.extension.missing" | "env.need.extension.outdated" | "env.need.extension.hint" | "env.need.lib.missing" | "env.need.lib.outdated" | "env.need.lib.unsatisfied" | "env.need.lib.hint" | "env.need.env.missing" | "env.need.env.hint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.unchecked" | "panels.dep.missing" | "panels.dep.outdated" | "panels.dep.degraded" | "panels.dep.unsupported" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.uncheckedHint" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.removeSlow" | "panels.market.updateNoChange" | "panels.market.updateUnknownVersion" | "panels.market.updateGone" | "panels.market.updateRestored" | "panels.market.updateBehind" | "panels.market.selfUpdateFailed" | "panels.market.selfUpdateUnknown" | "panels.market.selfUpdateRolledBack" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.needBinary" | "panels.market.needLib" | "panels.market.localMark" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.updateNeedsWorkbench" | "panels.market.updateIncompatible" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.pendingFollowUp" | "panels.market.migrationHint" | "panels.market.migrateAction" | "panels.market.migrating" | "panels.market.migrateConfirmTitle" | "panels.market.migrateConfirmDetail" | "panels.market.migrateConfirmAck" | "panels.market.migrateConfirmYes" | "panels.market.migrateDone" | "panels.market.dismissFollowUp" | "panels.market.dismissing" | "panels.market.dismissFollowUpTitle" | "panels.market.dismissFollowUpDetail" | "panels.market.dismissFollowUpAck" | "panels.market.dismissFollowUpYes" | "panels.market.dismissed" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.failureCredentials" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.tabInstalled" | "panels.market.tabs" | "panels.tab.discover" | "panels.discover.loading" | "panels.discover.slowHint" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeTitle" | "panels.discover.removeBody" | "panels.discover.sourceActions" | "panels.discover.sourceStateWritable" | "panels.discover.sourceStateReadOnly" | "panels.discover.sourceEnable" | "panels.discover.sourceDisable" | "panels.discover.sourceWorking" | "panels.discover.sourceEnabled" | "panels.discover.sourceReadOnly" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.clearSearch" | "panels.discover.all" | "panels.discover.sourceLabel" | "panels.discover.sourceKind" | "panels.discover.sourceKindHttp" | "panels.discover.sourceKindGit" | "panels.discover.sourceUrl" | "panels.discover.sourcePlaceholder" | "panels.discover.sourceRef" | "panels.discover.sourcePath" | "panels.discover.sourceLocal" | "panels.discover.sourceLocalHint" | "panels.discover.save" | "panels.discover.cancel" | "panels.discover.retry" | "panels.discover.noSource" | "panels.discover.noSourceHint" | "panels.discover.sourcesFailed" | "panels.discover.unreadable" | "panels.discover.sourceAuth" | "panels.discover.invalid" | "panels.discover.emptyRepo" | "panels.discover.missingIndex" | "panels.discover.initTitle" | "panels.discover.initCta" | "panels.discover.initWhat" | "panels.discover.initBranch" | "panels.discover.initBranchHint" | "panels.discover.initBranchBad" | "panels.discover.initOk" | "panels.discover.initBusy" | "panels.discover.initDone" | "panels.discover.stale" | "panels.discover.empty" | "panels.discover.noMatch" | "panels.discover.notInstalled" | "panels.discover.installed" | "panels.discover.installedVersion" | "panels.discover.update" | "panels.discover.badShell" | "panels.discover.badShellDetail" | "panels.discover.unverified" | "panels.discover.installing" | "panels.discover.installingNamed" | "panels.discover.cancelInstall" | "panels.discover.cancelling" | "panels.discover.installCancelled" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.transportTitle" | "panels.discover.transportSsh" | "panels.discover.transportHttps" | "panels.discover.transportOk" | "panels.discover.transportAuth" | "panels.discover.transportUnreachable" | "panels.discover.transportUnknown" | "panels.discover.transportChecking" | "panels.discover.transportTest" | "panels.discover.transportPlaceholder" | "panels.discover.transportNeedsAuth" | "panels.discover.expand" | "panels.discover.collapse" | "panels.discover.versionCount" | "panels.discover.sourceNpm" | "panels.discover.sourceNpmDefault" | "panels.discover.sourceGit" | "panels.discover.installVersion" | "panels.discover.confirmTitle" | "panels.discover.confirmDetail" | "panels.discover.confirmAck" | "panels.discover.confirmOk" | "panels.discover.confirmCancel" | "panels.discover.marketMenu" | "panels.discover.manageSources" | "panels.discover.sourcesTitle" | "panels.discover.sourcesIntro" | "panels.discover.sourcesLabel" | "panels.discover.sourceTrust" | "panels.discover.sourceDuplicate" | "panels.discover.sourceBadUrl" | "panels.discover.close" | "panels.discover.labelsMenu" | "panels.discover.labelsCount" | "panels.discover.tagsAll" | "panels.discover.sort" | "panels.discover.sortWith" | "panels.discover.sortRelevance" | "panels.discover.sortDefault" | "panels.discover.sortPublished" | "panels.discover.categoriesLabel" | "panels.discover.showMore" | "panels.discover.entryMeta" | "panels.discover.entryMetaAuthor" | "panels.discover.openEntry" | "panels.discover.cardInstall" | "panels.discover.cardInstalled" | "panels.discover.cardUpdate" | "panels.discover.cardBlocked" | "panels.discover.installTitle" | "panels.discover.installVersionTitle" | "panels.discover.openInstalled" | "panels.discover.noCompatibleVersion" | "panels.discover.detailBack" | "panels.discover.publishedAt" | "panels.discover.detailMarket" | "panels.discover.detailIncompatible" | "panels.discover.detailUnknown" | "panels.discover.detailSource" | "panels.discover.authorUnknown" | "panels.discover.tabOverview" | "panels.discover.tabReadme" | "panels.discover.tabChangelog" | "panels.discover.docReadme" | "panels.discover.docChangelog" | "panels.discover.docLoading" | "panels.discover.docMissing" | "panels.discover.docUnavailable" | "panels.discover.docUnknownReason" | "panels.discover.detailTabs" | "panels.discover.factPackage" | "panels.discover.factRegistry" | "panels.discover.factRepository" | "panels.discover.factCommit" | "panels.discover.factDirectory" | "panels.discover.factPublished" | "panels.discover.factAuthor" | "panels.discover.factHomepage" | "panels.discover.factCategory" | "panels.discover.factLabels" | "panels.discover.factMarket" | "panels.discover.detailVersions" | "panels.discover.versionsLabel" | "panels.discover.tagRecommended" | "panels.discover.tagPrerelease" | "panels.discover.tagInstalled" | "panels.discover.tagIncompatible" | "panels.discover.tagUnknown" | "panels.discover.selected" | "panels.discover.done" | "panels.discover.installTrust" | "panels.discover.progress" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.update" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.toolchain.ok" | "env.toolchain.warn" | "env.opencli.ok" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.wake" | "env.wake.opening" | "env.wake.browserOpen" | "env.wake.noBrowser" | "env.wake.failed" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.toolchain" | "env.step.opencli" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "adapterSet.not-configured" | "adapterSet.no-profile" | "adapterSet.malformed" | "adapterSet.not-resolvable" | "adapterSet.import-failed" | "adapterSet.bad-export" | "adapterSet.factory-failed" | "adapterSet.incompatible-version" | "adapterSet.missing-member" | "env.unit.hint" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "adapterSet.title" | "adapterSet.lead" | "adapterSet.active" | "adapterSet.defaults" | "adapterSet.failed" | "adapterSet.healthUnreadable" | "workbenchSettings.nav" | "workbenchSettings.lead" | "sidebarEdition.nav" | "sidebarEdition.lead" | "sidebarEdition.official" | "sidebarEdition.officialHint" | "sidebarEdition.custom" | "sidebarEdition.customHint" | "sidebarEdition.saving" | "sidebarEdition.reloadRequired" | "sidebarEdition.reload" | "sidebarEdition.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.author" | "approval.publish.authorMissing" | "approval.publish.owner" | "approval.publish.ownerUnowned" | "approval.publish.ownerTaken" | "approval.publish.unit" | "approval.publish.unitTaken" | "approval.publish.path" | "approval.publish.pathTaken" | "approval.publish.registry" | "approval.publish.repo" | "approval.publish.branch" | "approval.publish.defaultBranch" | "approval.publish.artifacts" | "approval.publish.index" | "approval.publish.commits" | "approval.publish.twoCommits" | "approval.publish.reading" | "approval.publish.changelog" | "approval.publish.changelogPending" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "approval.market.source" | "approval.market.url" | "approval.market.action" | "approval.market.policy" | "approval.market.enable" | "approval.market.disable" | "approval.market.writable" | "approval.market.readOnly" | "approval.market.reading" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
716
756
  };
717
757
  /** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
718
758
  export type { WorkbenchMessages };
package/dist/i18n/zh.d.ts CHANGED
@@ -256,6 +256,7 @@ export declare const zh: {
256
256
  readonly 'panels.market.add.failurePnpmMissing': "没有找到 pnpm,无法安装";
257
257
  readonly 'panels.market.add.failureInstalled': "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。";
258
258
  readonly 'panels.market.add.failureGeneric': "安装过程中出错,原因见安装详情";
259
+ readonly 'panels.market.add.failureCredentials': "这个仓库要凭证:本机没有它的 git 凭据。先在终端里 clone 一次、配好凭据助手,或改用 SSH 地址,再装一次。";
259
260
  readonly 'panels.market.add.approveTitle': "需要你允许安装脚本";
260
261
  readonly 'panels.market.add.approveCaution': "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。";
261
262
  readonly 'panels.market.add.approveRun': "允许并继续安装";
@@ -297,10 +298,16 @@ export declare const zh: {
297
298
  readonly 'panels.discover.addingSource': "正在添加…";
298
299
  readonly 'panels.discover.addFirstSource': "添加索引源";
299
300
  readonly 'panels.discover.removeSource': "移除";
300
- readonly 'panels.discover.removeSourceNamed': "移除 {url}";
301
- readonly 'panels.discover.useSource': "使用";
302
- readonly 'panels.discover.useSourceNamed': "使用 {label}";
303
- readonly 'panels.discover.sourceCurrent': "当前使用";
301
+ readonly 'panels.discover.removeTitle': "移除这个索引源?";
302
+ readonly 'panels.discover.removeBody': "会把「{label}」从这份列表里移除;仓库本身不会被删,之后还能再添加。";
303
+ readonly 'panels.discover.sourceActions': "「{label}」的操作";
304
+ readonly 'panels.discover.sourceStateWritable': "可发布";
305
+ readonly 'panels.discover.sourceStateReadOnly': "仅读取模块列表";
306
+ readonly 'panels.discover.sourceEnable': "设为可发布";
307
+ readonly 'panels.discover.sourceDisable': "设为只读";
308
+ readonly 'panels.discover.sourceWorking': "设置中…";
309
+ readonly 'panels.discover.sourceEnabled': "已把「{label}」设为可发布";
310
+ readonly 'panels.discover.sourceReadOnly': "已把「{label}」设为只读";
304
311
  readonly 'panels.discover.refresh': "刷新";
305
312
  readonly 'panels.discover.search': "搜索模块";
306
313
  readonly 'panels.discover.clearSearch': "清除搜索";
@@ -322,12 +329,13 @@ export declare const zh: {
322
329
  readonly 'panels.discover.noSourceHint': "添加一个模块市场索引(http 地址或 git 仓库),即可在这里浏览和安装其中的模块";
323
330
  readonly 'panels.discover.sourcesFailed': "无法读取索引源";
324
331
  readonly 'panels.discover.unreadable': "无法读取此索引";
332
+ readonly 'panels.discover.sourceAuth': "这个索引源读不了:本机没有它的 git 凭据。配好凭据(或在源里改用 SSH 地址),再点右上角的刷新。";
325
333
  readonly 'panels.discover.invalid': "此索引的格式无效";
326
334
  readonly 'panels.discover.emptyRepo': "这个仓库还没有任何提交";
327
335
  readonly 'panels.discover.missingIndex': "仓库里还没有索引文件 {path}";
328
336
  readonly 'panels.discover.initTitle': "把这个仓库初始化成模块市场索引?";
329
337
  readonly 'panels.discover.initCta': "初始化成市场索引";
330
- readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。";
338
+ readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。";
331
339
  readonly 'panels.discover.initBranch': "分支";
332
340
  readonly 'panels.discover.initBranchHint': "索引和打包文件都发到这个分支;空仓库会新建它。";
333
341
  readonly 'panels.discover.initBranchBad': "分支名只能用字母、数字、点、下划线、斜杠或短横线";
@@ -345,8 +353,23 @@ export declare const zh: {
345
353
  readonly 'panels.discover.badShellDetail': "此版本与当前的工作台 {current} 不兼容,它要求 {peer}";
346
354
  readonly 'panels.discover.unverified': "工作台未验证";
347
355
  readonly 'panels.discover.installing': "正在安装…";
356
+ readonly 'panels.discover.installingNamed': "正在安装「{name}」…";
357
+ readonly 'panels.discover.cancelInstall': "取消安装";
358
+ readonly 'panels.discover.cancelling': "正在取消…";
359
+ readonly 'panels.discover.installCancelled': "已取消安装:{name}";
348
360
  readonly 'panels.discover.installedDone': "装好了:{name}";
349
361
  readonly 'panels.discover.failed': "操作失败:{reason}";
362
+ readonly 'panels.discover.transportTitle': "从哪读这个仓库";
363
+ readonly 'panels.discover.transportSsh': "SSH";
364
+ readonly 'panels.discover.transportHttps': "HTTPS";
365
+ readonly 'panels.discover.transportOk': "能读";
366
+ readonly 'panels.discover.transportAuth': "要凭证";
367
+ readonly 'panels.discover.transportUnreachable': "连不上";
368
+ readonly 'panels.discover.transportUnknown': "没探成";
369
+ readonly 'panels.discover.transportChecking': "正在探测…";
370
+ readonly 'panels.discover.transportTest': "试这个地址";
371
+ readonly 'panels.discover.transportPlaceholder': "或贴一个别的地址(公司镜像、别名)";
372
+ readonly 'panels.discover.transportNeedsAuth': "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。";
350
373
  readonly 'panels.discover.expand': "展开版本";
351
374
  readonly 'panels.discover.collapse': "收起版本";
352
375
  readonly 'panels.discover.versionCount': "{n} 个版本";
@@ -637,6 +660,13 @@ export declare const zh: {
637
660
  readonly 'approval.publish.version': "版本";
638
661
  readonly 'approval.publish.author': "作者";
639
662
  readonly 'approval.publish.authorMissing': "未署名";
663
+ readonly 'approval.publish.owner': "认领人";
664
+ readonly 'approval.publish.ownerUnowned': "原来没署名";
665
+ readonly 'approval.publish.ownerTaken': "已有主人:{owner}";
666
+ readonly 'approval.publish.unit': "模块 id";
667
+ readonly 'approval.publish.unitTaken': "已被 {entry} 占用";
668
+ readonly 'approval.publish.path': "产物目录";
669
+ readonly 'approval.publish.pathTaken': "已被 {entry} 占用";
640
670
  readonly 'approval.publish.registry': "源";
641
671
  readonly 'approval.publish.repo': "仓库";
642
672
  readonly 'approval.publish.branch': "分支";
@@ -647,6 +677,7 @@ export declare const zh: {
647
677
  readonly 'approval.publish.twoCommits': "打包文件 + market.json 两次提交,一次推送";
648
678
  readonly 'approval.publish.reading': "读取中…";
649
679
  readonly 'approval.publish.changelog': "{version} 的更新日志";
680
+ readonly 'approval.publish.changelogPending': "{version} 这一版会写进更新日志,随包发布";
650
681
  readonly 'approval.publish.changelogMissing': "这一版还没有更新日志({version}),发布会被拦下";
651
682
  readonly 'approval.publish.targetAuto': "按配置默认";
652
683
  readonly 'approval.publish.targetTeam': "团队源";
@@ -655,6 +686,15 @@ export declare const zh: {
655
686
  readonly 'approval.publish.targetGit': "git 仓库";
656
687
  readonly 'approval.publish.targetMarket': "模块市场索引";
657
688
  readonly 'approval.publish.targetLocal': "留在本机";
689
+ readonly 'approval.market.source': "索引源";
690
+ readonly 'approval.market.url': "地址";
691
+ readonly 'approval.market.action': "这次操作";
692
+ readonly 'approval.market.policy': "当前状态";
693
+ readonly 'approval.market.enable': "设为可发布";
694
+ readonly 'approval.market.disable': "改回只读";
695
+ readonly 'approval.market.writable': "可发布";
696
+ readonly 'approval.market.readOnly': "仅读取模块列表";
697
+ readonly 'approval.market.reading': "正在读取…";
658
698
  readonly 'markdown.copy': "复制";
659
699
  readonly 'markdown.copied': "已复制";
660
700
  readonly 'markdown.footnotes': "脚注";
package/dist/i18n/zh.js CHANGED
@@ -248,6 +248,7 @@ export const zh = {
248
248
  'panels.market.add.failurePnpmMissing': '没有找到 pnpm,无法安装',
249
249
  'panels.market.add.failureInstalled': '它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。',
250
250
  'panels.market.add.failureGeneric': '安装过程中出错,原因见安装详情',
251
+ 'panels.market.add.failureCredentials': '这个仓库要凭证:本机没有它的 git 凭据。先在终端里 clone 一次、配好凭据助手,或改用 SSH 地址,再装一次。',
251
252
  'panels.market.add.approveTitle': '需要你允许安装脚本',
252
253
  'panels.market.add.approveCaution': '只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。',
253
254
  'panels.market.add.approveRun': '允许并继续安装',
@@ -289,10 +290,16 @@ export const zh = {
289
290
  'panels.discover.addingSource': '正在添加…',
290
291
  'panels.discover.addFirstSource': '添加索引源',
291
292
  'panels.discover.removeSource': '移除',
292
- 'panels.discover.removeSourceNamed': '移除 {url}',
293
- 'panels.discover.useSource': '使用',
294
- 'panels.discover.useSourceNamed': '使用 {label}',
295
- 'panels.discover.sourceCurrent': '当前使用',
293
+ 'panels.discover.removeTitle': '移除这个索引源?',
294
+ 'panels.discover.removeBody': '会把「{label}」从这份列表里移除;仓库本身不会被删,之后还能再添加。',
295
+ 'panels.discover.sourceActions': '「{label}」的操作',
296
+ 'panels.discover.sourceStateWritable': '可发布',
297
+ 'panels.discover.sourceStateReadOnly': '仅读取模块列表',
298
+ 'panels.discover.sourceEnable': '设为可发布',
299
+ 'panels.discover.sourceDisable': '设为只读',
300
+ 'panels.discover.sourceWorking': '设置中…',
301
+ 'panels.discover.sourceEnabled': '已把「{label}」设为可发布',
302
+ 'panels.discover.sourceReadOnly': '已把「{label}」设为只读',
296
303
  'panels.discover.refresh': '刷新',
297
304
  'panels.discover.search': '搜索模块',
298
305
  'panels.discover.clearSearch': '清除搜索',
@@ -314,12 +321,13 @@ export const zh = {
314
321
  'panels.discover.noSourceHint': '添加一个模块市场索引(http 地址或 git 仓库),即可在这里浏览和安装其中的模块',
315
322
  'panels.discover.sourcesFailed': '无法读取索引源',
316
323
  'panels.discover.unreadable': '无法读取此索引',
324
+ 'panels.discover.sourceAuth': '这个索引源读不了:本机没有它的 git 凭据。配好凭据(或在源里改用 SSH 地址),再点右上角的刷新。',
317
325
  'panels.discover.invalid': '此索引的格式无效',
318
326
  'panels.discover.emptyRepo': '这个仓库还没有任何提交',
319
327
  'panels.discover.missingIndex': '仓库里还没有索引文件 {path}',
320
328
  'panels.discover.initTitle': '把这个仓库初始化成模块市场索引?',
321
329
  'panels.discover.initCta': '初始化成市场索引',
322
- 'panels.discover.initWhat': '会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。',
330
+ 'panels.discover.initWhat': '会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。',
323
331
  'panels.discover.initBranch': '分支',
324
332
  'panels.discover.initBranchHint': '索引和打包文件都发到这个分支;空仓库会新建它。',
325
333
  'panels.discover.initBranchBad': '分支名只能用字母、数字、点、下划线、斜杠或短横线',
@@ -337,8 +345,23 @@ export const zh = {
337
345
  'panels.discover.badShellDetail': '此版本与当前的工作台 {current} 不兼容,它要求 {peer}',
338
346
  'panels.discover.unverified': '工作台未验证',
339
347
  'panels.discover.installing': '正在安装…',
348
+ 'panels.discover.installingNamed': '正在安装「{name}」…',
349
+ 'panels.discover.cancelInstall': '取消安装',
350
+ 'panels.discover.cancelling': '正在取消…',
351
+ 'panels.discover.installCancelled': '已取消安装:{name}',
340
352
  'panels.discover.installedDone': '装好了:{name}',
341
353
  'panels.discover.failed': '操作失败:{reason}',
354
+ 'panels.discover.transportTitle': '从哪读这个仓库',
355
+ 'panels.discover.transportSsh': 'SSH',
356
+ 'panels.discover.transportHttps': 'HTTPS',
357
+ 'panels.discover.transportOk': '能读',
358
+ 'panels.discover.transportAuth': '要凭证',
359
+ 'panels.discover.transportUnreachable': '连不上',
360
+ 'panels.discover.transportUnknown': '没探成',
361
+ 'panels.discover.transportChecking': '正在探测…',
362
+ 'panels.discover.transportTest': '试这个地址',
363
+ 'panels.discover.transportPlaceholder': '或贴一个别的地址(公司镜像、别名)',
364
+ 'panels.discover.transportNeedsAuth': '这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。',
342
365
  'panels.discover.expand': '展开版本',
343
366
  'panels.discover.collapse': '收起版本',
344
367
  'panels.discover.versionCount': '{n} 个版本',
@@ -629,6 +652,13 @@ export const zh = {
629
652
  'approval.publish.version': '版本',
630
653
  'approval.publish.author': '作者',
631
654
  'approval.publish.authorMissing': '未署名',
655
+ 'approval.publish.owner': '认领人',
656
+ 'approval.publish.ownerUnowned': '原来没署名',
657
+ 'approval.publish.ownerTaken': '已有主人:{owner}',
658
+ 'approval.publish.unit': '模块 id',
659
+ 'approval.publish.unitTaken': '已被 {entry} 占用',
660
+ 'approval.publish.path': '产物目录',
661
+ 'approval.publish.pathTaken': '已被 {entry} 占用',
632
662
  'approval.publish.registry': '源',
633
663
  'approval.publish.repo': '仓库',
634
664
  'approval.publish.branch': '分支',
@@ -639,6 +669,7 @@ export const zh = {
639
669
  'approval.publish.twoCommits': '打包文件 + market.json 两次提交,一次推送',
640
670
  'approval.publish.reading': '读取中…',
641
671
  'approval.publish.changelog': '{version} 的更新日志',
672
+ 'approval.publish.changelogPending': '{version} 这一版会写进更新日志,随包发布',
642
673
  'approval.publish.changelogMissing': '这一版还没有更新日志({version}),发布会被拦下',
643
674
  'approval.publish.targetAuto': '按配置默认',
644
675
  'approval.publish.targetTeam': '团队源',
@@ -647,6 +678,15 @@ export const zh = {
647
678
  'approval.publish.targetGit': 'git 仓库',
648
679
  'approval.publish.targetMarket': '模块市场索引',
649
680
  'approval.publish.targetLocal': '留在本机',
681
+ 'approval.market.source': '索引源',
682
+ 'approval.market.url': '地址',
683
+ 'approval.market.action': '这次操作',
684
+ 'approval.market.policy': '当前状态',
685
+ 'approval.market.enable': '设为可发布',
686
+ 'approval.market.disable': '改回只读',
687
+ 'approval.market.writable': '可发布',
688
+ 'approval.market.readOnly': '仅读取模块列表',
689
+ 'approval.market.reading': '正在读取…',
650
690
  'markdown.copy': '复制',
651
691
  'markdown.copied': '已复制',
652
692
  'markdown.footnotes': '脚注',
package/dist/index.d.ts CHANGED
@@ -66,6 +66,7 @@ export * from './i18n/settings.js';
66
66
  export * from './i18n/zh.js';
67
67
  export * from './lib/blocker-action.js';
68
68
  export * from './lib/market-index.js';
69
+ export * from './lib/git-address.js';
69
70
  export * from './lib/board-fact.js';
70
71
  export * from './lib/busy.js';
71
72
  export * from './lib/dsh-client.js';
package/dist/index.js CHANGED
@@ -66,6 +66,7 @@ export * from './i18n/settings.js';
66
66
  export * from './i18n/zh.js';
67
67
  export * from './lib/blocker-action.js';
68
68
  export * from './lib/market-index.js';
69
+ export * from './lib/git-address.js';
69
70
  export * from './lib/board-fact.js';
70
71
  export * from './lib/busy.js';
71
72
  export * from './lib/dsh-client.js';
@@ -0,0 +1,23 @@
1
+ export interface GitAddress {
2
+ readonly kind: 'https' | 'ssh';
3
+ readonly host: string;
4
+ readonly path: string;
5
+ readonly user?: string;
6
+ readonly port?: number;
7
+ }
8
+ export interface GitTransportCandidate {
9
+ readonly kind: 'https' | 'ssh';
10
+ readonly url: string;
11
+ }
12
+ /**
13
+ * 把一个 git 地址拆成「哪台主机 + 哪个路径」,不管发布者当初用的是 https、ssh 还是
14
+ * scp 那种 `git@host:path` 写法;认不出来给 undefined。
15
+ */
16
+ export declare function gitAddressOf(url: string): GitAddress | undefined;
17
+ /** 一份地址的规范写法:ssh 一律成 `ssh://user@host/path`(pnpm 认这个),https 原样。 */
18
+ export declare function gitAddressText(address: GitAddress): string;
19
+ /**
20
+ * 同一个仓库的两种读法,发布者用的那种排前面。ssh 那条一律规范成 `ssh://` 形式,
21
+ * 因为 `git@host:path` 拼进安装 spec 时 pnpm 不认;https 那条保留发布者的原样(含 http)。
22
+ */
23
+ export declare function gitTransportCandidates(url: string): readonly GitTransportCandidate[];
@@ -0,0 +1,79 @@
1
+ const SCP = /^(?:([A-Za-z0-9._-]+)@)?([A-Za-z0-9.-]+):(?!\/)(\S+)$/;
2
+ function bare(url) {
3
+ return url.trim().replace(/^git\+/, '');
4
+ }
5
+ function pathOf(pathname) {
6
+ return pathname.replace(/^\/+/, '').replace(/\/+$/, '');
7
+ }
8
+ /**
9
+ * 把一个 git 地址拆成「哪台主机 + 哪个路径」,不管发布者当初用的是 https、ssh 还是
10
+ * scp 那种 `git@host:path` 写法;认不出来给 undefined。
11
+ */
12
+ export function gitAddressOf(url) {
13
+ const text = bare(url);
14
+ if (text === '')
15
+ return undefined;
16
+ if (text.includes('://')) {
17
+ let parsed;
18
+ try {
19
+ parsed = new URL(text);
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:' && parsed.protocol !== 'ssh:') {
25
+ return undefined;
26
+ }
27
+ const path = pathOf(parsed.pathname);
28
+ if (path === '')
29
+ return undefined;
30
+ const port = parsed.port === '' ? undefined : Number(parsed.port);
31
+ const shared = {
32
+ host: parsed.hostname,
33
+ path,
34
+ ...(port === undefined ? {} : { port }),
35
+ };
36
+ if (parsed.protocol !== 'ssh:')
37
+ return { kind: 'https', ...shared };
38
+ return { kind: 'ssh', ...shared, ...(parsed.username === '' ? {} : { user: parsed.username }) };
39
+ }
40
+ const scp = SCP.exec(text);
41
+ if (scp === null)
42
+ return undefined;
43
+ const path = pathOf(scp[3] ?? '');
44
+ if (path === '')
45
+ return undefined;
46
+ return {
47
+ kind: 'ssh',
48
+ host: scp[2] ?? '',
49
+ path,
50
+ ...(scp[1] === undefined ? {} : { user: scp[1] }),
51
+ };
52
+ }
53
+ /** 一份地址的规范写法:ssh 一律成 `ssh://user@host/path`(pnpm 认这个),https 原样。 */
54
+ export function gitAddressText(address) {
55
+ const port = address.port === undefined ? '' : `:${String(address.port)}`;
56
+ if (address.kind === 'ssh') {
57
+ return `ssh://${address.user === undefined || address.user === '' ? 'git' : address.user}@${address.host}${port}/${address.path}`;
58
+ }
59
+ return `https://${address.host}${port}/${address.path}`;
60
+ }
61
+ /**
62
+ * 同一个仓库的两种读法,发布者用的那种排前面。ssh 那条一律规范成 `ssh://` 形式,
63
+ * 因为 `git@host:path` 拼进安装 spec 时 pnpm 不认;https 那条保留发布者的原样(含 http)。
64
+ */
65
+ export function gitTransportCandidates(url) {
66
+ const address = gitAddressOf(url);
67
+ if (address === undefined) {
68
+ const only = bare(url);
69
+ return only === '' ? [] : [{ kind: only.startsWith('ssh') ? 'ssh' : 'https', url: only }];
70
+ }
71
+ const primary = {
72
+ kind: address.kind,
73
+ url: address.kind === 'ssh' ? gitAddressText(address) : bare(url),
74
+ };
75
+ const other = address.kind === 'https'
76
+ ? { kind: 'ssh', url: gitAddressText({ kind: 'ssh', host: address.host, path: address.path }) }
77
+ : { kind: 'https', url: gitAddressText({ kind: 'https', host: address.host, path: address.path }) };
78
+ return other.url === primary.url ? [primary] : [primary, other];
79
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-workbench/shared",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "工作台与模块共享的纯代码与契约类型:类型、纯逻辑、哑组件、平台解析。宿主侧的东西从 /host 进(不影响浏览器产物)。",
5
5
  "license": "MIT",
6
6
  "type": "module",