create-principles-disciple 1.132.2 → 1.132.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/console/dist/server/routes/update.js +187 -19
  2. package/console/dist/server/update/mutation-controller.d.ts +18 -0
  3. package/console/dist/server/update/mutation-controller.js +29 -0
  4. package/console/dist/server/utils/installed-layout.d.ts +1 -0
  5. package/console/dist/server/utils/installed-layout.js +2 -0
  6. package/console/package.json +1 -0
  7. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +15 -0
  8. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  9. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts +2 -0
  10. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts.map +1 -0
  11. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js +71 -0
  12. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js.map +1 -0
  13. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts +2 -0
  14. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts.map +1 -0
  15. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js +219 -0
  16. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js.map +1 -0
  17. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -1
  18. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js +2 -3
  19. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -1
  20. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +12 -1
  21. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
  22. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +15 -2
  23. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
  24. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts +50 -0
  25. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts.map +1 -0
  26. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js +93 -0
  27. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js.map +1 -0
  28. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
  29. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +5 -0
  30. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
  31. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js +152 -0
  32. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js.map +1 -1
  33. package/core/dist/runtime-v2/internalization/owner-review.d.ts +7 -1
  34. package/core/dist/runtime-v2/internalization/owner-review.d.ts.map +1 -1
  35. package/core/dist/runtime-v2/internalization/owner-review.js +22 -3
  36. package/core/dist/runtime-v2/internalization/owner-review.js.map +1 -1
  37. package/core/package.json +3 -2
  38. package/dist/installer.d.ts.map +1 -1
  39. package/dist/installer.js +50 -0
  40. package/dist/installer.js.map +1 -1
  41. package/dist/update/release-manager-authority.d.ts +69 -0
  42. package/dist/update/release-manager-authority.d.ts.map +1 -0
  43. package/dist/update/release-manager-authority.js +125 -0
  44. package/dist/update/release-manager-authority.js.map +1 -0
  45. package/dist/utils/workspace-divergence.d.ts +36 -0
  46. package/dist/utils/workspace-divergence.d.ts.map +1 -0
  47. package/dist/utils/workspace-divergence.js +87 -0
  48. package/dist/utils/workspace-divergence.js.map +1 -0
  49. package/install-layout/dist/index.d.ts +5 -0
  50. package/install-layout/dist/index.js +1 -0
  51. package/install-layout/package.json +1 -1
  52. package/package.json +3 -2
  53. package/plugin/dist/bundle.js +870 -734
  54. package/plugin/dist/governance-audit.js +381 -247
  55. package/plugin/dist/openclaw-sdk.d.ts +3 -0
  56. package/plugin/dist/rulehost-evidence.js +420 -286
  57. package/plugin/dist/service/subagent-workflow/types.d.ts +2 -2
  58. package/plugin/dist/utils/retry.d.ts +1 -1
  59. package/plugin/dist/utils/workspace-resolver.d.ts +35 -4
  60. package/plugin/openclaw.plugin.json +1 -1
  61. package/plugin/package.json +1 -1
  62. package/release-manager/dist/i18n.d.ts +6 -0
  63. package/release-manager/dist/i18n.d.ts.map +1 -0
  64. package/release-manager/dist/i18n.js +234 -0
  65. package/release-manager/dist/i18n.js.map +1 -0
  66. package/release-manager/dist/index.d.ts +7 -0
  67. package/release-manager/dist/index.d.ts.map +1 -0
  68. package/release-manager/dist/index.js +474 -0
  69. package/release-manager/dist/index.js.map +1 -0
  70. package/release-manager/dist/installer.d.ts +185 -0
  71. package/release-manager/dist/installer.d.ts.map +1 -0
  72. package/release-manager/dist/installer.js +2305 -0
  73. package/release-manager/dist/installer.js.map +1 -0
  74. package/release-manager/dist/installers/codex-host-installer.d.ts +29 -0
  75. package/release-manager/dist/installers/codex-host-installer.d.ts.map +1 -0
  76. package/release-manager/dist/installers/codex-host-installer.js +494 -0
  77. package/release-manager/dist/installers/codex-host-installer.js.map +1 -0
  78. package/release-manager/dist/installers/index.d.ts +40 -0
  79. package/release-manager/dist/installers/index.d.ts.map +1 -0
  80. package/release-manager/dist/installers/index.js +35 -0
  81. package/release-manager/dist/installers/index.js.map +1 -0
  82. package/release-manager/dist/installers/openclaw-host-installer.d.ts +18 -0
  83. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +1 -0
  84. package/release-manager/dist/installers/openclaw-host-installer.js +414 -0
  85. package/release-manager/dist/installers/openclaw-host-installer.js.map +1 -0
  86. package/release-manager/dist/mvp-config.d.ts +197 -0
  87. package/release-manager/dist/mvp-config.d.ts.map +1 -0
  88. package/release-manager/dist/mvp-config.js +509 -0
  89. package/release-manager/dist/mvp-config.js.map +1 -0
  90. package/release-manager/dist/prompts.d.ts +30 -0
  91. package/release-manager/dist/prompts.d.ts.map +1 -0
  92. package/release-manager/dist/prompts.js +231 -0
  93. package/release-manager/dist/prompts.js.map +1 -0
  94. package/release-manager/dist/skill-language.d.ts +32 -0
  95. package/release-manager/dist/skill-language.d.ts.map +1 -0
  96. package/release-manager/dist/skill-language.js +107 -0
  97. package/release-manager/dist/skill-language.js.map +1 -0
  98. package/release-manager/dist/uninstaller.d.ts +55 -0
  99. package/release-manager/dist/uninstaller.d.ts.map +1 -0
  100. package/release-manager/dist/uninstaller.js +409 -0
  101. package/release-manager/dist/uninstaller.js.map +1 -0
  102. package/release-manager/dist/update/atomic-file.d.ts +35 -0
  103. package/release-manager/dist/update/atomic-file.d.ts.map +1 -0
  104. package/release-manager/dist/update/atomic-file.js +120 -0
  105. package/release-manager/dist/update/atomic-file.js.map +1 -0
  106. package/release-manager/dist/update/bootstrap-protocol.d.ts +55 -0
  107. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +1 -0
  108. package/release-manager/dist/update/bootstrap-protocol.js +132 -0
  109. package/release-manager/dist/update/bootstrap-protocol.js.map +1 -0
  110. package/release-manager/dist/update/channel-metadata.d.ts +28 -0
  111. package/release-manager/dist/update/channel-metadata.d.ts.map +1 -0
  112. package/release-manager/dist/update/channel-metadata.js +90 -0
  113. package/release-manager/dist/update/channel-metadata.js.map +1 -0
  114. package/release-manager/dist/update/channel-promotion.d.ts +39 -0
  115. package/release-manager/dist/update/channel-promotion.d.ts.map +1 -0
  116. package/release-manager/dist/update/channel-promotion.js +55 -0
  117. package/release-manager/dist/update/channel-promotion.js.map +1 -0
  118. package/release-manager/dist/update/data-compatibility.d.ts +35 -0
  119. package/release-manager/dist/update/data-compatibility.d.ts.map +1 -0
  120. package/release-manager/dist/update/data-compatibility.js +45 -0
  121. package/release-manager/dist/update/data-compatibility.js.map +1 -0
  122. package/release-manager/dist/update/install-layout.d.ts +59 -0
  123. package/release-manager/dist/update/install-layout.d.ts.map +1 -0
  124. package/release-manager/dist/update/install-layout.js +127 -0
  125. package/release-manager/dist/update/install-layout.js.map +1 -0
  126. package/release-manager/dist/update/legacy-migration.d.ts +56 -0
  127. package/release-manager/dist/update/legacy-migration.d.ts.map +1 -0
  128. package/release-manager/dist/update/legacy-migration.js +254 -0
  129. package/release-manager/dist/update/legacy-migration.js.map +1 -0
  130. package/release-manager/dist/update/product-identity.d.ts +50 -0
  131. package/release-manager/dist/update/product-identity.d.ts.map +1 -0
  132. package/release-manager/dist/update/product-identity.js +63 -0
  133. package/release-manager/dist/update/product-identity.js.map +1 -0
  134. package/release-manager/dist/update/release-asset-manifest.d.ts +31 -0
  135. package/release-manager/dist/update/release-asset-manifest.d.ts.map +1 -0
  136. package/release-manager/dist/update/release-asset-manifest.js +161 -0
  137. package/release-manager/dist/update/release-asset-manifest.js.map +1 -0
  138. package/release-manager/dist/update/release-identity.d.ts +33 -0
  139. package/release-manager/dist/update/release-identity.d.ts.map +1 -0
  140. package/release-manager/dist/update/release-identity.js +108 -0
  141. package/release-manager/dist/update/release-identity.js.map +1 -0
  142. package/release-manager/dist/update/release-manager-authority.d.ts +69 -0
  143. package/release-manager/dist/update/release-manager-authority.d.ts.map +1 -0
  144. package/release-manager/dist/update/release-manager-authority.js +125 -0
  145. package/release-manager/dist/update/release-manager-authority.js.map +1 -0
  146. package/release-manager/dist/update/release-manager.d.ts +96 -0
  147. package/release-manager/dist/update/release-manager.d.ts.map +1 -0
  148. package/release-manager/dist/update/release-manager.js +253 -0
  149. package/release-manager/dist/update/release-manager.js.map +1 -0
  150. package/release-manager/dist/update/release-metadata.d.ts +57 -0
  151. package/release-manager/dist/update/release-metadata.d.ts.map +1 -0
  152. package/release-manager/dist/update/release-metadata.js +200 -0
  153. package/release-manager/dist/update/release-metadata.js.map +1 -0
  154. package/release-manager/dist/update/release-policy.d.ts +51 -0
  155. package/release-manager/dist/update/release-policy.d.ts.map +1 -0
  156. package/release-manager/dist/update/release-policy.js +103 -0
  157. package/release-manager/dist/update/release-policy.js.map +1 -0
  158. package/release-manager/dist/update/rollback-policy.d.ts +56 -0
  159. package/release-manager/dist/update/rollback-policy.d.ts.map +1 -0
  160. package/release-manager/dist/update/rollback-policy.js +61 -0
  161. package/release-manager/dist/update/rollback-policy.js.map +1 -0
  162. package/release-manager/dist/update/transaction-journal.d.ts +131 -0
  163. package/release-manager/dist/update/transaction-journal.d.ts.map +1 -0
  164. package/release-manager/dist/update/transaction-journal.js +346 -0
  165. package/release-manager/dist/update/transaction-journal.js.map +1 -0
  166. package/release-manager/dist/update/trust-metadata.d.ts +55 -0
  167. package/release-manager/dist/update/trust-metadata.d.ts.map +1 -0
  168. package/release-manager/dist/update/trust-metadata.js +170 -0
  169. package/release-manager/dist/update/trust-metadata.js.map +1 -0
  170. package/release-manager/dist/update/update-history.d.ts +46 -0
  171. package/release-manager/dist/update/update-history.d.ts.map +1 -0
  172. package/release-manager/dist/update/update-history.js +123 -0
  173. package/release-manager/dist/update/update-history.js.map +1 -0
  174. package/release-manager/dist/utils/config-file-io.d.ts +26 -0
  175. package/release-manager/dist/utils/config-file-io.d.ts.map +1 -0
  176. package/release-manager/dist/utils/config-file-io.js +128 -0
  177. package/release-manager/dist/utils/config-file-io.js.map +1 -0
  178. package/release-manager/dist/utils/env.d.ts +60 -0
  179. package/release-manager/dist/utils/env.d.ts.map +1 -0
  180. package/release-manager/dist/utils/env.js +308 -0
  181. package/release-manager/dist/utils/env.js.map +1 -0
  182. package/release-manager/dist/utils/logger.d.ts +15 -0
  183. package/release-manager/dist/utils/logger.d.ts.map +1 -0
  184. package/release-manager/dist/utils/logger.js +30 -0
  185. package/release-manager/dist/utils/logger.js.map +1 -0
  186. package/release-manager/dist/utils/workspace-divergence.d.ts +36 -0
  187. package/release-manager/dist/utils/workspace-divergence.d.ts.map +1 -0
  188. package/release-manager/dist/utils/workspace-divergence.js +87 -0
  189. package/release-manager/dist/utils/workspace-divergence.js.map +1 -0
  190. package/release-manager/package.json +78 -0
