@foxian/esl 0.1.0

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.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/dist/api-error.d.ts +13 -0
  3. package/dist/api-error.js +31 -0
  4. package/dist/bin/esl.d.ts +35 -0
  5. package/dist/bin/esl.js +1033 -0
  6. package/dist/builtin/builtin-packages.json +11 -0
  7. package/dist/builtin/esl-operator/SKILL.md +65 -0
  8. package/dist/builtin/esl-operator/references/agent-interaction.md +110 -0
  9. package/dist/builtin/esl-operator/references/author.md +98 -0
  10. package/dist/builtin/esl-operator/references/consumer.md +109 -0
  11. package/dist/builtin/esl-operator/references/setup.md +41 -0
  12. package/dist/builtin/esl-operator/skill.json +7 -0
  13. package/dist/builtin-dir.d.ts +1 -0
  14. package/dist/builtin-dir.js +11 -0
  15. package/dist/commands/adapt.d.ts +8 -0
  16. package/dist/commands/adapt.js +27 -0
  17. package/dist/commands/admin.d.ts +11 -0
  18. package/dist/commands/admin.js +96 -0
  19. package/dist/commands/clone.d.ts +10 -0
  20. package/dist/commands/clone.js +21 -0
  21. package/dist/commands/config.d.ts +8 -0
  22. package/dist/commands/config.js +19 -0
  23. package/dist/commands/delete.d.ts +13 -0
  24. package/dist/commands/delete.js +51 -0
  25. package/dist/commands/deprecate.d.ts +16 -0
  26. package/dist/commands/deprecate.js +29 -0
  27. package/dist/commands/import.d.ts +14 -0
  28. package/dist/commands/import.js +21 -0
  29. package/dist/commands/info.d.ts +28 -0
  30. package/dist/commands/info.js +69 -0
  31. package/dist/commands/init.d.ts +28 -0
  32. package/dist/commands/init.js +252 -0
  33. package/dist/commands/install.d.ts +17 -0
  34. package/dist/commands/install.js +435 -0
  35. package/dist/commands/link.d.ts +11 -0
  36. package/dist/commands/link.js +170 -0
  37. package/dist/commands/list.d.ts +6 -0
  38. package/dist/commands/list.js +7 -0
  39. package/dist/commands/login.d.ts +20 -0
  40. package/dist/commands/login.js +132 -0
  41. package/dist/commands/logout.d.ts +6 -0
  42. package/dist/commands/logout.js +18 -0
  43. package/dist/commands/network-options.d.ts +27 -0
  44. package/dist/commands/network-options.js +133 -0
  45. package/dist/commands/notes.d.ts +10 -0
  46. package/dist/commands/notes.js +24 -0
  47. package/dist/commands/publish.d.ts +19 -0
  48. package/dist/commands/publish.js +271 -0
  49. package/dist/commands/release-delete.d.ts +21 -0
  50. package/dist/commands/release-delete.js +34 -0
  51. package/dist/commands/release-manifest.d.ts +5 -0
  52. package/dist/commands/release-manifest.js +23 -0
  53. package/dist/commands/rename.d.ts +5 -0
  54. package/dist/commands/rename.js +25 -0
  55. package/dist/commands/repair-tag.d.ts +5 -0
  56. package/dist/commands/repair-tag.js +14 -0
  57. package/dist/commands/reset-source.d.ts +16 -0
  58. package/dist/commands/reset-source.js +71 -0
  59. package/dist/commands/resolve-unlink-identity.d.ts +14 -0
  60. package/dist/commands/resolve-unlink-identity.js +47 -0
  61. package/dist/commands/search.d.ts +19 -0
  62. package/dist/commands/search.js +33 -0
  63. package/dist/commands/share.d.ts +17 -0
  64. package/dist/commands/share.js +56 -0
  65. package/dist/commands/source.d.ts +10 -0
  66. package/dist/commands/source.js +34 -0
  67. package/dist/commands/status.d.ts +16 -0
  68. package/dist/commands/status.js +77 -0
  69. package/dist/commands/sync-builtin.d.ts +10 -0
  70. package/dist/commands/sync-builtin.js +68 -0
  71. package/dist/commands/tools.d.ts +19 -0
  72. package/dist/commands/tools.js +73 -0
  73. package/dist/commands/uninstall.d.ts +19 -0
  74. package/dist/commands/uninstall.js +75 -0
  75. package/dist/commands/unlink.d.ts +14 -0
  76. package/dist/commands/unlink.js +108 -0
  77. package/dist/commands/update.d.ts +18 -0
  78. package/dist/commands/update.js +176 -0
  79. package/dist/commands/upload.d.ts +27 -0
  80. package/dist/commands/upload.js +446 -0
  81. package/dist/commands/use.d.ts +9 -0
  82. package/dist/commands/use.js +51 -0
  83. package/dist/commands/validate.d.ts +4 -0
  84. package/dist/commands/validate.js +8 -0
  85. package/dist/commands/version.d.ts +16 -0
  86. package/dist/commands/version.js +147 -0
  87. package/dist/commands/whoami.d.ts +14 -0
  88. package/dist/commands/whoami.js +54 -0
  89. package/dist/index.d.ts +24 -0
  90. package/dist/index.js +24 -0
  91. package/dist/output.d.ts +1 -0
  92. package/dist/output.js +3 -0
  93. package/dist/postinstall.d.ts +1 -0
  94. package/dist/postinstall.js +8 -0
  95. package/dist/prompt.d.ts +9 -0
  96. package/dist/prompt.js +24 -0
  97. package/dist/vendor/core/adapt/adapt-engine.d.ts +24 -0
  98. package/dist/vendor/core/adapt/adapt-engine.js +99 -0
  99. package/dist/vendor/core/adapt/adapted-skill-copy.d.ts +2 -0
  100. package/dist/vendor/core/adapt/adapted-skill-copy.js +17 -0
  101. package/dist/vendor/core/adapt/claude-adapter.d.ts +8 -0
  102. package/dist/vendor/core/adapt/claude-adapter.js +19 -0
  103. package/dist/vendor/core/adapt/codex-adapter.d.ts +8 -0
  104. package/dist/vendor/core/adapt/codex-adapter.js +19 -0
  105. package/dist/vendor/core/adapt/index.d.ts +2 -0
  106. package/dist/vendor/core/adapt/index.js +2 -0
  107. package/dist/vendor/core/adapt/tool-adapter.d.ts +12 -0
  108. package/dist/vendor/core/adapt/tool-adapter.js +1 -0
  109. package/dist/vendor/core/adapt/trae-adapter.d.ts +8 -0
  110. package/dist/vendor/core/adapt/trae-adapter.js +19 -0
  111. package/dist/vendor/core/adapt/trae-cn-adapter.d.ts +8 -0
  112. package/dist/vendor/core/adapt/trae-cn-adapter.js +19 -0
  113. package/dist/vendor/core/agent-interaction.d.ts +58 -0
  114. package/dist/vendor/core/agent-interaction.js +58 -0
  115. package/dist/vendor/core/command-params.d.ts +5 -0
  116. package/dist/vendor/core/command-params.js +46 -0
  117. package/dist/vendor/core/index.d.ts +22 -0
  118. package/dist/vendor/core/index.js +22 -0
  119. package/dist/vendor/core/link/skill-links.d.ts +38 -0
  120. package/dist/vendor/core/link/skill-links.js +245 -0
  121. package/dist/vendor/core/link/tool-links.d.ts +83 -0
  122. package/dist/vendor/core/link/tool-links.js +376 -0
  123. package/dist/vendor/core/org/account-policy.d.ts +8 -0
  124. package/dist/vendor/core/org/account-policy.js +57 -0
  125. package/dist/vendor/core/org/org-name.d.ts +2 -0
  126. package/dist/vendor/core/org/org-name.js +22 -0
  127. package/dist/vendor/core/org/standing-teams.d.ts +10 -0
  128. package/dist/vendor/core/org/standing-teams.js +27 -0
  129. package/dist/vendor/core/schema/compatibility.d.ts +17 -0
  130. package/dist/vendor/core/schema/compatibility.js +45 -0
  131. package/dist/vendor/core/schema/release-manifest.d.ts +88 -0
  132. package/dist/vendor/core/schema/release-manifest.js +161 -0
  133. package/dist/vendor/core/schema/skill-json.d.ts +61 -0
  134. package/dist/vendor/core/schema/skill-json.js +47 -0
  135. package/dist/vendor/core/schema/validation-result.d.ts +7 -0
  136. package/dist/vendor/core/schema/validation-result.js +1 -0
  137. package/dist/vendor/core/skill/builtin-package.d.ts +32 -0
  138. package/dist/vendor/core/skill/builtin-package.js +143 -0
  139. package/dist/vendor/core/skill/directory-validator.d.ts +9 -0
  140. package/dist/vendor/core/skill/directory-validator.js +72 -0
  141. package/dist/vendor/core/skill/import-skill.d.ts +10 -0
  142. package/dist/vendor/core/skill/import-skill.js +68 -0
  143. package/dist/vendor/core/skill/published-package.d.ts +1 -0
  144. package/dist/vendor/core/skill/published-package.js +9 -0
  145. package/dist/vendor/core/skill/skill-md.d.ts +15 -0
  146. package/dist/vendor/core/skill/skill-md.js +32 -0
  147. package/dist/vendor/core/store/file-copy.d.ts +3 -0
  148. package/dist/vendor/core/store/file-copy.js +102 -0
  149. package/dist/vendor/core/store/local-store.d.ts +43 -0
  150. package/dist/vendor/core/store/local-store.js +104 -0
  151. package/dist/vendor/core/store/skill-store.d.ts +24 -0
  152. package/dist/vendor/core/store/skill-store.js +41 -0
  153. package/dist/vendor/core/store/skills-json.d.ts +34 -0
  154. package/dist/vendor/core/store/skills-json.js +146 -0
  155. package/dist/vendor/core/version/select-version.d.ts +16 -0
  156. package/dist/vendor/core/version/select-version.js +34 -0
  157. package/dist/vendor/core/version/version.d.ts +2 -0
  158. package/dist/vendor/core/version/version.js +25 -0
  159. package/dist/vendor/i18n/api-errors.d.ts +121 -0
  160. package/dist/vendor/i18n/api-errors.js +240 -0
  161. package/dist/vendor/i18n/i18n-runtime.d.ts +4 -0
  162. package/dist/vendor/i18n/i18n-runtime.js +16 -0
  163. package/dist/vendor/i18n/index.d.ts +5 -0
  164. package/dist/vendor/i18n/index.js +5 -0
  165. package/dist/vendor/i18n/locales.d.ts +9 -0
  166. package/dist/vendor/i18n/locales.js +33 -0
  167. package/dist/vendor/i18n/resources.d.ts +11 -0
  168. package/dist/vendor/i18n/resources.js +925 -0
  169. package/dist/vendor/i18n/translate-api-error.d.ts +8 -0
  170. package/dist/vendor/i18n/translate-api-error.js +12 -0
  171. package/dist/version.d.ts +1 -0
  172. package/dist/version.js +24 -0
  173. package/package.json +46 -0
