create-principles-disciple 1.132.2 → 1.132.4
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/codex-adapter/dist/codec/index.d.ts +6 -0
- package/codex-adapter/dist/codec/index.js +5 -0
- package/codex-adapter/dist/codec/input-decoder.d.ts +13 -0
- package/codex-adapter/dist/codec/input-decoder.js +103 -0
- package/codex-adapter/dist/codec/output-encoder.d.ts +32 -0
- package/codex-adapter/dist/codec/output-encoder.js +51 -0
- package/codex-adapter/dist/host-adapter.d.ts +30 -0
- package/codex-adapter/dist/host-adapter.js +28 -0
- package/codex-adapter/dist/index.d.ts +25 -0
- package/codex-adapter/dist/index.js +19 -0
- package/codex-adapter/dist/ingestion/admission.d.ts +54 -0
- package/codex-adapter/dist/ingestion/admission.js +137 -0
- package/codex-adapter/dist/ingestion/catch-up.d.ts +41 -0
- package/codex-adapter/dist/ingestion/catch-up.js +94 -0
- package/codex-adapter/dist/ingestion/codex-home.d.ts +19 -0
- package/codex-adapter/dist/ingestion/codex-home.js +43 -0
- package/codex-adapter/dist/ingestion/codex-version.d.ts +30 -0
- package/codex-adapter/dist/ingestion/codex-version.js +53 -0
- package/codex-adapter/dist/ingestion/ingestion-fields.d.ts +17 -0
- package/codex-adapter/dist/ingestion/ingestion-fields.js +28 -0
- package/codex-adapter/dist/ingestion/ingestion.d.ts +71 -0
- package/codex-adapter/dist/ingestion/ingestion.js +248 -0
- package/codex-adapter/dist/ingestion/transcript-decoder.d.ts +72 -0
- package/codex-adapter/dist/ingestion/transcript-decoder.js +485 -0
- package/codex-adapter/dist/ingestion/transcript-locate.d.ts +13 -0
- package/codex-adapter/dist/ingestion/transcript-locate.js +75 -0
- package/codex-adapter/dist/ingestion/transcript-path.d.ts +25 -0
- package/codex-adapter/dist/ingestion/transcript-path.js +87 -0
- package/codex-adapter/dist/pd-hook.d.ts +9 -0
- package/codex-adapter/dist/pd-hook.js +159 -0
- package/codex-adapter/dist/tool-semantics.d.ts +20 -0
- package/codex-adapter/dist/tool-semantics.js +27 -0
- package/codex-adapter/dist/worker/workspace-worker.d.ts +59 -0
- package/codex-adapter/dist/worker/workspace-worker.js +270 -0
- package/codex-adapter/package.json +52 -0
- 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 +32 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +198 -2
- package/dist/installer.js.map +1 -1
- package/dist/installers/codex-host-installer.d.ts.map +1 -1
- package/dist/installers/codex-host-installer.js +5 -3
- package/dist/installers/codex-host-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 +4 -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 +217 -0
- package/release-manager/dist/installer.d.ts.map +1 -0
- package/release-manager/dist/installer.js +2451 -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 +496 -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 +79 -0
package/dist/installer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync, rmSync, copyFileSync, cpSync, renameSync, chmodSync, symlinkSync } from 'fs';
|
|
2
2
|
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
3
4
|
import fse from 'fs-extra';
|
|
4
5
|
import * as path from 'path';
|
|
5
6
|
import * as http from 'http';
|
|
@@ -12,6 +13,7 @@ import { t } from './i18n.js';
|
|
|
12
13
|
import { generateConfigYamlContent, ExistingConfigVerifyInfraError, validateExistingConfigYamlForPreserve, getConfigYamlPath, readEnabledChannelsFromConfigYaml, getOpenClawDir, getPdDir, getPdRuntimeDir, getInstallManifestPath, getPdRuntimeBackupsDir, getPluginExtDir, getInstalledPluginDir, getInstalledLayoutPackageDir, getPdBackupsDir, getInstalledPdCliDir, getInstalledBinDir, getInstalledConsoleDir, isWindows, } from './mvp-config.js';
|
|
13
14
|
import { getHostInstallers } from './installers/index.js';
|
|
14
15
|
import { mergeInstallManifestWorkspaces, parseInstallManifest } from '@principles/install-layout';
|
|
16
|
+
import { detectOpenClawMainWorkspaceDivergence } from './utils/workspace-divergence.js';
|
|
15
17
|
import { applySkillLanguageSelection } from './skill-language.js';
|
|
16
18
|
import { parseReleaseAssetIdentity, parseReleaseAssetManifest, ReleaseAssetManifestError, verifyReleaseAssetManifestAsync, verifyReleaseAssetTarget, } from './update/release-asset-manifest.js';
|
|
17
19
|
import { appendJournalTransition } from './update/transaction-journal.js';
|
|
@@ -253,6 +255,90 @@ function legacyNpmInstallEnabled() {
|
|
|
253
255
|
const value = process.env.PD_ALLOW_LEGACY_NPM_INSTALL;
|
|
254
256
|
return value === '1' || value === 'true';
|
|
255
257
|
}
|
|
258
|
+
const NPM_DISTRIBUTED_COMPONENTS = [
|
|
259
|
+
['Core', 'core'],
|
|
260
|
+
['Host runtime', 'host-runtime'],
|
|
261
|
+
['Codex adapter', 'codex-adapter'],
|
|
262
|
+
['Plugin', 'plugin'],
|
|
263
|
+
['PD CLI', 'pd-cli'],
|
|
264
|
+
['Console', 'console'],
|
|
265
|
+
['Install layout', 'install-layout'],
|
|
266
|
+
];
|
|
267
|
+
// Components whose install step demands MORE than the generic
|
|
268
|
+
// package.json+dist shape check — the per-component extra files are
|
|
269
|
+
// preflighted here so the form-gate refusal is exact (a truncated package
|
|
270
|
+
// must fail BEFORE any mutation, matching the per-component install
|
|
271
|
+
// requirements instead of discovering them mid-deployment).
|
|
272
|
+
const NPM_DISTRIBUTED_REQUIRED_FILES = {
|
|
273
|
+
'release-manager': ['package.json', path.join('dist', 'update', 'release-manager-authority.js')],
|
|
274
|
+
console: ['package.json', path.join('dist', 'server.js'), path.join('dist', 'web', 'index.html')],
|
|
275
|
+
};
|
|
276
|
+
function releaseAssetPresent(pluginDir) {
|
|
277
|
+
return existsSync(path.join(pluginDir, '_release', 'asset.json'));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Form-gate for the npm-distributed package shape: every bundled component
|
|
281
|
+
* directory must carry its required files. Returns the missing items
|
|
282
|
+
* (empty = complete) so the refusal can name them (rc-3: fail loud with
|
|
283
|
+
* specifics, not a generic "invalid asset"). release-manager and console
|
|
284
|
+
* are checked against their ACTUAL install-time requirements — they are
|
|
285
|
+
* consumed unconditionally during deployment, so a package missing them
|
|
286
|
+
* must be refused before the backup step, not mid-copy (review blocker,
|
|
287
|
+
* PR #1525).
|
|
288
|
+
*/
|
|
289
|
+
function missingNpmDistributedComponents(pluginDir) {
|
|
290
|
+
const missing = [];
|
|
291
|
+
// Components with exact install-time file demands replace the generic
|
|
292
|
+
// package.json+dist check (console appears in both lists — the exact list
|
|
293
|
+
// subsumes the generic one, so dedupe to avoid reporting each miss twice).
|
|
294
|
+
const exactShapeComponents = new Set(Object.keys(NPM_DISTRIBUTED_REQUIRED_FILES));
|
|
295
|
+
const componentDirs = [
|
|
296
|
+
...NPM_DISTRIBUTED_COMPONENTS.map(([, directory]) => directory).filter((directory) => !exactShapeComponents.has(directory)),
|
|
297
|
+
...exactShapeComponents,
|
|
298
|
+
];
|
|
299
|
+
for (const componentDirectory of componentDirs) {
|
|
300
|
+
const componentDir = path.join(pluginDir, componentDirectory);
|
|
301
|
+
const requiredFiles = NPM_DISTRIBUTED_REQUIRED_FILES[componentDirectory]
|
|
302
|
+
?? ['package.json', componentDirectory === 'plugin' ? '' : 'dist'];
|
|
303
|
+
for (const requiredFile of requiredFiles) {
|
|
304
|
+
if (!existsSync(path.join(componentDir, requiredFile))) {
|
|
305
|
+
missing.push(`${componentDirectory}/${requiredFile}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return missing;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Decide which payload shape this package instance carries and whether
|
|
313
|
+
* registry dependency resolution (npm install) is required. Env override
|
|
314
|
+
* first (explicit operator intent), then the physical shape: a present
|
|
315
|
+
* `_release/asset.json` always takes the self-contained path (a present
|
|
316
|
+
* but CORRUPT asset still fails hard inside the preflight — never
|
|
317
|
+
* silently falling back to registry resolution); a package without the
|
|
318
|
+
* release asset but with complete component trees is the npm-distributed
|
|
319
|
+
* shape and resolves dependencies from the registry.
|
|
320
|
+
*/
|
|
321
|
+
export function decideInstallPayloadMode(pluginDir) {
|
|
322
|
+
if (legacyNpmInstallEnabled())
|
|
323
|
+
return 'npm-distributed';
|
|
324
|
+
if (releaseAssetPresent(pluginDir))
|
|
325
|
+
return 'self-contained';
|
|
326
|
+
return 'npm-distributed';
|
|
327
|
+
}
|
|
328
|
+
// Per-run payload mode, set by install() alongside activeHostTarget (same
|
|
329
|
+
// module-level idiom) — prepareComponentDependencies' call sites are the
|
|
330
|
+
// per-component wrappers, which have no natural parameter path from install().
|
|
331
|
+
let activePayloadMode = 'self-contained';
|
|
332
|
+
/**
|
|
333
|
+
* Whether registry dependency resolution (npm install / global root
|
|
334
|
+
* discovery) may run: true for the npm-distributed payload shape and the
|
|
335
|
+
* PD_ALLOW_LEGACY_NPM_INSTALL recovery path. Host installers consume this
|
|
336
|
+
* gate instead of re-reading the env (their concern is payload shape, not
|
|
337
|
+
* the specific env var).
|
|
338
|
+
*/
|
|
339
|
+
export function isNpmDependencyResolutionEnabled() {
|
|
340
|
+
return activePayloadMode === 'npm-distributed';
|
|
341
|
+
}
|
|
256
342
|
/**
|
|
257
343
|
* Supported release assets are self-contained: installation validates the
|
|
258
344
|
* copied component and never resolves dependencies or runs lifecycle scripts.
|
|
@@ -363,7 +449,7 @@ export async function preflightSelfContainedReleaseAsset(assetDir) {
|
|
|
363
449
|
}
|
|
364
450
|
}
|
|
365
451
|
async function prepareComponentDependencies(cwd, componentName) {
|
|
366
|
-
if (
|
|
452
|
+
if (activePayloadMode === 'self-contained') {
|
|
367
453
|
await prepareBundledComponentDependencies(cwd, componentName);
|
|
368
454
|
return;
|
|
369
455
|
}
|
|
@@ -1123,6 +1209,58 @@ function verifyPdCliShim() {
|
|
|
1123
1209
|
})();
|
|
1124
1210
|
return { localOk, globalOk, localPath: localShim, localError };
|
|
1125
1211
|
}
|
|
1212
|
+
/**
|
|
1213
|
+
* PRI-672: the ReleaseManager authority module ships as the release-manager/
|
|
1214
|
+
* payload component (package name create-principles-disciple). Installed to
|
|
1215
|
+
* ~/.pd/runtime so the console's rewritten `create-principles-disciple`
|
|
1216
|
+
* dependency resolves; installConsole creates the resolution link.
|
|
1217
|
+
*/
|
|
1218
|
+
function getInstalledReleaseManagerDir() {
|
|
1219
|
+
return path.join(getPdRuntimeDir(), 'release-manager');
|
|
1220
|
+
}
|
|
1221
|
+
function installBundledReleaseManagerPackage(pluginDir) {
|
|
1222
|
+
const source = path.join(pluginDir, 'release-manager');
|
|
1223
|
+
const destination = getInstalledReleaseManagerDir();
|
|
1224
|
+
if (!existsSync(path.join(source, 'package.json')) || !existsSync(path.join(source, 'dist', 'update', 'release-manager-authority.js'))) {
|
|
1225
|
+
throw new Error('Bundled release-manager component is incomplete (missing package.json or dist/update/release-manager-authority.js). Re-run the installer with a current package.');
|
|
1226
|
+
}
|
|
1227
|
+
rmSync(destination, { recursive: true, force: true });
|
|
1228
|
+
cpSync(source, destination, { recursive: true });
|
|
1229
|
+
}
|
|
1230
|
+
/**
|
|
1231
|
+
* PR #1525 review: the npm-distributed payload ships release-manager/ as
|
|
1232
|
+
* package.json + dist only — no node_modules. Without its own dependencies
|
|
1233
|
+
* (tuf-js / @tufjs/models) the authority module's static import chain
|
|
1234
|
+
* (release-manager → trust-metadata → tuf-js) cannot resolve, and the gap
|
|
1235
|
+
* would only surface later as `installer_missing` in the console. The
|
|
1236
|
+
* self-contained payload ships the bundle-time npm ci node_modules, so
|
|
1237
|
+
* registry resolution runs for the npm-distributed shape only.
|
|
1238
|
+
*/
|
|
1239
|
+
async function installReleaseManagerDependencies() {
|
|
1240
|
+
if (!isNpmDependencyResolutionEnabled())
|
|
1241
|
+
return;
|
|
1242
|
+
await runNpmInstall(getInstalledReleaseManagerDir(), 'ReleaseManager');
|
|
1243
|
+
}
|
|
1244
|
+
/**
|
|
1245
|
+
* PR #1525 review smoke: import the REAL authority module from the installed
|
|
1246
|
+
* tree so a dependency gap fails the install loudly here with a structured
|
|
1247
|
+
* message instead of surfacing as `installer_missing` at console runtime.
|
|
1248
|
+
* Mode-independent — the self-contained payload's shipped node_modules is
|
|
1249
|
+
* proven the same way.
|
|
1250
|
+
*/
|
|
1251
|
+
async function verifyReleaseManagerAuthorityImports() {
|
|
1252
|
+
const authorityPath = path.join(getInstalledReleaseManagerDir(), 'dist', 'update', 'release-manager-authority.js');
|
|
1253
|
+
if (!existsSync(authorityPath)) {
|
|
1254
|
+
throw new Error('Installed release-manager authority module not found — installation is incomplete.');
|
|
1255
|
+
}
|
|
1256
|
+
try {
|
|
1257
|
+
await import(pathToFileURL(authorityPath).href);
|
|
1258
|
+
}
|
|
1259
|
+
catch (error) {
|
|
1260
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
1261
|
+
throw new Error(`ReleaseManager authority module failed to load — its runtime dependencies are incomplete. Re-run the installer to repair the installation. (${detail})`, { cause: error });
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1126
1264
|
function installConsole(consoleDir) {
|
|
1127
1265
|
const consoleSrc = path.join(consoleDir, 'console');
|
|
1128
1266
|
const consoleDest = getInstalledConsoleDir();
|
|
@@ -1149,6 +1287,19 @@ function installConsole(consoleDir) {
|
|
|
1149
1287
|
symlinkSync(path.relative(path.dirname(pluginLinkPath), installedPluginDir()), pluginLinkPath, 'dir');
|
|
1150
1288
|
}
|
|
1151
1289
|
}
|
|
1290
|
+
// PRI-672: console resolves its create-principles-disciple dependency (the
|
|
1291
|
+
// ReleaseManager authority module, rewritten to file:../release-manager by
|
|
1292
|
+
// bundle-plugin.mjs) through this link into ~/.pd/runtime.
|
|
1293
|
+
const releaseManagerLinkPath = path.join(consoleDest, 'node_modules', 'create-principles-disciple');
|
|
1294
|
+
if (!existsSync(releaseManagerLinkPath)) {
|
|
1295
|
+
mkdirSync(path.dirname(releaseManagerLinkPath), { recursive: true });
|
|
1296
|
+
if (isWindows()) {
|
|
1297
|
+
symlinkSync(getInstalledReleaseManagerDir(), releaseManagerLinkPath, 'junction');
|
|
1298
|
+
}
|
|
1299
|
+
else {
|
|
1300
|
+
symlinkSync(path.relative(path.dirname(releaseManagerLinkPath), getInstalledReleaseManagerDir()), releaseManagerLinkPath, 'dir');
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1152
1303
|
}
|
|
1153
1304
|
function getInstalledCoreDir() {
|
|
1154
1305
|
return path.join(getPdRuntimeDir(), 'core');
|
|
@@ -1747,7 +1898,12 @@ export async function install(options, pluginDir, mode = {}) {
|
|
|
1747
1898
|
const quiet = mode.quiet === true;
|
|
1748
1899
|
const nonInteractive = mode.nonInteractive ?? quiet;
|
|
1749
1900
|
activeHostTarget = options.host;
|
|
1750
|
-
|
|
1901
|
+
// Decide the payload shape once: self-contained (release asset) or
|
|
1902
|
+
// npm-distributed (registry-resolved dependencies). A present `_release`
|
|
1903
|
+
// asset keeps the hard preflight; the npm-distributed shape must pass
|
|
1904
|
+
// the component form-gate or fail loud naming what is missing.
|
|
1905
|
+
activePayloadMode = decideInstallPayloadMode(pluginDir);
|
|
1906
|
+
if (activePayloadMode === 'self-contained') {
|
|
1751
1907
|
try {
|
|
1752
1908
|
await preflightSelfContainedReleaseAsset(pluginDir);
|
|
1753
1909
|
}
|
|
@@ -1777,6 +1933,26 @@ export async function install(options, pluginDir, mode = {}) {
|
|
|
1777
1933
|
};
|
|
1778
1934
|
}
|
|
1779
1935
|
}
|
|
1936
|
+
else {
|
|
1937
|
+
if (!quiet)
|
|
1938
|
+
logger.warn('npm-distributed package detected — resolving component dependencies from the npm registry.');
|
|
1939
|
+
const missing = missingNpmDistributedComponents(pluginDir);
|
|
1940
|
+
if (missing.length > 0) {
|
|
1941
|
+
return {
|
|
1942
|
+
success: false,
|
|
1943
|
+
workspaceDir: options.workspaceDir,
|
|
1944
|
+
configYamlPath: getConfigYamlPath(options.workspaceDir),
|
|
1945
|
+
templatesCount: 0,
|
|
1946
|
+
components: { plugin: 'skipped', cli: 'skipped', console: 'skipped' },
|
|
1947
|
+
verification: { features: 'skipped', storyA: 'skipped' },
|
|
1948
|
+
enabledChannels: options.channels,
|
|
1949
|
+
nextAction: 'The package is incomplete — reinstall it: npm cache clear --force && npx create-principles-disciple@latest. No changes were made.',
|
|
1950
|
+
reason: `npm_bundle_incomplete: missing ${missing.join(', ')}`,
|
|
1951
|
+
component: 'Release asset',
|
|
1952
|
+
error: `Bundled components incomplete (missing ${missing.join(', ')}) — the npm package is corrupted or truncated. No changes were made.`,
|
|
1953
|
+
};
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1780
1956
|
// Gateway lock pre-flight: a running gateway holds native-module file handles
|
|
1781
1957
|
// that make the backup rename fail with EPERM. Decide stop/abort/proceed
|
|
1782
1958
|
// BEFORE mutating anything (cli-5: abort/stop-failed paths must not mutate).
|
|
@@ -1922,6 +2098,12 @@ export async function install(options, pluginDir, mode = {}) {
|
|
|
1922
2098
|
installBundledCodexAdapter(pluginDir);
|
|
1923
2099
|
stepIndex++;
|
|
1924
2100
|
installBundledLayoutPackage(pluginDir);
|
|
2101
|
+
if (spinner)
|
|
2102
|
+
updateProgress(spinner, stepIndex, 'Installing release-manager authority module...');
|
|
2103
|
+
installBundledReleaseManagerPackage(pluginDir);
|
|
2104
|
+
await installReleaseManagerDependencies();
|
|
2105
|
+
await verifyReleaseManagerAuthorityImports();
|
|
2106
|
+
stepIndex++;
|
|
1925
2107
|
if (spinner)
|
|
1926
2108
|
updateProgress(spinner, stepIndex, 'Installing plugin...');
|
|
1927
2109
|
await installPluginToStaging(pluginDir, options.language);
|
|
@@ -2012,6 +2194,20 @@ export async function install(options, pluginDir, mode = {}) {
|
|
|
2012
2194
|
updateProgress(spinner, stepIndex, 'Creating config...');
|
|
2013
2195
|
await createConfigFile(options.workspaceDir, options.channels);
|
|
2014
2196
|
stepIndex++;
|
|
2197
|
+
// PRI-686 Fix C: after pinning PD canonical, check OpenClaw's resolved
|
|
2198
|
+
// main-agent workspace against it. Read-only; a divergence means PD
|
|
2199
|
+
// commands and hooks would write to two different state trees.
|
|
2200
|
+
try {
|
|
2201
|
+
const divergence = detectOpenClawMainWorkspaceDivergence(options.workspaceDir);
|
|
2202
|
+
if (divergence.divergent) {
|
|
2203
|
+
logger.warn(`Workspace divergence detected: ${divergence.detail}. ` +
|
|
2204
|
+
`${divergence.nextAction} ` +
|
|
2205
|
+
`Until fixed, OpenClaw sessions in "${divergence.openclawMainWorkspace}" may be unable to record pain signals (needs_evidence).`);
|
|
2206
|
+
}
|
|
2207
|
+
}
|
|
2208
|
+
catch (e) {
|
|
2209
|
+
logger.warn(`OpenClaw workspace divergence check failed (non-fatal): ${e instanceof Error ? e.message : String(e)}`);
|
|
2210
|
+
}
|
|
2015
2211
|
if (spinner)
|
|
2016
2212
|
updateProgress(spinner, stepIndex, 'Initializing PD databases...');
|
|
2017
2213
|
try {
|