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.
- package/console/dist/server/routes/update.js +187 -19
- package/console/dist/server/update/mutation-controller.d.ts +18 -0
- package/console/dist/server/update/mutation-controller.js +29 -0
- package/console/dist/server/utils/installed-layout.d.ts +1 -0
- package/console/dist/server/utils/installed-layout.js +2 -0
- package/console/package.json +1 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +15 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts +2 -0
- package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js +71 -0
- package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js.map +1 -0
- package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts +2 -0
- package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js +219 -0
- package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js.map +1 -0
- package/core/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js +2 -3
- package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -1
- package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +12 -1
- package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +15 -2
- package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
- package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts +50 -0
- package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts.map +1 -0
- package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js +93 -0
- package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js.map +1 -0
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +5 -0
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js +152 -0
- package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/owner-review.d.ts +7 -1
- package/core/dist/runtime-v2/internalization/owner-review.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/owner-review.js +22 -3
- package/core/dist/runtime-v2/internalization/owner-review.js.map +1 -1
- package/core/package.json +3 -2
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +50 -0
- package/dist/installer.js.map +1 -1
- package/dist/update/release-manager-authority.d.ts +69 -0
- package/dist/update/release-manager-authority.d.ts.map +1 -0
- package/dist/update/release-manager-authority.js +125 -0
- package/dist/update/release-manager-authority.js.map +1 -0
- package/dist/utils/workspace-divergence.d.ts +36 -0
- package/dist/utils/workspace-divergence.d.ts.map +1 -0
- package/dist/utils/workspace-divergence.js +87 -0
- package/dist/utils/workspace-divergence.js.map +1 -0
- package/install-layout/dist/index.d.ts +5 -0
- package/install-layout/dist/index.js +1 -0
- package/install-layout/package.json +1 -1
- package/package.json +3 -2
- package/plugin/dist/bundle.js +870 -734
- package/plugin/dist/governance-audit.js +381 -247
- package/plugin/dist/openclaw-sdk.d.ts +3 -0
- package/plugin/dist/rulehost-evidence.js +420 -286
- package/plugin/dist/service/subagent-workflow/types.d.ts +2 -2
- package/plugin/dist/utils/retry.d.ts +1 -1
- package/plugin/dist/utils/workspace-resolver.d.ts +35 -4
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/release-manager/dist/i18n.d.ts +6 -0
- package/release-manager/dist/i18n.d.ts.map +1 -0
- package/release-manager/dist/i18n.js +234 -0
- package/release-manager/dist/i18n.js.map +1 -0
- package/release-manager/dist/index.d.ts +7 -0
- package/release-manager/dist/index.d.ts.map +1 -0
- package/release-manager/dist/index.js +474 -0
- package/release-manager/dist/index.js.map +1 -0
- package/release-manager/dist/installer.d.ts +185 -0
- package/release-manager/dist/installer.d.ts.map +1 -0
- package/release-manager/dist/installer.js +2305 -0
- package/release-manager/dist/installer.js.map +1 -0
- package/release-manager/dist/installers/codex-host-installer.d.ts +29 -0
- package/release-manager/dist/installers/codex-host-installer.d.ts.map +1 -0
- package/release-manager/dist/installers/codex-host-installer.js +494 -0
- package/release-manager/dist/installers/codex-host-installer.js.map +1 -0
- package/release-manager/dist/installers/index.d.ts +40 -0
- package/release-manager/dist/installers/index.d.ts.map +1 -0
- package/release-manager/dist/installers/index.js +35 -0
- package/release-manager/dist/installers/index.js.map +1 -0
- package/release-manager/dist/installers/openclaw-host-installer.d.ts +18 -0
- package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +1 -0
- package/release-manager/dist/installers/openclaw-host-installer.js +414 -0
- package/release-manager/dist/installers/openclaw-host-installer.js.map +1 -0
- package/release-manager/dist/mvp-config.d.ts +197 -0
- package/release-manager/dist/mvp-config.d.ts.map +1 -0
- package/release-manager/dist/mvp-config.js +509 -0
- package/release-manager/dist/mvp-config.js.map +1 -0
- package/release-manager/dist/prompts.d.ts +30 -0
- package/release-manager/dist/prompts.d.ts.map +1 -0
- package/release-manager/dist/prompts.js +231 -0
- package/release-manager/dist/prompts.js.map +1 -0
- package/release-manager/dist/skill-language.d.ts +32 -0
- package/release-manager/dist/skill-language.d.ts.map +1 -0
- package/release-manager/dist/skill-language.js +107 -0
- package/release-manager/dist/skill-language.js.map +1 -0
- package/release-manager/dist/uninstaller.d.ts +55 -0
- package/release-manager/dist/uninstaller.d.ts.map +1 -0
- package/release-manager/dist/uninstaller.js +409 -0
- package/release-manager/dist/uninstaller.js.map +1 -0
- package/release-manager/dist/update/atomic-file.d.ts +35 -0
- package/release-manager/dist/update/atomic-file.d.ts.map +1 -0
- package/release-manager/dist/update/atomic-file.js +120 -0
- package/release-manager/dist/update/atomic-file.js.map +1 -0
- package/release-manager/dist/update/bootstrap-protocol.d.ts +55 -0
- package/release-manager/dist/update/bootstrap-protocol.d.ts.map +1 -0
- package/release-manager/dist/update/bootstrap-protocol.js +132 -0
- package/release-manager/dist/update/bootstrap-protocol.js.map +1 -0
- package/release-manager/dist/update/channel-metadata.d.ts +28 -0
- package/release-manager/dist/update/channel-metadata.d.ts.map +1 -0
- package/release-manager/dist/update/channel-metadata.js +90 -0
- package/release-manager/dist/update/channel-metadata.js.map +1 -0
- package/release-manager/dist/update/channel-promotion.d.ts +39 -0
- package/release-manager/dist/update/channel-promotion.d.ts.map +1 -0
- package/release-manager/dist/update/channel-promotion.js +55 -0
- package/release-manager/dist/update/channel-promotion.js.map +1 -0
- package/release-manager/dist/update/data-compatibility.d.ts +35 -0
- package/release-manager/dist/update/data-compatibility.d.ts.map +1 -0
- package/release-manager/dist/update/data-compatibility.js +45 -0
- package/release-manager/dist/update/data-compatibility.js.map +1 -0
- package/release-manager/dist/update/install-layout.d.ts +59 -0
- package/release-manager/dist/update/install-layout.d.ts.map +1 -0
- package/release-manager/dist/update/install-layout.js +127 -0
- package/release-manager/dist/update/install-layout.js.map +1 -0
- package/release-manager/dist/update/legacy-migration.d.ts +56 -0
- package/release-manager/dist/update/legacy-migration.d.ts.map +1 -0
- package/release-manager/dist/update/legacy-migration.js +254 -0
- package/release-manager/dist/update/legacy-migration.js.map +1 -0
- package/release-manager/dist/update/product-identity.d.ts +50 -0
- package/release-manager/dist/update/product-identity.d.ts.map +1 -0
- package/release-manager/dist/update/product-identity.js +63 -0
- package/release-manager/dist/update/product-identity.js.map +1 -0
- package/release-manager/dist/update/release-asset-manifest.d.ts +31 -0
- package/release-manager/dist/update/release-asset-manifest.d.ts.map +1 -0
- package/release-manager/dist/update/release-asset-manifest.js +161 -0
- package/release-manager/dist/update/release-asset-manifest.js.map +1 -0
- package/release-manager/dist/update/release-identity.d.ts +33 -0
- package/release-manager/dist/update/release-identity.d.ts.map +1 -0
- package/release-manager/dist/update/release-identity.js +108 -0
- package/release-manager/dist/update/release-identity.js.map +1 -0
- package/release-manager/dist/update/release-manager-authority.d.ts +69 -0
- package/release-manager/dist/update/release-manager-authority.d.ts.map +1 -0
- package/release-manager/dist/update/release-manager-authority.js +125 -0
- package/release-manager/dist/update/release-manager-authority.js.map +1 -0
- package/release-manager/dist/update/release-manager.d.ts +96 -0
- package/release-manager/dist/update/release-manager.d.ts.map +1 -0
- package/release-manager/dist/update/release-manager.js +253 -0
- package/release-manager/dist/update/release-manager.js.map +1 -0
- package/release-manager/dist/update/release-metadata.d.ts +57 -0
- package/release-manager/dist/update/release-metadata.d.ts.map +1 -0
- package/release-manager/dist/update/release-metadata.js +200 -0
- package/release-manager/dist/update/release-metadata.js.map +1 -0
- package/release-manager/dist/update/release-policy.d.ts +51 -0
- package/release-manager/dist/update/release-policy.d.ts.map +1 -0
- package/release-manager/dist/update/release-policy.js +103 -0
- package/release-manager/dist/update/release-policy.js.map +1 -0
- package/release-manager/dist/update/rollback-policy.d.ts +56 -0
- package/release-manager/dist/update/rollback-policy.d.ts.map +1 -0
- package/release-manager/dist/update/rollback-policy.js +61 -0
- package/release-manager/dist/update/rollback-policy.js.map +1 -0
- package/release-manager/dist/update/transaction-journal.d.ts +131 -0
- package/release-manager/dist/update/transaction-journal.d.ts.map +1 -0
- package/release-manager/dist/update/transaction-journal.js +346 -0
- package/release-manager/dist/update/transaction-journal.js.map +1 -0
- package/release-manager/dist/update/trust-metadata.d.ts +55 -0
- package/release-manager/dist/update/trust-metadata.d.ts.map +1 -0
- package/release-manager/dist/update/trust-metadata.js +170 -0
- package/release-manager/dist/update/trust-metadata.js.map +1 -0
- package/release-manager/dist/update/update-history.d.ts +46 -0
- package/release-manager/dist/update/update-history.d.ts.map +1 -0
- package/release-manager/dist/update/update-history.js +123 -0
- package/release-manager/dist/update/update-history.js.map +1 -0
- package/release-manager/dist/utils/config-file-io.d.ts +26 -0
- package/release-manager/dist/utils/config-file-io.d.ts.map +1 -0
- package/release-manager/dist/utils/config-file-io.js +128 -0
- package/release-manager/dist/utils/config-file-io.js.map +1 -0
- package/release-manager/dist/utils/env.d.ts +60 -0
- package/release-manager/dist/utils/env.d.ts.map +1 -0
- package/release-manager/dist/utils/env.js +308 -0
- package/release-manager/dist/utils/env.js.map +1 -0
- package/release-manager/dist/utils/logger.d.ts +15 -0
- package/release-manager/dist/utils/logger.d.ts.map +1 -0
- package/release-manager/dist/utils/logger.js +30 -0
- package/release-manager/dist/utils/logger.js.map +1 -0
- package/release-manager/dist/utils/workspace-divergence.d.ts +36 -0
- package/release-manager/dist/utils/workspace-divergence.d.ts.map +1 -0
- package/release-manager/dist/utils/workspace-divergence.js +87 -0
- package/release-manager/dist/utils/workspace-divergence.js.map +1 -0
- 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"}
|