@@ -0,0 +1,231 @@
1
+ import { select, confirm, input } from '@inquirer/prompts';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { detectWorkspace } from './utils/env.js';
5
+ import { MVP_CHANNELS } from './mvp-config.js';
6
+ import { setLanguage, getLanguage, t } from './i18n.js';
7
+ // Fix-4 (P0-BUG-4): Supported pi-ai providers for the interactive prompt.
8
+ // Keep in sync with packages/principles-core pi-ai adapter capabilities.
9
+ const RUNTIME_PROFILE_PROVIDERS = [
10
+ { name: 'openai', value: 'openai' },
11
+ { name: 'anthropic', value: 'anthropic' },
12
+ { name: 'deepseek', value: 'deepseek' },
13
+ { name: 'skip — configure later in console', value: '__skip__' },
14
+ ];
15
+ /**
16
+ * Fix-4 (P0-BUG-4): Interactive prompt for LLM runtime profile.
17
+ *
18
+ * Why this exists: without a configured runtimeProfile, `.pd/config.yaml`
19
+ * leaves `pd.default` provider/model/apiKeyEnv empty, and LLM-dependent
20
+ * features (diagnose, candidate intake, internalization) fail silently
21
+ * (rc-9: no silent fallback). This prompt collects the values up front so
22
+ * first-run experience is not broken.
23
+ *
24
+ * Returns `undefined` when the user skips — installer falls back to empty
25
+ * profile and surfaces a clear next-action pointing to the console settings.
26
+ */
27
+ async function promptRuntimeProfile() {
28
+ const configure = await confirm({
29
+ message: 'Configure LLM runtime profile now? (recommended for first-time users — needed for pain diagnosis and principle generation)',
30
+ default: true,
31
+ });
32
+ if (!configure)
33
+ return undefined;
34
+ const providerChoice = await select({
35
+ message: 'Select LLM provider:',
36
+ choices: RUNTIME_PROFILE_PROVIDERS,
37
+ default: 'openai',
38
+ });
39
+ if (providerChoice === '__skip__')
40
+ return undefined;
41
+ const apiKeyEnv = await input({
42
+ message: 'Enter API key environment variable name (e.g. OPENAI_API_KEY), or "skip" to skip:',
43
+ default: providerChoice === 'openai' ? 'OPENAI_API_KEY'
44
+ : providerChoice === 'anthropic' ? 'ANTHROPIC_API_KEY'
45
+ : providerChoice === 'deepseek' ? 'DEEPSEEK_API_KEY'
46
+ : 'LLM_API_KEY',
47
+ validate: (value) => {
48
+ const trimmed = value.trim();
49
+ if (!trimmed)
50
+ return 'Environment variable name cannot be empty (enter "skip" to skip)';
51
+ if (trimmed.toLowerCase() === 'skip')
52
+ return true;
53
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(trimmed)) {
54
+ return 'Must be a valid environment variable name (uppercase letters, digits, underscore; cannot start with a digit). Enter "skip" to skip.';
55
+ }
56
+ return true;
57
+ },
58
+ });
59
+ if (apiKeyEnv.trim().toLowerCase() === 'skip')
60
+ return undefined;
61
+ // Model is optional — sensible defaults exist per provider, user can override
62
+ // via console later. We don't prompt for it to keep onboarding short.
63
+ const modelDefault = providerChoice === 'openai' ? 'gpt-4o-mini'
64
+ : providerChoice === 'anthropic' ? 'claude-3-5-haiku-latest'
65
+ : providerChoice === 'deepseek' ? 'deepseek-chat'
66
+ : '';
67
+ return {
68
+ provider: providerChoice,
69
+ model: modelDefault,
70
+ apiKeyEnv: apiKeyEnv.trim(),
71
+ };
72
+ }
73
+ /**
74
+ * ADR-0020 §2.3: Prompt for host target (interactive mode only).
75
+ *
76
+ * Default is 'openclaw' for backward compatibility. Operators who also use
77
+ * Codex CLI should select 'codex' or 'all'.
78
+ */
79
+ async function promptHost(defaultHost = 'openclaw') {
80
+ return await select({
81
+ message: 'Select host platform / 选择主机平台',
82
+ choices: [
83
+ {
84
+ name: 'OpenClaw (default)',
85
+ value: 'openclaw',
86
+ description: 'Writes ~/.openclaw/openclaw.json — PD runs as an OpenClaw plugin.',
87
+ },
88
+ {
89
+ name: 'Codex CLI',
90
+ value: 'codex',
91
+ description: 'Writes ~/.codex/hooks.json — PD runs as a Codex hook subprocess.',
92
+ },
93
+ {
94
+ name: 'All hosts',
95
+ value: 'all',
96
+ description: 'Writes both OpenClaw and Codex configs — for operators using multiple hosts.',
97
+ },
98
+ ],
99
+ default: defaultHost,
100
+ });
101
+ }
102
+ async function promptLanguage() {
103
+ return await select({
104
+ message: 'Select language / 选择语言',
105
+ choices: [
106
+ { name: 'English', value: 'en' },
107
+ { name: '中文', value: 'zh' },
108
+ ],
109
+ default: 'zh',
110
+ });
111
+ }
112
+ async function promptInstallMode(defaultMode = 'smart') {
113
+ return await select({
114
+ message: t('install_mode'),
115
+ choices: [
116
+ {
117
+ name: t('smart_merge') + ' — ' + t('smart_mode_desc'),
118
+ value: 'smart',
119
+ description: t('smart_mode_desc'),
120
+ },
121
+ {
122
+ name: t('force_overwrite') + ' — ' + t('force_mode_desc'),
123
+ value: 'force',
124
+ description: t('force_mode_desc'),
125
+ },
126
+ ],
127
+ default: defaultMode,
128
+ });
129
+ }
130
+ async function promptWorkspace(workspaceInfo) {
131
+ const choices = [
132
+ {
133
+ name: `${t('use_detected')}: ${workspaceInfo.detectedPath}`,
134
+ value: 'detected',
135
+ },
136
+ {
137
+ name: t('custom_dir'),
138
+ value: 'custom',
139
+ },
140
+ ];
141
+ const selection = await select({
142
+ message: `${t('workspace_dir')} ${workspaceInfo.hasPrinciples ? '(Principles detected)' : ''}`,
143
+ choices,
144
+ default: 'detected',
145
+ });
146
+ if (selection === 'custom') {
147
+ return await input({
148
+ message: t('enter_path'),
149
+ default: path.join(os.homedir(), 'clawd'),
150
+ validate: (value) => {
151
+ if (!value.trim())
152
+ return t('path_empty_error');
153
+ return true;
154
+ },
155
+ });
156
+ }
157
+ return workspaceInfo.detectedPath;
158
+ }
159
+ function showMvpCoreChannels() {
160
+ console.log(`\n${t('mvp_channels')}`);
161
+ for (const ch of MVP_CHANNELS) {
162
+ const labels = {
163
+ prompt: { en: 'soft principle injection', zh: '软原则注入' },
164
+ code_tool_hook: { en: 'Rule Host hard enforcement', zh: 'Rule Host 强制约束' },
165
+ defer_archive: { en: 'graceful deferral', zh: '优雅延迟' },
166
+ };
167
+ console.log(` ${ch} — ${labels[ch]?.[getLanguage()] ?? labels[ch]?.en ?? ''}`);
168
+ }
169
+ console.log();
170
+ }
171
+ async function promptConfirm(options) {
172
+ console.log(`\n${t('install_config')}`);
173
+ console.log(` ${t('language')}: ${options.language}`);
174
+ console.log(` Host platform: ${options.host ?? 'openclaw (default)'}`);
175
+ console.log(` ${t('mode')}: ${options.mode === 'force' ? t('force_overwrite') : t('smart_merge')}`);
176
+ console.log(` ${t('workspace')}: ${options.workspaceDir}`);
177
+ console.log(` ${t('mvp_channels_enabled')}: ${MVP_CHANNELS.join(', ')}`);
178
+ // Fix-4: surface runtime profile status so user knows whether LLM features will work.
179
+ if (options.runtimeProfile) {
180
+ console.log(` LLM runtime profile: ${options.runtimeProfile.provider} / ${options.runtimeProfile.model} (key: $${options.runtimeProfile.apiKeyEnv})`);
181
+ }
182
+ else {
183
+ console.log(` LLM runtime profile: not configured (configure later via console)`);
184
+ }
185
+ return await confirm({
186
+ message: t('confirm_install'),
187
+ default: true,
188
+ });
189
+ }
190
+ export async function runPrompts(cliOptions = {}, workspaceInfo) {
191
+ const wsInfo = workspaceInfo || detectWorkspace();
192
+ const language = cliOptions.language ?? await promptLanguage();
193
+ setLanguage(language);
194
+ // ADR-0020 §2.3: prompt for host target if not supplied via --host.
195
+ const host = cliOptions.host ?? await promptHost();
196
+ let { mode } = cliOptions;
197
+ if (!mode) {
198
+ const defaultMode = wsInfo.isFirstInstall ? 'force' : 'smart';
199
+ if (!wsInfo.isFirstInstall && wsInfo.coreFiles && wsInfo.coreFiles.length > 0) {
200
+ console.log(`\n${t('existing_core_files')} ${wsInfo.coreFiles.join(', ')}`);
201
+ console.log(` ${t('smart_mode_desc')}\n`);
202
+ }
203
+ mode = await promptInstallMode(defaultMode);
204
+ }
205
+ const workspaceDir = cliOptions.workspaceDir ?? await promptWorkspace(wsInfo);
206
+ showMvpCoreChannels();
207
+ // Fix-4 (P0-BUG-4): collect LLM runtime profile after channels are shown,
208
+ // before final confirmation. Skipped automatically in non-interactive mode
209
+ // (caller passes runtimeProfile via cliOptions or leaves it undefined).
210
+ const runtimeProfile = cliOptions.runtimeProfile !== undefined
211
+ ? cliOptions.runtimeProfile
212
+ : await promptRuntimeProfile();
213
+ const options = {
214
+ language,
215
+ mode,
216
+ workspaceDir,
217
+ channels: [...MVP_CHANNELS],
218
+ overwriteConfig: false,
219
+ host,
220
+ runtimeProfile,
221
+ stopGateway: cliOptions.stopGateway === true,
222
+ };
223
+ const confirmed = await promptConfirm(options);
224
+ if (!confirmed) {
225
+ console.log(`\n${t('cancel_install')}\n`);
226
+ return null;
227
+ }
228
+ return options;
229
+ }
230
+ export { confirm, input, select };
231
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type SkillLanguage = 'zh' | 'en';
2
+ export declare const SKILL_LANGUAGE_ROOTS: Record<SkillLanguage, string>;
3
+ export interface SkillLanguageResult {
4
+ applied: boolean;
5
+ /** rc-9: structured reason whenever selection did NOT apply. */
6
+ note?: string;
7
+ }
8
+ /**
9
+ * Detect the single declared language root.
10
+ * Returns null when zero, both, or malformed entries are declared — callers
11
+ * treat that as "no explicit selection" and fall back to the product default.
12
+ */
13
+ export declare function detectSkillLanguage(manifestRaw: unknown): SkillLanguage | null;
14
+ /**
15
+ * Pure manifest transform: strip every language skill root, then declare
16
+ * exactly the selected language's root. Non-language entries (e.g. future
17
+ * non-localized skill dirs) are preserved; non-string junk entries are
18
+ * dropped (the host drops them anyway during normalization).
19
+ * Returns null when the manifest has no skills array to select for.
20
+ */
21
+ export declare function applySkillLanguageToManifest(manifestRaw: unknown, language: SkillLanguage): {
22
+ manifest: Record<string, unknown>;
23
+ changed: boolean;
24
+ } | null;
25
+ /**
26
+ * Apply language selection to the manifest inside an installed extension dir.
27
+ * Never throws — this is a post-copy hardening step, and failing it must not
28
+ * roll back an otherwise complete install. Every skip path returns a
29
+ * structured note for the caller to surface (rc-9).
30
+ */
31
+ export declare function applySkillLanguageSelection(extDir: string, language: SkillLanguage): SkillLanguageResult;
32
+ //# sourceMappingURL=skill-language.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-language.d.ts","sourceRoot":"","sources":["../src/skill-language.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAG9D,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAU9E;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,aAAa,GACtB;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAWhE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,mBAAmB,CAuBxG"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Install-time skill-language selection (PR #1332 follow-up, ERR-097).
3
+ *
4
+ * OpenClaw (verified on installed 2026.7.1-2) publishes plugin skills by
5
+ * directory NAME: every immediate child of a declared `skills` root that
6
+ * contains a SKILL.md is linked into ~/.openclaw/plugin-skills/<name>, the
7
+ * first declaration wins, and later same-name roots only produce
8
+ * "plugin skill name collision" warnings. There is no locale mechanism.
9
+ *
10
+ * Consequence: exactly ONE language root may be declared. The published
11
+ * manifest declares the product default (zh); installs requested with
12
+ * `--lang en` rewrite the INSTALLED manifest to the en root at
13
+ * materialization time. The shipped package stays zh-only so any
14
+ * materialization path that forgets to select degrades to the
15
+ * collision-free default instead of regressing to 23 collision warnings.
16
+ *
17
+ * The same transform (detect + re-apply) is mirrored in
18
+ * packages/pd-console/src/server/routes/update.ts so console updates
19
+ * preserve the user's language choice; keep the two in sync.
20
+ */
21
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
22
+ import { join } from 'path';
23
+ export const SKILL_LANGUAGE_ROOTS = {
24
+ zh: 'templates/langs/zh/skills',
25
+ en: 'templates/langs/en/skills',
26
+ };
27
+ function isRecord(value) {
28
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
29
+ }
30
+ function isLanguageSkillRoot(entry, language) {
31
+ if (typeof entry !== 'string')
32
+ return false;
33
+ const normalized = entry.replaceAll('\\', '/');
34
+ const languages = language ? [language] : ['zh', 'en'];
35
+ return languages.some((lang) => normalized === SKILL_LANGUAGE_ROOTS[lang]);
36
+ }
37
+ /**
38
+ * Detect the single declared language root.
39
+ * Returns null when zero, both, or malformed entries are declared — callers
40
+ * treat that as "no explicit selection" and fall back to the product default.
41
+ */
42
+ export function detectSkillLanguage(manifestRaw) {
43
+ if (!isRecord(manifestRaw) || !Array.isArray(manifestRaw.skills))
44
+ return null;
45
+ const languages = new Set();
46
+ for (const entry of manifestRaw.skills) {
47
+ if (isLanguageSkillRoot(entry, 'zh'))
48
+ languages.add('zh');
49
+ else if (isLanguageSkillRoot(entry, 'en'))
50
+ languages.add('en');
51
+ }
52
+ if (languages.size !== 1)
53
+ return null;
54
+ for (const language of languages)
55
+ return language;
56
+ return null;
57
+ }
58
+ /**
59
+ * Pure manifest transform: strip every language skill root, then declare
60
+ * exactly the selected language's root. Non-language entries (e.g. future
61
+ * non-localized skill dirs) are preserved; non-string junk entries are
62
+ * dropped (the host drops them anyway during normalization).
63
+ * Returns null when the manifest has no skills array to select for.
64
+ */
65
+ export function applySkillLanguageToManifest(manifestRaw, language) {
66
+ if (!isRecord(manifestRaw) || !Array.isArray(manifestRaw.skills))
67
+ return null;
68
+ const skills = manifestRaw.skills;
69
+ const kept = skills.filter((entry) => typeof entry === 'string' && !isLanguageSkillRoot(entry));
70
+ const next = [...kept, SKILL_LANGUAGE_ROOTS[language]];
71
+ const unchanged = next.length === skills.length && next.every((entry, i) => entry === skills[i]);
72
+ if (unchanged)
73
+ return { manifest: manifestRaw, changed: false };
74
+ return { manifest: { ...manifestRaw, skills: next }, changed: true };
75
+ }
76
+ /**
77
+ * Apply language selection to the manifest inside an installed extension dir.
78
+ * Never throws — this is a post-copy hardening step, and failing it must not
79
+ * roll back an otherwise complete install. Every skip path returns a
80
+ * structured note for the caller to surface (rc-9).
81
+ */
82
+ export function applySkillLanguageSelection(extDir, language) {
83
+ const manifestPath = join(extDir, 'openclaw.plugin.json');
84
+ if (!existsSync(manifestPath)) {
85
+ return { applied: false, note: 'manifest_missing' };
86
+ }
87
+ const templateRoot = join(extDir, SKILL_LANGUAGE_ROOTS[language]);
88
+ if (!existsSync(templateRoot)) {
89
+ return { applied: false, note: `skill_templates_missing:${SKILL_LANGUAGE_ROOTS[language]}` };
90
+ }
91
+ let manifestRaw;
92
+ try {
93
+ manifestRaw = JSON.parse(readFileSync(manifestPath, 'utf-8'));
94
+ }
95
+ catch {
96
+ return { applied: false, note: 'manifest_unparseable' };
97
+ }
98
+ const shaped = applySkillLanguageToManifest(manifestRaw, language);
99
+ if (shaped === null) {
100
+ return { applied: false, note: 'manifest_has_no_skills_array' };
101
+ }
102
+ if (shaped.changed) {
103
+ writeFileSync(manifestPath, JSON.stringify(shaped.manifest, null, 2) + '\n', 'utf-8');
104
+ }
105
+ return { applied: true };
106
+ }
107
+ //# sourceMappingURL=skill-language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-language.js","sourceRoot":"","sources":["../src/skill-language.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { type HostTarget } from './installers/index.js';
2
+ export interface UninstallResult {
3
+ success: boolean;
4
+ removedDirs: string[];
5
+ removedFiles: string[];
6
+ removedGlobalShims: string[];
7
+ skippedGlobalShims: string[];
8
+ preservedPaths: string[];
9
+ error?: string;
10
+ }
11
+ interface SharedRuntimeUninstallPlan {
12
+ removeSharedRuntime: boolean;
13
+ remainingHosts: ('codex' | 'openclaw')[];
14
+ manifestHasTarget: boolean;
15
+ warning?: string;
16
+ }
17
+ export declare function planSharedRuntimeUninstall(host: HostTarget): SharedRuntimeUninstallPlan;
18
+ /**
19
+ * Check install status across all hosts (OpenClaw + Codex).
20
+ *
21
+ * ADR-0020 §2.3: Detects PD install markers for each registered host.
22
+ * Returns aggregated status so `pd status` / `npx create-principles-disciple
23
+ * status` shows the full picture regardless of which host was selected
24
+ * during install.
25
+ */
26
+ export declare function checkInstallStatus(host?: HostTarget): {
27
+ isInstalled: boolean;
28
+ paths: {
29
+ exists: boolean;
30
+ path: string;
31
+ name: string;
32
+ type: 'dir' | 'file';
33
+ }[];
34
+ };
35
+ /**
36
+ * 检查 shim 文件是否由 Principles Disciple 创建
37
+ * 通过读取文件内容,确认其目标指向 PD 安装目录
38
+ */
39
+ export declare function isPdOwnedShim(shimPath: string): boolean;
40
+ export declare function uninstall(options?: {
41
+ force?: boolean;
42
+ lang?: string;
43
+ /**
44
+ * ADR-0020 §2.3: Host target for uninstall.
45
+ * - 'openclaw' — clean up OpenClaw config only.
46
+ * - 'codex' — clean up Codex hooks only.
47
+ * - 'all' (default) — clean up both hosts.
48
+ *
49
+ * Default is 'all' for thorough cleanup (unlike install where default
50
+ * is 'openclaw' for backward compatibility).
51
+ */
52
+ host?: HostTarget;
53
+ }): Promise<UninstallResult>;
54
+ export {};
55
+ //# sourceMappingURL=uninstaller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstaller.d.ts","sourceRoot":"","sources":["../src/uninstaller.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG3E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC;IACzC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,UAAU,GAAG,0BAA0B,CA0BvF;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,UAAkB,GAAG;IAC5D,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;KACtB,EAAE,CAAC;CACL,CAwCA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkBvD;AA2FD,wBAAsB,SAAS,CAC7B,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACd,GACL,OAAO,CAAC,eAAe,CAAC,CA6M1B"}