@dsh-workbench/shared 1.0.0-beta.0 → 1.0.0-beta.1
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/dist/components/FormNodes.js +5 -1
- package/dist/components/FormRows.css +1 -0
- package/dist/components/FormRows.d.ts +4 -2
- package/dist/components/FormRows.js +5 -4
- package/dist/config/constants.d.ts +0 -2
- package/dist/config/constants.js +0 -5
- package/dist/contract/command.d.ts +22 -0
- package/dist/contract/command.js +1 -0
- package/dist/contract/data.d.ts +2 -1
- package/dist/contract/extension.d.ts +14 -0
- package/dist/contract/extension.js +1 -0
- package/dist/contract/git.d.ts +38 -0
- package/dist/contract/git.js +1 -0
- package/dist/contract/lib.d.ts +4 -0
- package/dist/contract/lib.js +1 -0
- package/dist/host/adapter-set.js +1 -0
- package/dist/host/adapters.d.ts +6 -0
- package/dist/host/extension.d.ts +7 -0
- package/dist/host/extension.js +39 -0
- package/dist/host/git.d.ts +2 -33
- package/dist/host/http.js +1 -1
- package/dist/host/market-index.js +3 -44
- package/dist/host/port-types.d.ts +1 -0
- package/dist/host/release-packages.generated.d.ts +1 -0
- package/dist/host/release-packages.generated.js +10 -0
- package/dist/host/tool-kit.d.ts +0 -6
- package/dist/host/tool-kit.js +0 -22
- package/dist/host/unit-face.d.ts +7 -0
- package/dist/host/version-range.js +7 -67
- package/dist/host/version.d.ts +3 -2
- package/dist/host/version.js +17 -19
- package/dist/host.d.ts +6 -0
- package/dist/host.js +6 -0
- package/dist/i18n/en.js +1 -0
- package/dist/i18n/index.d.ts +2 -1
- package/dist/i18n/zh.d.ts +1 -0
- package/dist/i18n/zh.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/lib/version.d.ts +4 -0
- package/dist/lib/version.js +21 -0
- package/package.json +6 -4
- package/src/components/Form.test.tsx +6 -0
- package/src/components/FormNodes.tsx +6 -1
- package/src/components/FormRows.css +1 -0
- package/src/components/FormRows.test.tsx +30 -0
- package/src/components/FormRows.tsx +9 -5
- package/src/config/constants.ts +0 -6
- package/src/contract/command.ts +25 -0
- package/src/contract/data.ts +2 -1
- package/src/contract/extension.ts +20 -0
- package/src/contract/git.ts +20 -0
- package/src/contract/lib.ts +5 -0
- package/src/host/adapter-set.ts +1 -0
- package/src/host/adapters.ts +6 -0
- package/src/host/extension.test.ts +55 -0
- package/src/host/extension.ts +57 -0
- package/src/host/git.ts +6 -14
- package/src/host/http.ts +1 -1
- package/src/host/market-index.ts +3 -33
- package/src/host/port-types.ts +1 -0
- package/src/host/release-packages.generated.ts +10 -0
- package/src/host/tool-kit.ts +0 -35
- package/src/host/unit-face.ts +7 -0
- package/src/host/version-range.ts +6 -64
- package/src/host/version.ts +18 -18
- package/src/host.ts +6 -0
- package/src/i18n/en.ts +1 -0
- package/src/i18n/zh.ts +1 -0
- package/src/index.ts +4 -0
package/dist/host.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export * from './api/context-ref.js';
|
|
|
3
3
|
export * from './contract/unit.js';
|
|
4
4
|
export * from './contract/needs.js';
|
|
5
5
|
export * from './contract/data.js';
|
|
6
|
+
export * from './contract/extension.js';
|
|
7
|
+
export * from './contract/lib.js';
|
|
8
|
+
export * from './contract/git.js';
|
|
9
|
+
export * from './contract/command.js';
|
|
6
10
|
export * from './contract/unit-board.js';
|
|
7
11
|
export * from './contract/workbench-contract.js';
|
|
8
12
|
export * from './contract/blocker.js';
|
|
@@ -41,6 +45,7 @@ export * from './host/provision.js';
|
|
|
41
45
|
export * from './host/channel-plugin.js';
|
|
42
46
|
export * from './host/recipe.js';
|
|
43
47
|
export * from './host/recipe-rules.js';
|
|
48
|
+
export * from './host/release-packages.generated.js';
|
|
44
49
|
export * from './contract/unit-capability.js';
|
|
45
50
|
export * from './contract/plugin-source.js';
|
|
46
51
|
export * from './contract/cli.js';
|
|
@@ -63,6 +68,7 @@ export * from './host/patch.js';
|
|
|
63
68
|
export * from './host/adapters.js';
|
|
64
69
|
export * from './host/adapter-set.js';
|
|
65
70
|
export * from './host/needs.js';
|
|
71
|
+
export * from './host/extension.js';
|
|
66
72
|
export * from './host/port-types.js';
|
|
67
73
|
export * from './host/version-range.js';
|
|
68
74
|
export * from './host/market-index.js';
|
package/dist/host.js
CHANGED
|
@@ -3,6 +3,10 @@ export * from './api/context-ref.js';
|
|
|
3
3
|
export * from './contract/unit.js';
|
|
4
4
|
export * from './contract/needs.js';
|
|
5
5
|
export * from './contract/data.js';
|
|
6
|
+
export * from './contract/extension.js';
|
|
7
|
+
export * from './contract/lib.js';
|
|
8
|
+
export * from './contract/git.js';
|
|
9
|
+
export * from './contract/command.js';
|
|
6
10
|
export * from './contract/unit-board.js';
|
|
7
11
|
export * from './contract/workbench-contract.js';
|
|
8
12
|
export * from './contract/blocker.js';
|
|
@@ -41,6 +45,7 @@ export * from './host/provision.js';
|
|
|
41
45
|
export * from './host/channel-plugin.js';
|
|
42
46
|
export * from './host/recipe.js';
|
|
43
47
|
export * from './host/recipe-rules.js';
|
|
48
|
+
export * from './host/release-packages.generated.js';
|
|
44
49
|
export * from './contract/unit-capability.js';
|
|
45
50
|
export * from './contract/plugin-source.js';
|
|
46
51
|
export * from './contract/cli.js';
|
|
@@ -63,6 +68,7 @@ export * from './host/patch.js';
|
|
|
63
68
|
export * from './host/adapters.js';
|
|
64
69
|
export * from './host/adapter-set.js';
|
|
65
70
|
export * from './host/needs.js';
|
|
71
|
+
export * from './host/extension.js';
|
|
66
72
|
export * from './host/port-types.js';
|
|
67
73
|
export * from './host/version-range.js';
|
|
68
74
|
export * from './host/market-index.js';
|
package/dist/i18n/en.js
CHANGED
|
@@ -267,6 +267,7 @@ export const en = {
|
|
|
267
267
|
'panels.discover.loading': 'Reading the index',
|
|
268
268
|
'panels.discover.lead': 'Browse modules from an index source; install and go.',
|
|
269
269
|
'panels.discover.addSource': 'Add',
|
|
270
|
+
'panels.discover.addingSource': 'Adding…',
|
|
270
271
|
'panels.discover.addFirstSource': 'Add index source',
|
|
271
272
|
'panels.discover.removeSource': 'Remove',
|
|
272
273
|
'panels.discover.removeSourceNamed': 'Remove {url}',
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -277,6 +277,7 @@ export declare const dictionaries: {
|
|
|
277
277
|
readonly 'panels.discover.loading': "正在读取索引";
|
|
278
278
|
readonly 'panels.discover.lead': "从索引源浏览模块;装上就能用。";
|
|
279
279
|
readonly 'panels.discover.addSource': "添加";
|
|
280
|
+
readonly 'panels.discover.addingSource': "正在添加…";
|
|
280
281
|
readonly 'panels.discover.addFirstSource': "添加索引源";
|
|
281
282
|
readonly 'panels.discover.removeSource': "移除";
|
|
282
283
|
readonly 'panels.discover.removeSourceNamed': "移除 {url}";
|
|
@@ -701,7 +702,7 @@ export declare const dictionaries: {
|
|
|
701
702
|
readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行搬过来,或自己去「模型」里配。";
|
|
702
703
|
readonly 'configSync.failed': "同步没成功,再试一次。";
|
|
703
704
|
};
|
|
704
|
-
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.plugins" | "profileCreate.pluginsRequired" | "profileCreate.projects" | "profileCreate.sessions" | "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.tag.asset" | "configSync.tag.fileDiffers" | "configSync.assetOnly" | "configSync.assetMissingOne" | "configSync.assetMissingMany" | "configSync.assetDiffers" | "configSync.assetDiffersMany" | "configSync.assetExternal" | "configSync.assetOverwrite" | "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.appliedFiles" | "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.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "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.lead" | "panels.discover.addSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.refresh" | "panels.discover.search" | "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.docTitle" | "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.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>;
|
|
705
|
+
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.plugins" | "profileCreate.pluginsRequired" | "profileCreate.projects" | "profileCreate.sessions" | "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.tag.asset" | "configSync.tag.fileDiffers" | "configSync.assetOnly" | "configSync.assetMissingOne" | "configSync.assetMissingMany" | "configSync.assetDiffers" | "configSync.assetDiffersMany" | "configSync.assetExternal" | "configSync.assetOverwrite" | "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.appliedFiles" | "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.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "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.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.refresh" | "panels.discover.search" | "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.docTitle" | "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.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>;
|
|
705
706
|
};
|
|
706
707
|
/** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
|
|
707
708
|
export type { WorkbenchMessages };
|
package/dist/i18n/zh.d.ts
CHANGED
|
@@ -275,6 +275,7 @@ export declare const zh: {
|
|
|
275
275
|
readonly 'panels.discover.loading': "正在读取索引";
|
|
276
276
|
readonly 'panels.discover.lead': "从索引源浏览模块;装上就能用。";
|
|
277
277
|
readonly 'panels.discover.addSource': "添加";
|
|
278
|
+
readonly 'panels.discover.addingSource': "正在添加…";
|
|
278
279
|
readonly 'panels.discover.addFirstSource': "添加索引源";
|
|
279
280
|
readonly 'panels.discover.removeSource': "移除";
|
|
280
281
|
readonly 'panels.discover.removeSourceNamed': "移除 {url}";
|
package/dist/i18n/zh.js
CHANGED
|
@@ -267,6 +267,7 @@ export const zh = {
|
|
|
267
267
|
'panels.discover.loading': '正在读取索引',
|
|
268
268
|
'panels.discover.lead': '从索引源浏览模块;装上就能用。',
|
|
269
269
|
'panels.discover.addSource': '添加',
|
|
270
|
+
'panels.discover.addingSource': '正在添加…',
|
|
270
271
|
'panels.discover.addFirstSource': '添加索引源',
|
|
271
272
|
'panels.discover.removeSource': '移除',
|
|
272
273
|
'panels.discover.removeSourceNamed': '移除 {url}',
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,10 @@ export * from './config/constants.js';
|
|
|
37
37
|
export * from './config/storage.js';
|
|
38
38
|
export * from './contract/blocker.js';
|
|
39
39
|
export * from './contract/data.js';
|
|
40
|
+
export * from './contract/extension.js';
|
|
41
|
+
export * from './contract/lib.js';
|
|
42
|
+
export * from './contract/git.js';
|
|
43
|
+
export * from './contract/command.js';
|
|
40
44
|
export * from './contract/facts.js';
|
|
41
45
|
export * from './contract/long-task.js';
|
|
42
46
|
export * from './contract/protocol/bundle-install.js';
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,10 @@ export * from './config/constants.js';
|
|
|
37
37
|
export * from './config/storage.js';
|
|
38
38
|
export * from './contract/blocker.js';
|
|
39
39
|
export * from './contract/data.js';
|
|
40
|
+
export * from './contract/extension.js';
|
|
41
|
+
export * from './contract/lib.js';
|
|
42
|
+
export * from './contract/git.js';
|
|
43
|
+
export * from './contract/command.js';
|
|
40
44
|
export * from './contract/facts.js';
|
|
41
45
|
export * from './contract/long-task.js';
|
|
42
46
|
export * from './contract/protocol/bundle-install.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isValidVersion(value: string): boolean;
|
|
2
|
+
export declare function isPrereleaseVersion(value: string): boolean;
|
|
3
|
+
export declare function compareVersions(left: string, right: string): number | undefined;
|
|
4
|
+
export declare function isNewerVersion(latest: string, installed: string): boolean;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
export function isValidVersion(value) {
|
|
3
|
+
return semver.valid(value.trim()) !== null;
|
|
4
|
+
}
|
|
5
|
+
export function isPrereleaseVersion(value) {
|
|
6
|
+
const parsed = semver.valid(value.trim());
|
|
7
|
+
return parsed !== null && semver.prerelease(parsed) !== null;
|
|
8
|
+
}
|
|
9
|
+
export function compareVersions(left, right) {
|
|
10
|
+
const a = semver.valid(left.trim());
|
|
11
|
+
const b = semver.valid(right.trim());
|
|
12
|
+
if (a === null || b === null)
|
|
13
|
+
return undefined;
|
|
14
|
+
return semver.compare(a, b);
|
|
15
|
+
}
|
|
16
|
+
export function isNewerVersion(latest, installed) {
|
|
17
|
+
if (latest === installed)
|
|
18
|
+
return false;
|
|
19
|
+
const compared = compareVersions(latest, installed);
|
|
20
|
+
return compared === undefined ? true : compared > 0;
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-workbench/shared",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
4
|
"description": "工作台与模块共享的纯代码与契约类型:类型、纯逻辑、哑组件、平台解析。宿主侧的东西从 /host 进(不影响浏览器产物)。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -37,13 +37,15 @@
|
|
|
37
37
|
"@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
|
|
38
38
|
"@types/node": "^24.19.0",
|
|
39
39
|
"@types/react": "^19.0.0",
|
|
40
|
+
"@types/semver": "^7.8.0",
|
|
40
41
|
"@vitest/coverage-v8": "^5.0.2",
|
|
41
42
|
"react": "^18.0.0",
|
|
42
43
|
"typescript": "5.9",
|
|
43
44
|
"vitest": "^5.0.2"
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
46
|
-
"dayjs": "^1.11.23"
|
|
47
|
+
"dayjs": "^1.11.23",
|
|
48
|
+
"semver": "^7.8.5"
|
|
47
49
|
},
|
|
48
50
|
"repository": {
|
|
49
51
|
"type": "git",
|
|
@@ -55,12 +57,12 @@
|
|
|
55
57
|
"url": "https://github.com/novaeth/dsh-workbench/issues"
|
|
56
58
|
},
|
|
57
59
|
"scripts": {
|
|
58
|
-
"build": "tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
|
|
60
|
+
"build": "node scripts/gen-release-packages.mjs && tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
|
|
59
61
|
"typecheck": "tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/tsconfig.tsbuildinfo",
|
|
60
62
|
"test": "vitest run",
|
|
61
63
|
"coverage": "vitest run --coverage",
|
|
62
64
|
"barrels": "node scripts/barrels.mjs",
|
|
63
|
-
"selfcheck": "node scripts/check-state.mjs",
|
|
65
|
+
"selfcheck": "node scripts/check-state.mjs && node scripts/gen-release-packages.mjs --check",
|
|
64
66
|
"arch:report": "arch-guard --report-only",
|
|
65
67
|
"arch": "arch-guard"
|
|
66
68
|
}
|
|
@@ -403,6 +403,12 @@ describe('formRowsOf', () => {
|
|
|
403
403
|
expect(propsOf(rows[0])['children']).toBe('env:wb-form-env:true:false');
|
|
404
404
|
});
|
|
405
405
|
|
|
406
|
+
it('★ 标签挂到同一格的控件上(htmlFor 与绑定 id 同一个值)', () => {
|
|
407
|
+
const rows = formRowsOf({ fields: [field('env', 'prod')], problems, showProblem: true, busy: false });
|
|
408
|
+
|
|
409
|
+
expect(propsOf(rows[0])['htmlFor']).toBe('wb-form-env');
|
|
410
|
+
});
|
|
411
|
+
|
|
406
412
|
it('★ 这一格的 value / onChange 从字段配置原样进绑定(值只写一处)', () => {
|
|
407
413
|
const onChange = (): void => {};
|
|
408
414
|
const probe: FormField = {
|
|
@@ -193,6 +193,7 @@ export function formRowsOf<Values extends object>(args: {
|
|
|
193
193
|
h(FormRow, {
|
|
194
194
|
key: field.key,
|
|
195
195
|
label: field.label,
|
|
196
|
+
htmlFor: controlIdOf(field.key),
|
|
196
197
|
hint: field.hint,
|
|
197
198
|
problem: args.showProblem ? args.problems[field.key] : undefined,
|
|
198
199
|
layout: field.layout,
|
|
@@ -200,6 +201,10 @@ export function formRowsOf<Values extends object>(args: {
|
|
|
200
201
|
);
|
|
201
202
|
}
|
|
202
203
|
|
|
204
|
+
function controlIdOf(key: string): string {
|
|
205
|
+
return `wb-form-${key}`;
|
|
206
|
+
}
|
|
207
|
+
|
|
203
208
|
function controlOf<K extends string, V, Vals extends object>(
|
|
204
209
|
field: FormField<K, V, Vals>,
|
|
205
210
|
problems: Readonly<Record<string, ReactNode | undefined>>,
|
|
@@ -207,7 +212,7 @@ function controlOf<K extends string, V, Vals extends object>(
|
|
|
207
212
|
busy: boolean,
|
|
208
213
|
): ReactNode {
|
|
209
214
|
return field.control({
|
|
210
|
-
id:
|
|
215
|
+
id: controlIdOf(field.key),
|
|
211
216
|
name: field.key,
|
|
212
217
|
invalid: showProblem && Boolean(problems[field.key]),
|
|
213
218
|
disabled: busy || field.disabled === true,
|
|
@@ -48,6 +48,35 @@ describe('FormRow', () => {
|
|
|
48
48
|
expect(childrenOf(node).filter((one) => one !== null)).toHaveLength(2);
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
+
it('★ 行是 <div>,<label> 只包标签文字 —— 控件、提示与整行空白都不在标签里', () => {
|
|
52
|
+
const node = FormRow({
|
|
53
|
+
label: '项目',
|
|
54
|
+
htmlFor: 'wb-form-project',
|
|
55
|
+
hint: '选错了也能改',
|
|
56
|
+
children: '下拉',
|
|
57
|
+
}) as unknown as { type: unknown; props: { children: unknown[] } };
|
|
58
|
+
const [labelNode, controlNode, hintNode] = node.props.children as {
|
|
59
|
+
type: unknown;
|
|
60
|
+
props: Record<string, unknown>;
|
|
61
|
+
}[];
|
|
62
|
+
|
|
63
|
+
expect(node.type).toBe('div');
|
|
64
|
+
expect(labelNode?.type).toBe('label');
|
|
65
|
+
expect(labelNode?.props['htmlFor']).toBe('wb-form-project');
|
|
66
|
+
expect(texts(labelNode)).toEqual(['项目']);
|
|
67
|
+
expect(controlNode?.props['className']).toBe('wb-formControl');
|
|
68
|
+
expect(hintNode?.props['className']).toBe('wb-formHint');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('没给 htmlFor 就不挂 for(排布照旧,只是点标签不聚焦)', () => {
|
|
72
|
+
const node = FormRow({ label: '项目', children: '下拉' }) as unknown as {
|
|
73
|
+
props: { children: unknown[] };
|
|
74
|
+
};
|
|
75
|
+
const labelNode = node.props.children[0] as { props: Record<string, unknown> };
|
|
76
|
+
|
|
77
|
+
expect(labelNode.props['htmlFor']).toBeUndefined();
|
|
78
|
+
});
|
|
79
|
+
|
|
51
80
|
it('有 problem 就顶掉 hint(同一格,二选一),错误行挂 data-wb-problem 给聚焦那件找', () => {
|
|
52
81
|
const node = FormRow({
|
|
53
82
|
label: '项目',
|
|
@@ -150,6 +179,7 @@ describe('标签列:同一个 FormRows 共用一列(ADR-0052 §11)', () =>
|
|
|
150
179
|
|
|
151
180
|
it('★ 标签不折行;stacked 还是单列、标签照常换行', () => {
|
|
152
181
|
expect(declarations('.wb-formLabel')).toContain('white-space: nowrap');
|
|
182
|
+
expect(declarations('.wb-formLabel')).toContain('justify-self: start');
|
|
153
183
|
expect(declarations(".wb-formRow[data-layout='stacked'] .wb-formLabel")).toContain(
|
|
154
184
|
'white-space: normal',
|
|
155
185
|
);
|
|
@@ -23,6 +23,7 @@ export function FormRows({ children }: FormRowsProps) {
|
|
|
23
23
|
*/
|
|
24
24
|
export interface FormRowProps {
|
|
25
25
|
readonly label: ReactNode;
|
|
26
|
+
readonly htmlFor?: string | undefined;
|
|
26
27
|
readonly hint?: ReactNode | undefined;
|
|
27
28
|
readonly problem?: ReactNode | undefined;
|
|
28
29
|
readonly layout?: 'inline' | 'stacked' | undefined;
|
|
@@ -32,20 +33,23 @@ export interface FormRowProps {
|
|
|
32
33
|
/**
|
|
33
34
|
* 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
|
|
34
35
|
* @param props.label - 这一行的标签;进了这一行,控件自己就别再给 `label`,否则会多一个标签。
|
|
36
|
+
* @param props.htmlFor - 标签挂到哪个控件(同一个 `id`);不给就只是排布,点标签不聚焦 —— `Form` 会自己接好。
|
|
35
37
|
* @param props.hint - 控件下的说明;给了 `problem` 就不画它 —— 同一格不叠两段话。
|
|
36
38
|
* @param props.problem - 校验失败那句话;给了就顶掉 `hint` 并给整行加上出错标记。
|
|
37
39
|
* @param props.layout - `stacked` 才是标签在上、控件在下(默认 `inline`:标签在左)。
|
|
38
40
|
* @param props.children - 控件本体。
|
|
39
|
-
* @returns 一个 `<label
|
|
41
|
+
* @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
|
|
40
42
|
*/
|
|
41
|
-
export function FormRow({ label, hint, problem, layout = 'inline', children }: FormRowProps) {
|
|
43
|
+
export function FormRow({ label, htmlFor, hint, problem, layout = 'inline', children }: FormRowProps) {
|
|
42
44
|
return (
|
|
43
|
-
<
|
|
45
|
+
<div
|
|
44
46
|
className="wb-formRow"
|
|
45
47
|
data-layout={layout}
|
|
46
48
|
data-wb-problem={problem === undefined ? undefined : ''}
|
|
47
49
|
>
|
|
48
|
-
<
|
|
50
|
+
<label className="wb-formLabel" htmlFor={htmlFor}>
|
|
51
|
+
{label}
|
|
52
|
+
</label>
|
|
49
53
|
<span className="wb-formControl">{children}</span>
|
|
50
54
|
{problem === undefined ? (
|
|
51
55
|
hint === undefined ? null : (
|
|
@@ -54,6 +58,6 @@ export function FormRow({ label, hint, problem, layout = 'inline', children }: F
|
|
|
54
58
|
) : (
|
|
55
59
|
<span className="wb-formProblem">{problem}</span>
|
|
56
60
|
)}
|
|
57
|
-
</
|
|
61
|
+
</div>
|
|
58
62
|
);
|
|
59
63
|
}
|
package/src/config/constants.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/** 外壳插件的包名:浏览器模块表与宿主按它注册、认领这枚插件。 */
|
|
2
2
|
export const PLUGIN_ID = "@dsh-workbench/core";
|
|
3
3
|
|
|
4
|
-
/** 与外壳同批发布的兄弟包名:`release.ts` 用它判一版三包是否都已在源上。 */
|
|
5
|
-
export const RELEASE_SIBLINGS = [
|
|
6
|
-
"@dsh-workbench/shared",
|
|
7
|
-
"@dsh-workbench/module-tools",
|
|
8
|
-
] as const;
|
|
9
|
-
|
|
10
4
|
/** 外壳宿主 HTTP API 的根前缀;prefs / actions / provision 等路由都挂在它下面。 */
|
|
11
5
|
export const API_PREFIX = "/workbench/api";
|
|
12
6
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface CommandFile {
|
|
2
|
+
readonly content: string;
|
|
3
|
+
readonly suffix?: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface CommandRequest {
|
|
7
|
+
readonly argv: readonly string[];
|
|
8
|
+
readonly timeoutMs?: number | undefined;
|
|
9
|
+
readonly cwd?: string | undefined;
|
|
10
|
+
readonly files?: readonly CommandFile[] | undefined;
|
|
11
|
+
readonly appendFileArgs?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface CommandResult {
|
|
15
|
+
readonly stdout: string;
|
|
16
|
+
readonly stderr: string;
|
|
17
|
+
readonly exitCode: number;
|
|
18
|
+
readonly timedOut: boolean;
|
|
19
|
+
readonly filePaths: readonly string[];
|
|
20
|
+
readonly error?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface CommandReader {
|
|
24
|
+
run(request: CommandRequest): Promise<CommandResult>;
|
|
25
|
+
}
|
package/src/contract/data.ts
CHANGED
|
@@ -19,7 +19,8 @@ export interface BrowserDataRequest extends DataRequestBase {
|
|
|
19
19
|
|
|
20
20
|
export interface CommandDataRequest extends DataRequestBase {
|
|
21
21
|
readonly kind: 'command';
|
|
22
|
-
readonly
|
|
22
|
+
readonly adapter: string;
|
|
23
|
+
readonly argv: readonly string[];
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export type DataRequest = HttpDataRequest | BrowserDataRequest | CommandDataRequest;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ExtensionSession = 'persistent' | 'ephemeral' | 'none';
|
|
2
|
+
|
|
3
|
+
export interface ExtensionCallOptions {
|
|
4
|
+
readonly key?: string;
|
|
5
|
+
readonly workdir?: string;
|
|
6
|
+
readonly session?: ExtensionSession;
|
|
7
|
+
readonly timeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ExtensionValue<T = unknown> {
|
|
11
|
+
readonly value: T;
|
|
12
|
+
readonly at: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ExtensionCaller {
|
|
16
|
+
json(
|
|
17
|
+
args: readonly string[],
|
|
18
|
+
options?: ExtensionCallOptions,
|
|
19
|
+
): Promise<ExtensionValue>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type OriginRead =
|
|
2
|
+
| { readonly kind: 'ok'; readonly remote: string }
|
|
3
|
+
| { readonly kind: 'no-origin'; readonly detail?: string }
|
|
4
|
+
| { readonly kind: 'unknown'; readonly reason: string; readonly detail?: string };
|
|
5
|
+
|
|
6
|
+
export type BranchRead =
|
|
7
|
+
| { readonly kind: 'ok'; readonly branch: string }
|
|
8
|
+
| { readonly kind: 'no-branch'; readonly detail?: string | undefined }
|
|
9
|
+
| { readonly kind: 'unknown'; readonly reason: string; readonly detail?: string | undefined };
|
|
10
|
+
|
|
11
|
+
export type HeadRead =
|
|
12
|
+
| { readonly kind: 'ok'; readonly commit: string }
|
|
13
|
+
| { readonly kind: 'no-head'; readonly detail?: string }
|
|
14
|
+
| { readonly kind: 'unknown'; readonly reason: string; readonly detail?: string };
|
|
15
|
+
|
|
16
|
+
export interface GitReader {
|
|
17
|
+
origin(path: string): Promise<OriginRead>;
|
|
18
|
+
branch(path: string): Promise<BranchRead>;
|
|
19
|
+
head(path: string): Promise<HeadRead>;
|
|
20
|
+
}
|
package/src/host/adapter-set.ts
CHANGED
|
@@ -265,6 +265,7 @@ export function withDefaultAdapterSet(defaults: AdapterSet, loaded: AdapterSetLo
|
|
|
265
265
|
id: set.id ?? defaults.id,
|
|
266
266
|
version: set.version ?? defaults.version,
|
|
267
267
|
data: set.data ?? defaults.data,
|
|
268
|
+
libs: set.libs ?? defaults.libs,
|
|
268
269
|
supply: set.supply ?? defaults.supply,
|
|
269
270
|
modules: set.modules ?? defaults.modules,
|
|
270
271
|
profile: set.profile ?? defaults.profile,
|
package/src/host/adapters.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { DshHostContext } from '../api/dsh.js';
|
|
2
2
|
import type { DataReader } from '../contract/data.js';
|
|
3
|
+
import type { LibReader } from '../contract/lib.js';
|
|
4
|
+
import type { GitReader } from '../contract/git.js';
|
|
5
|
+
import type { CommandReader } from '../contract/command.js';
|
|
3
6
|
import type {
|
|
4
7
|
EnvSupplyPort,
|
|
5
8
|
HostActions,
|
|
@@ -21,6 +24,9 @@ export interface AdapterSet {
|
|
|
21
24
|
readonly id: string;
|
|
22
25
|
readonly version: string;
|
|
23
26
|
readonly data: DataReader;
|
|
27
|
+
readonly libs?: LibReader | undefined;
|
|
28
|
+
readonly git?: GitReader | undefined;
|
|
29
|
+
readonly commands?: CommandReader | undefined;
|
|
24
30
|
readonly supply: EnvSupplyPort;
|
|
25
31
|
readonly modules: ModulePort;
|
|
26
32
|
readonly profile: ProfilePort;
|