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,509 @@
1
+ import * as yaml from 'js-yaml';
2
+ import * as path from 'path';
3
+ import { existsSync, readFileSync } from 'fs';
4
+ import { execSync } from 'child_process';
5
+ import { errnoCode } from './utils/config-file-io.js';
6
+ export const MVP_CHANNELS = ['prompt', 'code_tool_hook', 'defer_archive'];
7
+ export const MVP_QUIET_FLAGS = ['gfi'];
8
+ export const MVP_GONE_FLAGS = ['nocturnal', 'idle_trigger'];
9
+ /**
10
+ * Product-level feedback defaults (PRI-543). The PD 控制台的"意见反馈"收集的是
11
+ * 使用者对 PD 产品的功能建议 / Bug,接收者是 PD 项目所有者,而非使用者自己。
12
+ * 因此 installer 生成的默认 config 预置:
13
+ * - `maintainer_email`:产品所有者的邮箱(兜底邮箱通道发到这里)。
14
+ * - `ingest_url` + `ingest_token`:主通道,让新装使用者开箱即可把反馈经 Cloudflare
15
+ * relay 落到所有者的 Linear,无需使用者自行配置。
16
+ *
17
+ * `ingest_token` 是随发布版分发的固定"产品公共令牌",按 spec §9.2 属反滥用边界
18
+ * (非安全边界),靠 relay 端 IP 限流兜底。改动此值必须同步更新 Cloudflare Pages
19
+ * secret `INGEST_TOKEN` 为同一值,并更新 `packages/website` 端 relay 的校验常量;
20
+ * 同时保持与 `tests/mvp-config.test.ts` 的断言一致(spec §10 双点同步)。
21
+ */
22
+ export const PRODUCT_FEEDBACK_MAINTAINER_EMAIL = 'csuzngjh@hotmail.com';
23
+ export const PRODUCT_FEEDBACK_INGEST_URL = 'https://principles-website.pages.dev/api/feedback';
24
+ export const PRODUCT_FEEDBACK_INGEST_TOKEN = 'pd_prod_pdxk4of3grc9vws2uz7te8iy'; // gitleaks:allow — 产品公共 ingest 令牌,spec §9.2 反滥用边界,非安全边界(随发布分发)
25
+ export function validateMvpChannels(channels) {
26
+ if (!Array.isArray(channels)) {
27
+ return { valid: [], unknowns: [] };
28
+ }
29
+ const mvpSet = new Set(MVP_CHANNELS);
30
+ const valid = [];
31
+ const unknowns = [];
32
+ for (const ch of channels) {
33
+ if (typeof ch !== 'string')
34
+ continue;
35
+ if (mvpSet.has(ch)) {
36
+ valid.push(ch);
37
+ }
38
+ else {
39
+ unknowns.push(ch);
40
+ }
41
+ }
42
+ return { valid, unknowns };
43
+ }
44
+ export function parseChannelsOption(raw) {
45
+ if (raw == null) {
46
+ return { channels: [...MVP_CHANNELS], unknowns: [] };
47
+ }
48
+ if (typeof raw !== 'string') {
49
+ return { channels: [], unknowns: [], error: `--channels expects a string, got ${typeof raw}` };
50
+ }
51
+ if (raw.trim().length === 0) {
52
+ return { channels: [...MVP_CHANNELS], unknowns: [] };
53
+ }
54
+ const parsed = raw.split(',').map((f) => f.trim().toLowerCase()).filter(Boolean);
55
+ const { valid, unknowns } = validateMvpChannels(parsed);
56
+ if (valid.length === 0 && parsed.length > 0) {
57
+ return { channels: [], unknowns, error: `All specified channels are invalid: "${raw}". Valid MVP channels: ${MVP_CHANNELS.join(', ')}` };
58
+ }
59
+ const channelSet = new Set(valid);
60
+ for (const core of MVP_CHANNELS) {
61
+ channelSet.add(core);
62
+ }
63
+ const channels = [...MVP_CHANNELS].filter(ch => channelSet.has(ch));
64
+ return { channels, unknowns };
65
+ }
66
+ export function validateOpenClawConfig(config) {
67
+ if (config === undefined)
68
+ return { valid: true };
69
+ if (config === null)
70
+ return { valid: false, error: 'openclaw.json exists but parsed as null — expected a non-null object' };
71
+ if (typeof config !== 'object' || Array.isArray(config)) {
72
+ return { valid: false, error: 'openclaw.json root must be an object' };
73
+ }
74
+ const obj = config;
75
+ if (Object.hasOwn(obj, 'plugins')) {
76
+ const { plugins } = obj;
77
+ if (plugins == null)
78
+ return { valid: true };
79
+ if (typeof plugins !== 'object' || Array.isArray(plugins)) {
80
+ return { valid: false, error: 'openclaw.json plugins must be an object' };
81
+ }
82
+ const pluginsObj = plugins;
83
+ const { allow, entries, installs } = pluginsObj;
84
+ if (allow !== undefined) {
85
+ if (!Array.isArray(allow)) {
86
+ return { valid: false, error: 'openclaw.json plugins.allow must be an array' };
87
+ }
88
+ for (const elem of allow) {
89
+ if (typeof elem !== 'string') {
90
+ return { valid: false, error: 'openclaw.json plugins.allow contains non-string elements' };
91
+ }
92
+ }
93
+ }
94
+ if (entries !== undefined) {
95
+ if (typeof entries !== 'object' || entries === null || Array.isArray(entries)) {
96
+ return { valid: false, error: 'openclaw.json plugins.entries must be an object' };
97
+ }
98
+ }
99
+ if (installs !== undefined) {
100
+ if (typeof installs !== 'object' || installs === null || Array.isArray(installs)) {
101
+ return { valid: false, error: 'openclaw.json plugins.installs must be an object' };
102
+ }
103
+ }
104
+ }
105
+ return { valid: true };
106
+ }
107
+ export function buildSuccessOutput(opts) {
108
+ const { workspace, components, channels, verification, consoleUrl } = opts;
109
+ const cliWorking = components.cli === 'verified' || components.cli === 'verified_local_only';
110
+ const isComplete = components.plugin === 'verified' && cliWorking && components.console === 'configured';
111
+ const nextActions = [];
112
+ if (components.cli === 'verified') {
113
+ nextActions.push('Run pd runtime canary --workspace <path> --json for diagnostics');
114
+ }
115
+ else if (components.cli === 'verified_local_only' && components.cliLocalPath) {
116
+ const quotedPath = components.cliLocalPath.includes(' ') ? `"${components.cliLocalPath}"` : components.cliLocalPath;
117
+ nextActions.push(`Run ${quotedPath} runtime canary --workspace <path> --json for diagnostics (global pd not on PATH)`);
118
+ }
119
+ if (components.console === 'configured') {
120
+ // Task 8: when the installer auto-launched the console (consoleUrl set),
121
+ // point the user at the live URL instead of the manual start instruction.
122
+ // EP-03: when consoleUrl is absent, keep the manual instruction so the
123
+ // user is never left without a way to reach the console.
124
+ if (consoleUrl) {
125
+ nextActions.push(`Console ready at ${consoleUrl} (browser opened automatically)`);
126
+ }
127
+ else {
128
+ nextActions.push('Start console: pd console --workspace <path> --no-auth (listens on 127.0.0.1 only)');
129
+ }
130
+ }
131
+ if (isComplete) {
132
+ return {
133
+ success: true,
134
+ workspace,
135
+ components,
136
+ enabledChannels: channels,
137
+ verification,
138
+ nextAction: nextActions.join(' | '),
139
+ consoleUrl,
140
+ };
141
+ }
142
+ const failureReasons = [];
143
+ if (components.plugin !== 'verified') {
144
+ failureReasons.push(`plugin_${components.plugin}`);
145
+ }
146
+ if (!cliWorking) {
147
+ failureReasons.push(`cli_${components.cli}`);
148
+ }
149
+ if (components.console !== 'configured') {
150
+ failureReasons.push(`console_${components.console}`);
151
+ }
152
+ const reason = failureReasons.length > 0 ? failureReasons.join(',') : 'incomplete_install';
153
+ return {
154
+ success: false,
155
+ reason,
156
+ nextAction: nextActions.join(' | '),
157
+ components,
158
+ verification,
159
+ };
160
+ }
161
+ export function buildFailureOutput(reason, nextAction) {
162
+ return {
163
+ success: false,
164
+ reason,
165
+ nextAction,
166
+ };
167
+ }
168
+ export function isMvpChannel(value) {
169
+ return MVP_CHANNELS.includes(value);
170
+ }
171
+ export function getHomeDir() {
172
+ return process.env.HOME
173
+ || process.env.USERPROFILE
174
+ || (process.env.HOMEDRIVE && process.env.HOMEPATH ? process.env.HOMEDRIVE + process.env.HOMEPATH : null)
175
+ || '.';
176
+ }
177
+ export function getOpenClawDir() {
178
+ return path.join(getHomeDir(), '.openclaw');
179
+ }
180
+ /** Host-neutral PD installation root. Shared runtime must not live under a
181
+ * host's discovery directory (ADR-0020 / ERR-097). */
182
+ export function getPdDir() {
183
+ return path.join(getHomeDir(), '.pd');
184
+ }
185
+ export function getPdRuntimeDir() {
186
+ return path.join(getPdDir(), 'runtime');
187
+ }
188
+ export function getInstallManifestPath() {
189
+ return path.join(getPdDir(), 'install.json');
190
+ }
191
+ export function getPdRuntimeBackupsDir() {
192
+ return path.join(getPdDir(), 'backups');
193
+ }
194
+ export function getPluginExtDir() {
195
+ return path.join(getOpenClawDir(), 'extensions', 'principles-disciple');
196
+ }
197
+ /** Common plugin package used by pd-cli/console. OpenClaw gets an adapter copy
198
+ * under getPluginExtDir(); Codex-only installs use this host-neutral copy. */
199
+ export function getInstalledPluginDir() {
200
+ return path.join(getPdRuntimeDir(), 'plugin');
201
+ }
202
+ export function getInstalledLayoutPackageDir() {
203
+ return path.join(getPdRuntimeDir(), 'install-layout');
204
+ }
205
+ /**
206
+ * PD 备份根目录(~/.openclaw/pd-backups)—— 必须位于 extensions/ 之外。
207
+ * OpenClaw 插件发现会扫描 extensions/ 下每个子目录;备份目录内含
208
+ * package.json(openclaw.extensions) + dist/bundle.js 时会被识别为第二个
209
+ * principles-disciple 插件,导致每次 gateway 启动都出现
210
+ * "duplicate plugin id detected" 告警。备份一律放这里,禁止放 extensions/ 内。
211
+ */
212
+ export function getPdBackupsDir() {
213
+ return path.join(getOpenClawDir(), 'pd-backups');
214
+ }
215
+ export function getInstalledPdCliDir() {
216
+ return path.join(getPdRuntimeDir(), 'pd-cli');
217
+ }
218
+ export function getInstalledBinDir() {
219
+ return path.join(getPdRuntimeDir(), 'bin');
220
+ }
221
+ export function getInstalledConsoleDir() {
222
+ return path.join(getPdRuntimeDir(), 'console');
223
+ }
224
+ export function isWindows() {
225
+ return process.platform === 'win32';
226
+ }
227
+ /**
228
+ * PRI-308: Generate .pd/config.yaml content.
229
+ *
230
+ * This replaces the old feature-flags.yaml generation.
231
+ * The config.yaml follows the PdConfig schema from principles-core
232
+ * (pd-config-types.ts), inlined to avoid a runtime dependency.
233
+ *
234
+ * Fix-4 (P0-BUG-4): `runtimeProfile` optional parameter — when provided,
235
+ * the `pd.default` profile is pre-filled with user-supplied values instead
236
+ * of being left empty. Empty profile causes LLM features to fail silently.
237
+ *
238
+ * PRI-543 (slice 5): `maintainerEmail` optional parameter — when provided,
239
+ * it pre-fills `feedback.maintainer_email` so the email fallback channel uses
240
+ * a real address instead of the loader's placeholder. Added so the config
241
+ * template and pd-config-store stay in sync (spec §10 double-sync).
242
+ */
243
+ export function generateConfigYamlContent(runtimeProfile, maintainerEmail) {
244
+ const config = {
245
+ version: 1,
246
+ // PRI-645: the feature registry (principles-core feature-flag-contract.ts)
247
+ // owns ALL default values. A fresh config records only explicit intent —
248
+ // an empty map means "every flag follows its registry default", which the
249
+ // effective resolver (computeEffectivePdConfig) fills at read time. Do NOT
250
+ // add registry-default-equivalent entries here: a default snapshot would
251
+ // freeze today's defaults against future graduation flips and re-create
252
+ // the DEFAULT_FEATURE_FLAGS duplicate this file must not own. If a fresh
253
+ // install ever needs a deliberate bootstrap override (value differing from
254
+ // the registry default), document the product/safety reason inline — the
255
+ // core-side installer-config-parity contract test enforces registration +
256
+ // non-default value for any entry added here.
257
+ features: {},
258
+ runtimeProfiles: {
259
+ // M9 default: pi-ai profile. Fix-4: when the installer collected
260
+ // provider/model/apiKeyEnv from the user, pre-fill them here so
261
+ // LLM-dependent features work on first run. Otherwise leave empty
262
+ // (user must configure via web console).
263
+ 'pd.default': {
264
+ type: 'pi-ai',
265
+ provider: runtimeProfile?.provider ?? '',
266
+ model: runtimeProfile?.model ?? '',
267
+ apiKeyEnv: runtimeProfile?.apiKeyEnv ?? '',
268
+ },
269
+ // Fallback: openclaw.default delegates LLM calls to the OpenClaw main
270
+ // agent. Users can switch back via web console if pi-ai is unavailable.
271
+ 'openclaw.default': {
272
+ type: 'openclaw',
273
+ source: 'default',
274
+ },
275
+ },
276
+ internalAgents: {
277
+ defaultRuntime: 'pd.default',
278
+ agents: {
279
+ diagnostician: { enabled: true, runtimeProfile: 'pd.default' },
280
+ dreamer: { enabled: true, runtimeProfile: 'pd.default' },
281
+ philosopher: { enabled: false, runtimeProfile: 'pd.default' },
282
+ scribe: { enabled: true, runtimeProfile: 'pd.default' },
283
+ artificer: { enabled: true, runtimeProfile: 'pd.default' },
284
+ evaluator: { enabled: false, runtimeProfile: 'pd.default' },
285
+ rolloutReviewer: { enabled: false, runtimeProfile: 'pd.default' },
286
+ correctionObserver: { enabled: false, runtimeProfile: 'pd.default' },
287
+ empathyObserver: { enabled: false, runtimeProfile: 'pd.default' },
288
+ signalCollector: { enabled: false, runtimeProfile: 'pd.default' },
289
+ },
290
+ },
291
+ ui: {
292
+ diagnostics: { mode: 'simple' },
293
+ },
294
+ // PRI-543 feedback submit → config double-sync (spec §10). These channel
295
+ // params MUST mirror what pd-config-store reads (feedback.maintainer_email
296
+ // + feedback.ingest_url / ingest_token / github_repo / github_proxy). The
297
+ // installer writes this segment so a fresh workspace always carries it.
298
+ // 产品反馈接收者是 PD 项目所有者:maintainer_email 默认=所有者邮箱;ingest_url
299
+ // / ingest_token 预置产品公共主通道(新装使用者开箱即可把反馈直送所有者 Linear,
300
+ // 无需使用者配置)。github 通道默认留空(需使用者按需配置 gh)。
301
+ feedback: {
302
+ maintainer_email: maintainerEmail ?? PRODUCT_FEEDBACK_MAINTAINER_EMAIL,
303
+ ingest_url: PRODUCT_FEEDBACK_INGEST_URL,
304
+ ingest_token: PRODUCT_FEEDBACK_INGEST_TOKEN,
305
+ github_repo: '',
306
+ github_proxy: '',
307
+ },
308
+ };
309
+ return yaml.dump(config, { lineWidth: -1, quoteStyle: 'double' });
310
+ }
311
+ /**
312
+ * PRI-308: Get the path to .pd/config.yaml for a workspace.
313
+ */
314
+ export function getConfigYamlPath(workspaceDir) {
315
+ return path.join(workspaceDir, '.pd', 'config.yaml');
316
+ }
317
+ /**
318
+ * PRI-308: Full structural validation of .pd/config.yaml.
319
+ *
320
+ * Checks all required top-level sections (version, features, runtimeProfiles,
321
+ * internalAgents) exist and have correct types. This is a lightweight structural
322
+ * check — deep field validation is done by validatePdConfig() in principles-core.
323
+ *
324
+ * Used by the installer to decide whether an existing config.yaml is safe to
325
+ * preserve. A config missing runtimeProfiles/internalAgents would cause runtime
326
+ * failures, so it must be rejected.
327
+ *
328
+ * Throws on any structural problem with reason + nextAction.
329
+ */
330
+ export function validateConfigYamlFull(workspaceDir) {
331
+ const configPath = getConfigYamlPath(workspaceDir);
332
+ if (!existsSync(configPath)) {
333
+ throw new Error(`config.yaml not found at ${configPath}. This should not happen during preserve-existing validation.`);
334
+ }
335
+ const rawYaml = readFileSync(configPath, 'utf-8');
336
+ const parsed = (() => {
337
+ try {
338
+ return yaml.load(rawYaml);
339
+ }
340
+ catch (e) {
341
+ throw new Error(`config.yaml parse error at ${configPath}: ${e instanceof Error ? e.message : String(e)}. Delete the file and re-run the installer.`, { cause: e });
342
+ }
343
+ })();
344
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
345
+ throw new Error(`config.yaml at ${configPath} has invalid structure (expected object, got ${Array.isArray(parsed) ? 'array' : typeof parsed}). Delete the file and re-run the installer.`);
346
+ }
347
+ const config = parsed;
348
+ // version — must be number 1
349
+ if (!Object.hasOwn(config, 'version') || typeof config.version !== 'number' || config.version !== 1) {
350
+ throw new Error(`config.yaml at ${configPath}: 'version' must be 1, got ${!Object.hasOwn(config, 'version') ? 'missing' : config.version}. Delete the file and re-run the installer.`);
351
+ }
352
+ // features — must be non-null object
353
+ if (!Object.hasOwn(config, 'features') || typeof config.features !== 'object' || config.features === null || Array.isArray(config.features)) {
354
+ throw new Error(`config.yaml at ${configPath}: 'features' must be an object, got ${!Object.hasOwn(config, 'features') ? 'missing' : Array.isArray(config.features) ? 'array' : typeof config.features}. Delete the file and re-run the installer.`);
355
+ }
356
+ // MVP channels must have valid entries
357
+ const features = config.features;
358
+ for (const key of MVP_CHANNELS) {
359
+ if (!Object.hasOwn(features, key))
360
+ continue;
361
+ const value = features[key];
362
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
363
+ throw new Error(`config.yaml at ${configPath}: MVP channel '${key}' has invalid entry (expected object, got ${value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value}). Delete the file and re-run the installer.`);
364
+ }
365
+ const flag = value;
366
+ if (!Object.hasOwn(flag, 'enabled') || typeof flag.enabled !== 'boolean') {
367
+ throw new Error(`config.yaml at ${configPath}: MVP channel '${key}' has invalid 'enabled' field. Delete the file and re-run the installer.`);
368
+ }
369
+ }
370
+ // runtimeProfiles — must be non-null object
371
+ if (!Object.hasOwn(config, 'runtimeProfiles') || typeof config.runtimeProfiles !== 'object' || config.runtimeProfiles === null || Array.isArray(config.runtimeProfiles)) {
372
+ throw new Error(`config.yaml at ${configPath}: 'runtimeProfiles' must be an object, got ${!Object.hasOwn(config, 'runtimeProfiles') ? 'missing' : Array.isArray(config.runtimeProfiles) ? 'array' : typeof config.runtimeProfiles}. Delete the file and re-run the installer.`);
373
+ }
374
+ // internalAgents — must be non-null object with defaultRuntime
375
+ if (!Object.hasOwn(config, 'internalAgents') || typeof config.internalAgents !== 'object' || config.internalAgents === null || Array.isArray(config.internalAgents)) {
376
+ throw new Error(`config.yaml at ${configPath}: 'internalAgents' must be an object, got ${!Object.hasOwn(config, 'internalAgents') ? 'missing' : Array.isArray(config.internalAgents) ? 'array' : typeof config.internalAgents}. Delete the file and re-run the installer.`);
377
+ }
378
+ const agents = config.internalAgents;
379
+ if (!Object.hasOwn(agents, 'defaultRuntime') || typeof agents.defaultRuntime !== 'string' || agents.defaultRuntime.length === 0) {
380
+ throw new Error(`config.yaml at ${configPath}: 'internalAgents.defaultRuntime' must be a non-empty string, got ${!Object.hasOwn(agents, 'defaultRuntime') ? 'missing' : typeof agents.defaultRuntime}. Delete the file and re-run the installer.`);
381
+ }
382
+ }
383
+ /**
384
+ * PRI-645: structural validation of an existing config.yaml the installer is
385
+ * about to preserve (PRI-308 preserve contract).
386
+ *
387
+ * The PRI-523 migration that used to live here (adding `host.codex` /
388
+ * `abstraction_layer_v1` to existing configs) is retired: both entries were
389
+ * exactly registry defaults, and writing them re-created the default snapshot
390
+ * PRI-645 removes. Effective values never depended on those entries — the
391
+ * registry (DEFAULT_FEATURE_FLAGS) resolves both at read time — so retiring
392
+ * the write changes representation only, never behavior. Existing configs are
393
+ * now preserved verbatim: no normalization, no cleanup (source=system is an
394
+ * origin hint, not an auto-delete license — PRI-637).
395
+ */
396
+ export class ExistingConfigVerifyInfraError extends Error {
397
+ constructor(message, options) {
398
+ super(message, options);
399
+ this.name = 'ExistingConfigVerifyInfraError';
400
+ }
401
+ }
402
+ export function validateExistingConfigYamlForPreserve(workspaceDir) {
403
+ try {
404
+ validateConfigYamlFull(workspaceDir);
405
+ }
406
+ catch (error) {
407
+ // Infrastructure failure reading the file (EPERM/EBUSY/...): the config is
408
+ // NOT necessarily malformed — callers must not advise deleting it. Contrast
409
+ // with validation errors thrown by validateConfigYamlFull itself, which do
410
+ // indicate a malformed config (PRI-523 review finding preserved).
411
+ if (typeof errnoCode(error) === 'string') {
412
+ const message = error instanceof Error ? error.message : String(error);
413
+ throw new ExistingConfigVerifyInfraError(message, { cause: error });
414
+ }
415
+ throw error;
416
+ }
417
+ }
418
+ /**
419
+ * PRI-308: Read the ENABLED MVP channels from .pd/config.yaml.
420
+ *
421
+ * PRI-645: computed with sparse/effective semantics, not raw presence —
422
+ * the MVP channels are registered core capabilities whose registry default
423
+ * is ON and which cannot be disabled by omission (PRI-435), so:
424
+ * entry absent → enabled (follows registry default)
425
+ * entry { enabled: true } → enabled
426
+ * entry { enabled: false } → disabled (explicit Owner override)
427
+ * A present-but-malformed entry still fails loud (rc-3).
428
+ *
429
+ * Fail-loud: throws on malformed or missing required fields.
430
+ * Returns empty array if file does not exist (first install).
431
+ */
432
+ export function readEnabledChannelsFromConfigYaml(workspaceDir) {
433
+ const configPath = getConfigYamlPath(workspaceDir);
434
+ if (!existsSync(configPath))
435
+ return [];
436
+ const rawYaml = readFileSync(configPath, 'utf-8');
437
+ const parsed = (() => {
438
+ try {
439
+ return yaml.load(rawYaml);
440
+ }
441
+ catch (e) {
442
+ throw new Error(`config.yaml parse error at ${configPath}: ${e instanceof Error ? e.message : String(e)}. Delete the file and re-run the installer.`, { cause: e });
443
+ }
444
+ })();
445
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
446
+ throw new Error(`config.yaml at ${configPath} has invalid structure (expected object, got ${Array.isArray(parsed) ? 'array' : typeof parsed}). Delete the file and re-run the installer.`);
447
+ }
448
+ const configObj = parsed;
449
+ if (!Object.hasOwn(configObj, 'features') || typeof configObj.features !== 'object' || configObj.features === null || Array.isArray(configObj.features)) {
450
+ throw new Error(`config.yaml at ${configPath} is missing or has invalid 'features' field. Delete the file and re-run the installer.`);
451
+ }
452
+ const features = configObj.features;
453
+ const enabled = [];
454
+ for (const key of MVP_CHANNELS) {
455
+ if (!Object.hasOwn(features, key)) {
456
+ // Absence ≠ disabled: the registry default (ON, core) applies — the
457
+ // sparse fresh config is the normal PRI-645 shape.
458
+ enabled.push(key);
459
+ continue;
460
+ }
461
+ const value = features[key];
462
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
463
+ throw new Error(`config.yaml at ${configPath}: MVP channel '${key}' has invalid entry (expected object, got ${value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value}). Delete the file and re-run the installer.`);
464
+ }
465
+ const flag = value;
466
+ if (!Object.hasOwn(flag, 'enabled')) {
467
+ throw new Error(`config.yaml at ${configPath}: MVP channel '${key}' is missing required 'enabled' field. Delete the file and re-run the installer.`);
468
+ }
469
+ if (typeof flag.enabled !== 'boolean') {
470
+ throw new Error(`config.yaml at ${configPath}: MVP channel '${key}' has invalid 'enabled' value (expected boolean, got ${flag.enabled === null ? 'null' : typeof flag.enabled}). Delete the file and re-run the installer.`);
471
+ }
472
+ if (flag.enabled === true) {
473
+ enabled.push(key);
474
+ }
475
+ }
476
+ return enabled;
477
+ }
478
+ /**
479
+ * 获取 npm global bin 目录路径
480
+ */
481
+ export function getNpmGlobalBinDir() {
482
+ try {
483
+ const prefix = execSync('npm prefix -g', { encoding: 'utf-8', stdio: 'pipe' }).trim();
484
+ if (!prefix)
485
+ return null;
486
+ return isWindows() ? prefix : path.join(prefix, 'bin');
487
+ }
488
+ catch {
489
+ return null;
490
+ }
491
+ }
492
+ /**
493
+ * 获取所有可能的全局 pd shim 文件路径
494
+ */
495
+ export function getGlobalShimPaths() {
496
+ const globalBin = getNpmGlobalBinDir();
497
+ if (!globalBin)
498
+ return [];
499
+ if (isWindows()) {
500
+ return [
501
+ path.join(globalBin, 'pd.cmd'),
502
+ path.join(globalBin, 'pd.ps1'),
503
+ ];
504
+ }
505
+ else {
506
+ return [path.join(globalBin, 'pd')];
507
+ }
508
+ }
509
+ //# sourceMappingURL=mvp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mvp-config.js","sourceRoot":"","sources":["../src/mvp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { select, confirm, input } from '@inquirer/prompts';
2
+ import { type WorkspaceInfo } from './utils/env.js';
3
+ import { type MvpChannel, type RuntimeProfileInput } from './mvp-config.js';
4
+ import { type Language } from './i18n.js';
5
+ import { type HostTarget } from './installers/index.js';
6
+ export interface InstallOptions {
7
+ language: Language;
8
+ mode: 'smart' | 'force';
9
+ workspaceDir: string;
10
+ channels: MvpChannel[];
11
+ overwriteConfig: boolean;
12
+ /**
13
+ * ADR-0020 §2.3: Host target for install/uninstall.
14
+ * - 'openclaw' (default) — writes ~/.openclaw/openclaw.json.
15
+ * - 'codex' — writes ~/.codex/hooks.json.
16
+ * - 'all' — writes both.
17
+ */
18
+ host: HostTarget;
19
+ /** Fix-4 (P0-BUG-4): optional LLM runtime profile collected during prompts. */
20
+ runtimeProfile?: RuntimeProfileInput;
21
+ /**
22
+ * When true, the installer auto-stops a running OpenClaw gateway before
23
+ * install (to avoid EPERM on the backup rename) and restarts it afterwards.
24
+ * Set by the --stop-gateway CLI flag.
25
+ */
26
+ stopGateway: boolean;
27
+ }
28
+ export declare function runPrompts(cliOptions?: Partial<InstallOptions>, workspaceInfo?: WorkspaceInfo): Promise<InstallOptions | null>;
29
+ export { confirm, input, select };
30
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAgB,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAA+B,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,IAAI,EAAE,UAAU,CAAC;IACjB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAkMD,wBAAsB,UAAU,CAC9B,UAAU,GAAE,OAAO,CAAC,cAAc,CAAM,EACxC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkDhC;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC"}