@@ -0,0 +1,121 @@
1
+ export declare const apiErrorMessages: {
2
+ readonly unauthorizedMissingToken: "Unauthorized: missing token";
3
+ readonly administratorAccountLoginRequiredToChangeItsPassword: "Administrator account login required to change its password";
4
+ readonly usernameAndPasswordAreRequired: "Username and password are required";
5
+ readonly emailIsRequired: "Skill User Email is required";
6
+ readonly emailAlreadyTaken: "Skill User Email is already taken: {email}";
7
+ readonly emailHasPendingRegistration: "Skill User Email has a pending registration: {email}";
8
+ readonly currentPasswordAndEmailAreRequired: "Current password and Skill User Email are required";
9
+ readonly userStatusMustBeEnabledOrDisabled: "User status must be enabled or disabled";
10
+ readonly adminprovisionedpasswordchangepolicyMustBeForceOrAllow: "adminProvisionedPasswordChangePolicy must be force or allow";
11
+ readonly forbiddenSuperAdministratorAccountCannotBeManaged: "Forbidden: the Super Administrator account cannot be managed as a Skill User";
12
+ readonly pendingRegistrationMustBeProcessedFromUserRegistrationApproval: "Pending user registration must be processed from User Registration approval";
13
+ readonly platformAdministratorsSignInFromTheAdminConsole: "Platform administrators sign in from the Admin Console";
14
+ readonly currentAndNewPasswordsAreRequired: "Current and new passwords are required";
15
+ readonly unauthorizedCurrentPasswordIsIncorrect: "Unauthorized: current password is incorrect";
16
+ readonly unauthorizedInvalidToken: "Unauthorized: invalid token";
17
+ readonly unauthorizedInvalidCredentials: "Unauthorized: invalid credentials";
18
+ readonly organizationApplicationNotFound: "Organization application not found";
19
+ readonly organizationApplicationHasAlreadyBeenProcessed: "Organization application has already been processed";
20
+ readonly organizationNameIsAlreadyTaken: "Organization name is already taken";
21
+ readonly onlyPendingApplicationsCanBeCancelled: "Only pending applications can be cancelled";
22
+ readonly orgregistrationmodeMustBeAutoOrManual: "orgRegistrationMode must be auto or manual";
23
+ readonly registrationmodeMustBeOpenOrApproval: "registrationMode must be open or approval";
24
+ readonly memberaddmodeMustBeDirectOrInvite: "memberAddMode must be direct or invite";
25
+ readonly emailVerificationMustBeOffOrOn: "emailVerification must be off or on";
26
+ readonly outboundEmailIsNotConfigured: "Outbound email is not configured";
27
+ readonly outboundEmailDeliveryFailed: "Outbound email delivery failed; check SMTP settings";
28
+ readonly emailVerificationLinkIsInvalidOrExpired: "Email verification link is invalid or expired";
29
+ readonly emailVerificationRequiredBeforeLogin: "Email verification is required before login";
30
+ readonly passwordResetLinkIsInvalidOrExpired: "Password reset link is invalid or expired";
31
+ readonly passwordResetEmailIsNotAvailable: "Password reset is unavailable; contact the Super Administrator";
32
+ readonly passwordResetRequestReceived: "If the account is eligible, a password reset email has been sent";
33
+ readonly newPasswordIsRequired: "New password is required";
34
+ readonly emailVerificationPending: "Email verification is pending";
35
+ readonly registrationNotFound: "Registration not found";
36
+ readonly registrationHasAlreadyBeenProcessed: "Registration has already been processed";
37
+ readonly deletionRequiresConfirmMatchingTheOrganizationName: "Deletion requires confirm matching the organization name";
38
+ readonly organizationNotFoundOrNotManagedByEsl: "Organization not found or not managed by ESL";
39
+ readonly organizationNotFound: "Organization not found";
40
+ readonly identityMustBeOrdinaryManagingOrOwner: "Identity must be ordinary, managing, or owner";
41
+ readonly forbiddenSuperAdministratorTokenRequired: "Forbidden: super administrator token required";
42
+ readonly forbiddenManagingMembersCanOnlyRemoveThemselves: "Forbidden: managing members can only remove themselves";
43
+ readonly invitationNotFound: "Invitation not found";
44
+ readonly invitationHasAlreadyBeenProcessed: "Invitation has already been processed";
45
+ readonly teamNameMustUseLowercaseLettersDigitsAndHyphens: "Team name must use lowercase letters, digits, and hyphens";
46
+ readonly teamNameIsReservedForStandingTeams: "Team name is reserved for standing teams";
47
+ readonly customTeamsDoNotHaveAFixedPermission: "Custom teams do not have a fixed permission";
48
+ readonly teamDisplayNameMustBeAtMost64Characters: "Team display name must be at most 64 characters";
49
+ readonly teamDoesNotBelongToYourOrganization: "Team does not belong to your organization";
50
+ readonly standingTeamsCannotBeDeleted: "Standing teams cannot be deleted";
51
+ readonly standingTeamsCannotBeEdited: "Standing teams cannot be edited";
52
+ readonly standingTeamsCannotBeUsedHere: "Standing teams cannot be used here";
53
+ readonly forbiddenOrganizationManagementTeamMembershipRequired: "Forbidden: organization management team membership required";
54
+ readonly organizationNameCollidesWithAnExistingUser: "Organization name collides with an existing user";
55
+ readonly anApplicationForThisOrganizationNameIsAlreadyPending: "An application for this organization name is already pending";
56
+ readonly organizationNameIsReserved: "Organization name is reserved";
57
+ readonly anApplicationForThisOrganizationAlreadyExists: "An application for this organization already exists";
58
+ readonly onlyTheApplicantMayQueryThisApplication: "Only the applicant may query this application";
59
+ readonly skillNameMustUseLowercaseLettersDigitsAndHyphens: "Skill name must use lowercase letters, digits, and hyphens";
60
+ readonly skillDescriptionIsRequired: "Skill description is required";
61
+ readonly skillDisplayNameTooLong: "Skill display name must be at most 128 characters";
62
+ readonly skillAlreadyExistsUseSourceAndGitPushToUpdateIt: "Skill already exists; use source and Git push to update it";
63
+ readonly skillNotFound: "Skill not found";
64
+ readonly forbiddenManagePermissionRequired: "Forbidden: manage permission required";
65
+ readonly visibilityMustBePublicOrPrivate: "Visibility must be public or private";
66
+ readonly forbiddenNoAccessToThisPrivateSkillRequestAccessFromItsMaintainers: "Forbidden: no access to this private skill; request access from its maintainers";
67
+ readonly teamNotFoundInOrganization: "Team not found in organization";
68
+ readonly teamIsNotALogicalCustomTeam: "Team is not a logical custom team";
69
+ readonly teamPermissionMustBeReadWriteOrManage: "Team permission must be read, write, or manage";
70
+ readonly usernameAndAReadWriteOrManagePermissionAreRequired: "Username and a read, write, or manage permission are required";
71
+ readonly usernameIsRequired: "Username is required";
72
+ readonly unknownPermissionAction: "Unknown permission action";
73
+ readonly logicalTeamProjectionIsIncomplete: "Logical team projection is incomplete";
74
+ readonly skillNameAlreadyExists: "Skill name already exists";
75
+ readonly archivedSkillsCannotCreateReleases: "Archived skills cannot create releases";
76
+ readonly releaseVersionMustBeValidSemver: "Release version must be valid SemVer";
77
+ readonly sourcecommitIsRequired: "sourceCommit is required";
78
+ readonly releaseJsonIsNotValidJson: "release.json is not valid JSON";
79
+ readonly skillHasNoSkillId: "Skill has no Skill ID";
80
+ readonly skillReleaseNotFound: "Skill Release not found";
81
+ readonly releaseTagRepairIsNotSupportedByTheGitBackend: "Release Tag repair is not supported by the Git backend";
82
+ readonly invalidPublishedSkillPackagePath: "Invalid Published Skill Package path";
83
+ readonly publishedSkillPackageNotFound: "Published Skill Package not found";
84
+ readonly releaseNotesMessageIsRequired: "Release notes message is required";
85
+ readonly deletionRequiresConfirmMatchingTheReleaseVersion: "Deletion requires confirm matching the release version";
86
+ readonly archivedSkillsDoNotAcceptReleaseChanges: "Archived skills do not accept release changes";
87
+ readonly deprecationMessageMustBeAString: "Deprecation message must be a string";
88
+ readonly forbiddenRestorePermissionRequired: "Forbidden: restore permission required";
89
+ readonly onlyArchivedSkillsCanBeRestored: "Only archived skills can be restored";
90
+ readonly forbiddenDeletePermissionRequired: "Forbidden: delete permission required";
91
+ readonly skillMustBeArchivedBeforeDeletion: "Skill must be archived before deletion";
92
+ readonly deletionRequiresANonEmptyReason: "Deletion requires a non-empty reason";
93
+ readonly deletionRequiresConfirmMatchingTheSkillIdentity: "Deletion requires confirm matching the skill identity";
94
+ readonly notMemberOfOrganization: "You are not a member of organization {org}";
95
+ readonly defaultTeamNotFound: "Default team {teamName} not found in organization";
96
+ readonly skillReleaseAlreadyExists: "Skill Release {version} already exists";
97
+ readonly organizationInitializationFailed: "Organization initialization failed: {detail}";
98
+ readonly organizationDeletionFailed: "Organization deletion failed: {detail}";
99
+ readonly userIsNotMemberOf: "User is not a member of {org}";
100
+ readonly userDoesNotExist: "User does not exist: {username}";
101
+ readonly usernameAlreadyTaken: "Username is already taken: {username}";
102
+ readonly usernameHasPendingRegistration: "Username has a pending registration: {username}";
103
+ readonly usernameClaimedByPendingOrganizationApplication: "Username is claimed by a pending organization application: {username}";
104
+ readonly unsupportedLocale: "Unsupported locale: {locale}";
105
+ readonly userIsAlreadyMemberOf: "User is already a member of {org}";
106
+ readonly organizationIsNotActive: "Organization is not active: {org}";
107
+ readonly identityNotATeamGrant: "This team carries an organization identity, not a skill grant; change the member identity instead";
108
+ readonly organizationNotActiveForUpload: "Organization {org} is not active; it must be provisioned before uploading skills";
109
+ readonly skillRenameFailed: "Skill rename failed; rollback attempted: {detail}";
110
+ readonly skillRenamed: "Skill renamed";
111
+ readonly releaseManifestNameMismatch: "Release manifest name \"{manifestName}\" does not match the established identity {skillName}; ownership changes are not allowed via publish";
112
+ readonly releaseTagPointsElsewhere: "Release Tag {tag} points to {target}, expected {expected}";
113
+ readonly releaseRequiredByDependents: "Release {version} is required by {dependents}; deleting it would break their installs. Pass force to override.";
114
+ readonly forbiddenForcingPastAPinnedDependencyRequiresAPlatformAdministrator: "Forbidden: forcing past a pinned dependency requires a platform administrator";
115
+ readonly organizationRegistrationRequiresApprovalOnThisPlatformSubmitAnApplicationInstead: "Organization registration requires approval on this platform; submit an application instead";
116
+ readonly organizationsAreCreatedInstantlyOnThisPlatformCreateOneDirectlyInstead: "Organizations are created instantly on this platform; create one directly instead";
117
+ readonly validationFailed: "Validation failed: {detail}";
118
+ readonly internalError: "Internal error: {detail}";
119
+ };
120
+ export type ApiErrorCode = keyof typeof apiErrorMessages;
121
+ export declare const apiErrorMessagesZhCN: Record<ApiErrorCode, string>;
@@ -0,0 +1,240 @@
1
+ // API 错误码注册表(ADR-0044):message 是固定英文兜底文案,客户端按 code 翻译。
2
+ // 静态部分由脚本从服务端错误响应生成;动态错误码显式登记。
3
+ export const apiErrorMessages = {
4
+ unauthorizedMissingToken: 'Unauthorized: missing token',
5
+ administratorAccountLoginRequiredToChangeItsPassword: 'Administrator account login required to change its password',
6
+ usernameAndPasswordAreRequired: 'Username and password are required',
7
+ emailIsRequired: 'Skill User Email is required',
8
+ emailAlreadyTaken: 'Skill User Email is already taken: {email}',
9
+ emailHasPendingRegistration: 'Skill User Email has a pending registration: {email}',
10
+ currentPasswordAndEmailAreRequired: 'Current password and Skill User Email are required',
11
+ userStatusMustBeEnabledOrDisabled: 'User status must be enabled or disabled',
12
+ adminprovisionedpasswordchangepolicyMustBeForceOrAllow: 'adminProvisionedPasswordChangePolicy must be force or allow',
13
+ forbiddenSuperAdministratorAccountCannotBeManaged: 'Forbidden: the Super Administrator account cannot be managed as a Skill User',
14
+ pendingRegistrationMustBeProcessedFromUserRegistrationApproval: 'Pending user registration must be processed from User Registration approval',
15
+ platformAdministratorsSignInFromTheAdminConsole: 'Platform administrators sign in from the Admin Console',
16
+ currentAndNewPasswordsAreRequired: 'Current and new passwords are required',
17
+ unauthorizedCurrentPasswordIsIncorrect: 'Unauthorized: current password is incorrect',
18
+ unauthorizedInvalidToken: 'Unauthorized: invalid token',
19
+ unauthorizedInvalidCredentials: 'Unauthorized: invalid credentials',
20
+ organizationApplicationNotFound: 'Organization application not found',
21
+ organizationApplicationHasAlreadyBeenProcessed: 'Organization application has already been processed',
22
+ organizationNameIsAlreadyTaken: 'Organization name is already taken',
23
+ onlyPendingApplicationsCanBeCancelled: 'Only pending applications can be cancelled',
24
+ orgregistrationmodeMustBeAutoOrManual: 'orgRegistrationMode must be auto or manual',
25
+ registrationmodeMustBeOpenOrApproval: 'registrationMode must be open or approval',
26
+ memberaddmodeMustBeDirectOrInvite: 'memberAddMode must be direct or invite',
27
+ emailVerificationMustBeOffOrOn: 'emailVerification must be off or on',
28
+ outboundEmailIsNotConfigured: 'Outbound email is not configured',
29
+ outboundEmailDeliveryFailed: 'Outbound email delivery failed; check SMTP settings',
30
+ emailVerificationLinkIsInvalidOrExpired: 'Email verification link is invalid or expired',
31
+ emailVerificationRequiredBeforeLogin: 'Email verification is required before login',
32
+ passwordResetLinkIsInvalidOrExpired: 'Password reset link is invalid or expired',
33
+ passwordResetEmailIsNotAvailable: 'Password reset is unavailable; contact the Super Administrator',
34
+ passwordResetRequestReceived: 'If the account is eligible, a password reset email has been sent',
35
+ newPasswordIsRequired: 'New password is required',
36
+ emailVerificationPending: 'Email verification is pending',
37
+ registrationNotFound: 'Registration not found',
38
+ registrationHasAlreadyBeenProcessed: 'Registration has already been processed',
39
+ deletionRequiresConfirmMatchingTheOrganizationName: 'Deletion requires confirm matching the organization name',
40
+ organizationNotFoundOrNotManagedByEsl: 'Organization not found or not managed by ESL',
41
+ organizationNotFound: 'Organization not found',
42
+ identityMustBeOrdinaryManagingOrOwner: 'Identity must be ordinary, managing, or owner',
43
+ forbiddenSuperAdministratorTokenRequired: 'Forbidden: super administrator token required',
44
+ forbiddenManagingMembersCanOnlyRemoveThemselves: 'Forbidden: managing members can only remove themselves',
45
+ invitationNotFound: 'Invitation not found',
46
+ invitationHasAlreadyBeenProcessed: 'Invitation has already been processed',
47
+ teamNameMustUseLowercaseLettersDigitsAndHyphens: 'Team name must use lowercase letters, digits, and hyphens',
48
+ teamNameIsReservedForStandingTeams: 'Team name is reserved for standing teams',
49
+ customTeamsDoNotHaveAFixedPermission: 'Custom teams do not have a fixed permission',
50
+ teamDisplayNameMustBeAtMost64Characters: 'Team display name must be at most 64 characters',
51
+ teamDoesNotBelongToYourOrganization: 'Team does not belong to your organization',
52
+ standingTeamsCannotBeDeleted: 'Standing teams cannot be deleted',
53
+ standingTeamsCannotBeEdited: 'Standing teams cannot be edited',
54
+ standingTeamsCannotBeUsedHere: 'Standing teams cannot be used here',
55
+ forbiddenOrganizationManagementTeamMembershipRequired: 'Forbidden: organization management team membership required',
56
+ organizationNameCollidesWithAnExistingUser: 'Organization name collides with an existing user',
57
+ anApplicationForThisOrganizationNameIsAlreadyPending: 'An application for this organization name is already pending',
58
+ organizationNameIsReserved: 'Organization name is reserved',
59
+ anApplicationForThisOrganizationAlreadyExists: 'An application for this organization already exists',
60
+ onlyTheApplicantMayQueryThisApplication: 'Only the applicant may query this application',
61
+ skillNameMustUseLowercaseLettersDigitsAndHyphens: 'Skill name must use lowercase letters, digits, and hyphens',
62
+ skillDescriptionIsRequired: 'Skill description is required',
63
+ skillDisplayNameTooLong: 'Skill display name must be at most 128 characters',
64
+ skillAlreadyExistsUseSourceAndGitPushToUpdateIt: 'Skill already exists; use source and Git push to update it',
65
+ skillNotFound: 'Skill not found',
66
+ forbiddenManagePermissionRequired: 'Forbidden: manage permission required',
67
+ visibilityMustBePublicOrPrivate: 'Visibility must be public or private',
68
+ forbiddenNoAccessToThisPrivateSkillRequestAccessFromItsMaintainers: 'Forbidden: no access to this private skill; request access from its maintainers',
69
+ teamNotFoundInOrganization: 'Team not found in organization',
70
+ teamIsNotALogicalCustomTeam: 'Team is not a logical custom team',
71
+ teamPermissionMustBeReadWriteOrManage: 'Team permission must be read, write, or manage',
72
+ usernameAndAReadWriteOrManagePermissionAreRequired: 'Username and a read, write, or manage permission are required',
73
+ usernameIsRequired: 'Username is required',
74
+ unknownPermissionAction: 'Unknown permission action',
75
+ logicalTeamProjectionIsIncomplete: 'Logical team projection is incomplete',
76
+ skillNameAlreadyExists: 'Skill name already exists',
77
+ archivedSkillsCannotCreateReleases: 'Archived skills cannot create releases',
78
+ releaseVersionMustBeValidSemver: 'Release version must be valid SemVer',
79
+ sourcecommitIsRequired: 'sourceCommit is required',
80
+ releaseJsonIsNotValidJson: 'release.json is not valid JSON',
81
+ skillHasNoSkillId: 'Skill has no Skill ID',
82
+ skillReleaseNotFound: 'Skill Release not found',
83
+ releaseTagRepairIsNotSupportedByTheGitBackend: 'Release Tag repair is not supported by the Git backend',
84
+ invalidPublishedSkillPackagePath: 'Invalid Published Skill Package path',
85
+ publishedSkillPackageNotFound: 'Published Skill Package not found',
86
+ releaseNotesMessageIsRequired: 'Release notes message is required',
87
+ deletionRequiresConfirmMatchingTheReleaseVersion: 'Deletion requires confirm matching the release version',
88
+ archivedSkillsDoNotAcceptReleaseChanges: 'Archived skills do not accept release changes',
89
+ deprecationMessageMustBeAString: 'Deprecation message must be a string',
90
+ forbiddenRestorePermissionRequired: 'Forbidden: restore permission required',
91
+ onlyArchivedSkillsCanBeRestored: 'Only archived skills can be restored',
92
+ forbiddenDeletePermissionRequired: 'Forbidden: delete permission required',
93
+ skillMustBeArchivedBeforeDeletion: 'Skill must be archived before deletion',
94
+ deletionRequiresANonEmptyReason: 'Deletion requires a non-empty reason',
95
+ deletionRequiresConfirmMatchingTheSkillIdentity: 'Deletion requires confirm matching the skill identity',
96
+ notMemberOfOrganization: 'You are not a member of organization {org}',
97
+ defaultTeamNotFound: 'Default team {teamName} not found in organization',
98
+ skillReleaseAlreadyExists: 'Skill Release {version} already exists',
99
+ organizationInitializationFailed: 'Organization initialization failed: {detail}',
100
+ organizationDeletionFailed: 'Organization deletion failed: {detail}',
101
+ userIsNotMemberOf: 'User is not a member of {org}',
102
+ userDoesNotExist: 'User does not exist: {username}',
103
+ usernameAlreadyTaken: 'Username is already taken: {username}',
104
+ usernameHasPendingRegistration: 'Username has a pending registration: {username}',
105
+ usernameClaimedByPendingOrganizationApplication: 'Username is claimed by a pending organization application: {username}',
106
+ unsupportedLocale: 'Unsupported locale: {locale}',
107
+ userIsAlreadyMemberOf: 'User is already a member of {org}',
108
+ organizationIsNotActive: 'Organization is not active: {org}',
109
+ identityNotATeamGrant: 'This team carries an organization identity, not a skill grant; change the member identity instead',
110
+ organizationNotActiveForUpload: 'Organization {org} is not active; it must be provisioned before uploading skills',
111
+ skillRenameFailed: 'Skill rename failed; rollback attempted: {detail}',
112
+ skillRenamed: 'Skill renamed',
113
+ releaseManifestNameMismatch: 'Release manifest name "{manifestName}" does not match the established identity {skillName}; ownership changes are not allowed via publish',
114
+ releaseTagPointsElsewhere: 'Release Tag {tag} points to {target}, expected {expected}',
115
+ releaseRequiredByDependents: 'Release {version} is required by {dependents}; deleting it would break their installs. Pass force to override.',
116
+ forbiddenForcingPastAPinnedDependencyRequiresAPlatformAdministrator: 'Forbidden: forcing past a pinned dependency requires a platform administrator',
117
+ organizationRegistrationRequiresApprovalOnThisPlatformSubmitAnApplicationInstead: 'Organization registration requires approval on this platform; submit an application instead',
118
+ organizationsAreCreatedInstantlyOnThisPlatformCreateOneDirectlyInstead: 'Organizations are created instantly on this platform; create one directly instead',
119
+ validationFailed: 'Validation failed: {detail}',
120
+ internalError: 'Internal error: {detail}',
121
+ };
122
+ export const apiErrorMessagesZhCN = {
123
+ unauthorizedMissingToken: '未认证:缺少令牌',
124
+ administratorAccountLoginRequiredToChangeItsPassword: '修改管理员账户密码需先登录该账户',
125
+ usernameAndPasswordAreRequired: '需要提供用户名和密码',
126
+ emailIsRequired: '需要提供用户邮箱',
127
+ emailAlreadyTaken: '用户邮箱已被占用:{email}',
128
+ emailHasPendingRegistration: '用户邮箱有等待处理的注册申请:{email}',
129
+ currentPasswordAndEmailAreRequired: '需要提供当前密码和用户邮箱',
130
+ userStatusMustBeEnabledOrDisabled: '用户状态必须是 enabled 或 disabled',
131
+ adminprovisionedpasswordchangepolicyMustBeForceOrAllow: 'adminProvisionedPasswordChangePolicy 必须是 force 或 allow',
132
+ forbiddenSuperAdministratorAccountCannotBeManaged: '禁止:不能把超级管理员账号作为 Skill User 管理',
133
+ pendingRegistrationMustBeProcessedFromUserRegistrationApproval: '待审用户注册必须从“用户注册审批”处理',
134
+ platformAdministratorsSignInFromTheAdminConsole: '平台管理员请从管理后台登录',
135
+ currentAndNewPasswordsAreRequired: '需要提供当前密码和新密码',
136
+ unauthorizedCurrentPasswordIsIncorrect: '未授权:当前密码不正确',
137
+ unauthorizedInvalidToken: '未认证:令牌无效',
138
+ unauthorizedInvalidCredentials: '未认证:凭据无效',
139
+ organizationApplicationNotFound: '组织申请不存在',
140
+ organizationApplicationHasAlreadyBeenProcessed: '组织申请已处理',
141
+ organizationNameIsAlreadyTaken: '组织名已被占用',
142
+ onlyPendingApplicationsCanBeCancelled: '只能取消待审状态的申请',
143
+ orgregistrationmodeMustBeAutoOrManual: 'orgRegistrationMode 必须是 auto 或 manual',
144
+ registrationmodeMustBeOpenOrApproval: 'registrationMode 必须是 open 或 approval',
145
+ memberaddmodeMustBeDirectOrInvite: 'memberAddMode 必须是 direct 或 invite',
146
+ registrationNotFound: '注册申请不存在',
147
+ registrationHasAlreadyBeenProcessed: '注册申请已处理',
148
+ deletionRequiresConfirmMatchingTheOrganizationName: '删除操作需要 confirm 字段与组织名一致',
149
+ organizationNotFoundOrNotManagedByEsl: '组织不存在或不受 ESL 管理',
150
+ organizationNotFound: '组织不存在',
151
+ identityMustBeOrdinaryManagingOrOwner: '身份必须是 ordinary、managing 或 owner',
152
+ forbiddenSuperAdministratorTokenRequired: '禁止:需要超级管理员令牌',
153
+ forbiddenManagingMembersCanOnlyRemoveThemselves: '禁止:管理成员只能移除自己',
154
+ invitationNotFound: '邀请不存在',
155
+ invitationHasAlreadyBeenProcessed: '邀请已处理',
156
+ teamNameMustUseLowercaseLettersDigitsAndHyphens: '团队名只能使用小写字母、数字和连字符',
157
+ teamNameIsReservedForStandingTeams: '团队名为常设团队保留',
158
+ customTeamsDoNotHaveAFixedPermission: '自定义团队没有固定权限',
159
+ teamDisplayNameMustBeAtMost64Characters: '团队显示名最长 64 个字符',
160
+ teamDoesNotBelongToYourOrganization: '团队不属于你的组织',
161
+ standingTeamsCannotBeDeleted: '常设团队不能删除',
162
+ standingTeamsCannotBeEdited: '常设团队不能编辑',
163
+ standingTeamsCannotBeUsedHere: '常设团队不能在此使用',
164
+ forbiddenOrganizationManagementTeamMembershipRequired: '禁止:需要组织管理团队成员身份',
165
+ organizationNameCollidesWithAnExistingUser: '组织名与现有用户名冲突',
166
+ anApplicationForThisOrganizationNameIsAlreadyPending: '该组织名已有待审申请',
167
+ organizationNameIsReserved: '组织名为保留名',
168
+ anApplicationForThisOrganizationAlreadyExists: '该组织已存在申请',
169
+ onlyTheApplicantMayQueryThisApplication: '只有申请人可以查询该申请',
170
+ skillNameMustUseLowercaseLettersDigitsAndHyphens: '技能名只能使用小写字母、数字和连字符',
171
+ skillDescriptionIsRequired: '需要提供技能描述',
172
+ skillDisplayNameTooLong: '技能显示名最长 128 个字符',
173
+ skillAlreadyExistsUseSourceAndGitPushToUpdateIt: '技能已存在;请使用 source 与 Git push 更新',
174
+ skillNotFound: '技能不存在',
175
+ forbiddenManagePermissionRequired: '禁止:需要 manage 权限',
176
+ visibilityMustBePublicOrPrivate: '可见性必须是 public 或 private',
177
+ forbiddenNoAccessToThisPrivateSkillRequestAccessFromItsMaintainers: '禁止:无权访问该私有技能;请向其维护者申请访问',
178
+ teamNotFoundInOrganization: '组织中不存在该团队',
179
+ teamIsNotALogicalCustomTeam: '该团队不是逻辑自定义团队',
180
+ teamPermissionMustBeReadWriteOrManage: '团队权限必须是 read、write 或 manage',
181
+ usernameAndAReadWriteOrManagePermissionAreRequired: '需要提供用户名和 read、write 或 manage 权限',
182
+ usernameIsRequired: '需要提供用户名',
183
+ unknownPermissionAction: '未知的权限操作',
184
+ logicalTeamProjectionIsIncomplete: '逻辑团队投影不完整',
185
+ skillNameAlreadyExists: '技能名已存在',
186
+ archivedSkillsCannotCreateReleases: '已归档技能不能创建发布',
187
+ releaseVersionMustBeValidSemver: '发布版本必须是合法 SemVer',
188
+ sourcecommitIsRequired: '需要提供 sourceCommit',
189
+ releaseJsonIsNotValidJson: 'release.json 不是合法 JSON',
190
+ skillHasNoSkillId: '技能没有 Skill ID',
191
+ skillReleaseNotFound: '技能发布不存在',
192
+ releaseTagRepairIsNotSupportedByTheGitBackend: 'Git 后端不支持修复发布 Tag',
193
+ invalidPublishedSkillPackagePath: '已发布技能包路径无效',
194
+ publishedSkillPackageNotFound: '已发布技能包不存在',
195
+ releaseNotesMessageIsRequired: '需要提供发布说明',
196
+ deletionRequiresConfirmMatchingTheReleaseVersion: '删除操作需要 confirm 字段与发布版本一致',
197
+ archivedSkillsDoNotAcceptReleaseChanges: '已归档技能不接受发布变更',
198
+ deprecationMessageMustBeAString: '弃用说明必须是字符串',
199
+ forbiddenRestorePermissionRequired: '禁止:需要恢复权限',
200
+ onlyArchivedSkillsCanBeRestored: '只有已归档技能可以恢复',
201
+ forbiddenDeletePermissionRequired: '禁止:需要删除权限',
202
+ skillMustBeArchivedBeforeDeletion: '技能必须先归档才能删除',
203
+ deletionRequiresANonEmptyReason: '删除操作需要非空理由',
204
+ deletionRequiresConfirmMatchingTheSkillIdentity: '删除操作需要 confirm 字段与技能 Identity 一致',
205
+ notMemberOfOrganization: '你不是组织 {org} 的成员',
206
+ defaultTeamNotFound: '组织中不存在默认团队 {teamName}',
207
+ skillReleaseAlreadyExists: '技能发布 {version} 已存在',
208
+ organizationInitializationFailed: '组织初始化失败:{detail}',
209
+ organizationDeletionFailed: '组织删除失败:{detail}',
210
+ userIsNotMemberOf: '用户不是 {org} 的成员',
211
+ userDoesNotExist: '用户不存在:{username}',
212
+ usernameAlreadyTaken: '用户名已被占用:{username}',
213
+ usernameHasPendingRegistration: '用户名有等待处理的注册申请:{username}',
214
+ usernameClaimedByPendingOrganizationApplication: '用户名被待审组织申请占用:{username}',
215
+ unsupportedLocale: '不支持的语言:{locale}',
216
+ userIsAlreadyMemberOf: '用户已经是 {org} 的成员',
217
+ organizationIsNotActive: '组织未激活:{org}',
218
+ validationFailed: '校验失败:{detail}',
219
+ internalError: '内部错误:{detail}',
220
+ identityNotATeamGrant: '该团队承载组织身份,不是技能授权;请改为调整成员身份',
221
+ organizationNotActiveForUpload: '组织 {org} 未激活;需先完成开通才能上传技能',
222
+ skillRenameFailed: '技能改名失败;已尝试回滚:{detail}',
223
+ skillRenamed: '技能已改名',
224
+ releaseManifestNameMismatch: '发布清单名 "{manifestName}" 与已确立的 Identity {skillName} 不一致;不允许通过 publish 变更归属',
225
+ releaseTagPointsElsewhere: '发布 Tag {tag} 指向 {target},预期 {expected}',
226
+ releaseRequiredByDependents: '发布 {version} 被 {dependents} 依赖;删除会破坏其安装。传入 force 可强制覆盖。',
227
+ forbiddenForcingPastAPinnedDependencyRequiresAPlatformAdministrator: '禁止:越过固定依赖需要平台管理员权限',
228
+ organizationRegistrationRequiresApprovalOnThisPlatformSubmitAnApplicationInstead: '本平台组织注册需要审批;请改为提交申请',
229
+ organizationsAreCreatedInstantlyOnThisPlatformCreateOneDirectlyInstead: '本平台组织即时创建;请直接创建',
230
+ emailVerificationMustBeOffOrOn: 'emailVerification 必须为 off 或 on',
231
+ outboundEmailIsNotConfigured: '尚未配置出站邮件',
232
+ outboundEmailDeliveryFailed: '出站邮件发送失败,请检查 SMTP 设置',
233
+ emailVerificationLinkIsInvalidOrExpired: '邮箱验证链接无效或已过期',
234
+ emailVerificationRequiredBeforeLogin: '登录前需要先完成邮箱验证',
235
+ passwordResetLinkIsInvalidOrExpired: '密码重置链接无效或已过期',
236
+ passwordResetEmailIsNotAvailable: '当前无法自助重置密码,请联系超级管理员',
237
+ passwordResetRequestReceived: '如果账号符合条件,密码重置邮件已发送',
238
+ newPasswordIsRequired: '需要提供新密码',
239
+ emailVerificationPending: '邮箱验证待完成',
240
+ };
@@ -0,0 +1,4 @@
1
+ import { type i18n } from 'i18next';
2
+ import { type Locale } from './locales.js';
3
+ export type { i18n };
4
+ export declare function createSharedI18n(initialLocale?: Locale): Promise<i18n>;
@@ -0,0 +1,16 @@
1
+ import i18next from 'i18next';
2
+ import { DEFAULT_LOCALE } from './locales.js';
3
+ import { translationResources } from './resources.js';
4
+ export async function createSharedI18n(initialLocale = DEFAULT_LOCALE) {
5
+ const instance = i18next.createInstance();
6
+ await instance.init({
7
+ lng: initialLocale,
8
+ fallbackLng: 'zh-CN',
9
+ resources: {
10
+ 'zh-CN': { translation: translationResources['zh-CN'] },
11
+ 'en-US': { translation: translationResources['en-US'] }
12
+ },
13
+ interpolation: { escapeValue: false }
14
+ });
15
+ return instance;
16
+ }
@@ -0,0 +1,5 @@
1
+ export { DEFAULT_LOCALE, SUPPORTED_LOCALES, resolveLocale, type Locale, type LocaleResolutionInput } from './locales.js';
2
+ export { translationResources, validateTranslationParity, type TranslationResources } from './resources.js';
3
+ export { apiErrorMessages, apiErrorMessagesZhCN, type ApiErrorCode } from './api-errors.js';
4
+ export { translateApiError, type TranslateApiErrorInput } from './translate-api-error.js';
5
+ export { createSharedI18n, type i18n as I18nInstance } from './i18n-runtime.js';
@@ -0,0 +1,5 @@
1
+ export { DEFAULT_LOCALE, SUPPORTED_LOCALES, resolveLocale } from './locales.js';
2
+ export { translationResources, validateTranslationParity } from './resources.js';
3
+ export { apiErrorMessages, apiErrorMessagesZhCN } from './api-errors.js';
4
+ export { translateApiError } from './translate-api-error.js';
5
+ export { createSharedI18n } from './i18n-runtime.js';
@@ -0,0 +1,9 @@
1
+ export declare const SUPPORTED_LOCALES: readonly ["zh-CN", "en-US"];
2
+ export type Locale = (typeof SUPPORTED_LOCALES)[number];
3
+ export declare const DEFAULT_LOCALE: Locale;
4
+ export interface LocaleResolutionInput {
5
+ override?: string | null;
6
+ accountLocale?: string | null;
7
+ browserLanguages?: readonly string[];
8
+ }
9
+ export declare function resolveLocale(input: LocaleResolutionInput): Locale;
@@ -0,0 +1,33 @@
1
+ export const SUPPORTED_LOCALES = ['zh-CN', 'en-US'];
2
+ export const DEFAULT_LOCALE = 'en-US';
3
+ function isSupportedLocale(value) {
4
+ return SUPPORTED_LOCALES.includes(value);
5
+ }
6
+ function resolveBrowserLanguage(languages) {
7
+ // 按浏览器偏好顺序逐个 tag 处理:先精确匹配完整 tag,再按语言主标签
8
+ // 匹配(zh-* → zh-CN,en-* → en-US),与 BCP 47 lookup 语义一致。
9
+ for (const tag of languages) {
10
+ if (isSupportedLocale(tag))
11
+ return tag;
12
+ const primary = tag.split('-')[0]?.toLowerCase();
13
+ if (primary === 'zh')
14
+ return 'zh-CN';
15
+ if (primary === 'en')
16
+ return 'en-US';
17
+ }
18
+ return null;
19
+ }
20
+ export function resolveLocale(input) {
21
+ const override = input.override?.trim();
22
+ if (override && isSupportedLocale(override))
23
+ return override;
24
+ const accountLocale = input.accountLocale?.trim();
25
+ if (accountLocale && isSupportedLocale(accountLocale))
26
+ return accountLocale;
27
+ if (input.browserLanguages?.length) {
28
+ const browser = resolveBrowserLanguage(input.browserLanguages);
29
+ if (browser)
30
+ return browser;
31
+ }
32
+ return DEFAULT_LOCALE;
33
+ }
@@ -0,0 +1,11 @@
1
+ import type { Locale } from './locales.js';
2
+ type TranslationTree = {
3
+ [key: string]: string | TranslationTree;
4
+ };
5
+ export type TranslationResources = Record<Locale, TranslationTree>;
6
+ export declare const translationResources: TranslationResources;
7
+ export declare function validateTranslationParity(): {
8
+ missingInZhCN: string[];
9
+ missingInEnUS: string[];
10
+ };
11
+ export {};