create-principles-disciple 1.146.9 → 1.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release/product-identity.json +1 -1
- package/codex-adapter/dist/ingestion/explicit-owner-statement.d.ts +6 -0
- package/codex-adapter/dist/ingestion/explicit-owner-statement.js +6 -0
- package/codex-adapter/dist/pd-hook.js +5 -2
- package/codex-adapter/dist/worker/workspace-worker.d.ts +13 -1
- package/codex-adapter/dist/worker/workspace-worker.js +26 -3
- package/codex-adapter/package.json +1 -1
- package/core/dist/runtime-v2/index.d.ts +2 -2
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +1 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/pain-ingress-payload.d.ts +13 -1
- package/core/dist/runtime-v2/pain-ingress-payload.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-ingress-payload.js +21 -2
- package/core/dist/runtime-v2/pain-ingress-payload.js.map +1 -1
- package/core/dist/runtime-v2/pain-ingress.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-ingress.js +3 -0
- package/core/dist/runtime-v2/pain-ingress.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/confidence-gate.d.ts +35 -0
- package/core/dist/runtime-v2/signal-collector/confidence-gate.d.ts.map +1 -0
- package/core/dist/runtime-v2/signal-collector/confidence-gate.js +48 -0
- package/core/dist/runtime-v2/signal-collector/confidence-gate.js.map +1 -0
- package/core/dist/runtime-v2/signal-collector/index.d.ts +1 -0
- package/core/dist/runtime-v2/signal-collector/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/index.js +1 -0
- package/core/dist/runtime-v2/signal-collector/index.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/keyword-stage.d.ts +4 -6
- package/core/dist/runtime-v2/signal-collector/keyword-stage.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/keyword-stage.js +100 -9
- package/core/dist/runtime-v2/signal-collector/keyword-stage.js.map +1 -1
- package/core/dist/runtime-v2/store/context/sqlite-context-assembler.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/context/sqlite-context-assembler.js +8 -4
- package/core/dist/runtime-v2/store/context/sqlite-context-assembler.js.map +1 -1
- package/core/package.json +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +52 -1
- package/dist/installer.js.map +1 -1
- package/dist/installers/mcp-registration-conflict.d.ts +35 -0
- package/dist/installers/mcp-registration-conflict.d.ts.map +1 -0
- package/dist/installers/mcp-registration-conflict.js +559 -0
- package/dist/installers/mcp-registration-conflict.js.map +1 -0
- package/dist/installers/openclaw-host-installer.d.ts.map +1 -1
- package/dist/installers/openclaw-host-installer.js +20 -0
- package/dist/installers/openclaw-host-installer.js.map +1 -1
- package/dist/installers/workbuddy-host-installer.d.ts.map +1 -1
- package/dist/installers/workbuddy-host-installer.js +124 -2
- package/dist/installers/workbuddy-host-installer.js.map +1 -1
- package/dist/mcp-server-layout-compat.d.ts +18 -0
- package/dist/mcp-server-layout-compat.d.ts.map +1 -0
- package/dist/mcp-server-layout-compat.js +22 -0
- package/dist/mcp-server-layout-compat.js.map +1 -0
- package/host-runtime/dist/governance-signal-admission.d.ts +147 -4
- package/host-runtime/dist/governance-signal-admission.js +1065 -60
- package/host-runtime/dist/index.d.ts +2 -0
- package/host-runtime/dist/index.js +2 -0
- package/host-runtime/dist/signal-classifier.d.ts +46 -0
- package/host-runtime/dist/signal-classifier.js +167 -0
- package/host-runtime/dist/signal-stage2-cycle.d.ts +42 -0
- package/host-runtime/dist/signal-stage2-cycle.js +184 -0
- package/host-runtime/package.json +1 -1
- package/install-layout/dist/index.d.ts +15 -0
- package/install-layout/dist/index.js +10 -0
- package/install-layout/package.json +1 -1
- package/package.json +9 -7
- package/pd-cli/dist/commands/health-codex.d.ts.map +1 -1
- package/pd-cli/dist/commands/health-codex.js +12 -0
- package/pd-cli/dist/commands/health-codex.js.map +1 -1
- package/pd-cli/dist/commands/health-mcp.d.ts +74 -0
- package/pd-cli/dist/commands/health-mcp.d.ts.map +1 -0
- package/pd-cli/dist/commands/health-mcp.js +723 -0
- package/pd-cli/dist/commands/health-mcp.js.map +1 -0
- package/pd-cli/dist/commands/health.d.ts +2 -0
- package/pd-cli/dist/commands/health.d.ts.map +1 -1
- package/pd-cli/dist/commands/health.js +11 -6
- package/pd-cli/dist/commands/health.js.map +1 -1
- package/pd-mcp-server/dist/budget.d.ts +15 -0
- package/pd-mcp-server/dist/budget.js +19 -0
- package/pd-mcp-server/dist/deadline.d.ts +75 -0
- package/pd-mcp-server/dist/deadline.js +136 -0
- package/pd-mcp-server/dist/envelope.d.ts +52 -0
- package/pd-mcp-server/dist/envelope.js +63 -0
- package/pd-mcp-server/dist/index.d.ts +10 -0
- package/pd-mcp-server/dist/index.js +76 -0
- package/pd-mcp-server/dist/logging.d.ts +12 -0
- package/pd-mcp-server/dist/logging.js +42 -0
- package/pd-mcp-server/dist/server.d.ts +90 -0
- package/pd-mcp-server/dist/server.js +178 -0
- package/pd-mcp-server/dist/version.d.ts +13 -0
- package/pd-mcp-server/dist/version.js +13 -0
- package/pd-mcp-server/dist/workspace.d.ts +23 -0
- package/pd-mcp-server/dist/workspace.js +77 -0
- package/pd-mcp-server/package.json +49 -0
- package/plugin/dist/bundle.js +414 -412
- package/plugin/dist/core/mcp-binding.d.ts +41 -0
- package/plugin/dist/index.d.ts +33 -0
- package/plugin/dist/openclaw.plugin.json +10 -1
- package/plugin/dist/utils/workspace-resolver.d.ts +17 -0
- package/plugin/openclaw.plugin.json +10 -1
- package/plugin/package.json +2 -1
- package/release-manager/dist/installer.js +52 -1
- package/release-manager/dist/installers/mcp-registration-conflict.js +559 -0
- package/release-manager/dist/installers/openclaw-host-installer.js +20 -0
- package/release-manager/dist/installers/workbuddy-host-installer.js +124 -2
- package/release-manager/dist/mcp-server-layout-compat.js +22 -0
- package/release-manager/package.json +7 -5
- package/workbuddy-adapter/dist/pd-hook.js +28 -5
- package/workbuddy-adapter/dist/worker/workspace-worker.d.ts +6 -1
- package/workbuddy-adapter/dist/worker/workspace-worker.js +24 -3
- package/workbuddy-adapter/package.json +1 -1
- package/workbuddy-adapter/plugin/.codebuddy-plugin/plugin.json +2 -2
- package/workbuddy-adapter/plugin/.mcp.json +10 -0
- package/workbuddy-adapter/plugin/mcp/launcher.cjs +347 -0
|
@@ -22,6 +22,7 @@ import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
|
22
22
|
import * as path from 'path';
|
|
23
23
|
import * as os from 'os';
|
|
24
24
|
import { validateOpenClawConfig } from '../mvp-config.js';
|
|
25
|
+
import { classifyOpenClawConfigObject } from './mcp-registration-conflict.js';
|
|
25
26
|
// PRI-343: Keep in sync with @principles/core CONVERSATION_ACCESS_CONFIG_KEY
|
|
26
27
|
const CONVERSATION_ACCESS_CONFIG_KEY = 'allowConversationAccess';
|
|
27
28
|
function isRecord(value) {
|
|
@@ -134,6 +135,25 @@ export class OpenClawHostInstaller {
|
|
|
134
135
|
}
|
|
135
136
|
// rc-2: isRecord narrows config to Record<string, unknown> without `as` cast.
|
|
136
137
|
const configObj = isRecord(config) ? { ...config } : {};
|
|
138
|
+
// SPEC §7.5/§11.3: the operator `mcp.servers["pd-recall"]` tier overrides
|
|
139
|
+
// plugin-owned MCP servers. A same-name server owned by someone else must
|
|
140
|
+
// STOP the install BEFORE any write — never be overwritten, never be
|
|
141
|
+
// discovered after the fact and "rolled back".
|
|
142
|
+
// Ownership is proven by PD's own extension root OR by the launcher's
|
|
143
|
+
// content stamps — never by the `mcp/launcher.cjs` file NAME alone.
|
|
144
|
+
const mcpConflict = classifyOpenClawConfigObject(configObj, configPath, {
|
|
145
|
+
pdLauncherRoots: [path.join(configDir, 'extensions', 'principles-disciple')],
|
|
146
|
+
});
|
|
147
|
+
if (!mcpConflict.ok) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
hostId: this.hostId,
|
|
151
|
+
configPath,
|
|
152
|
+
configAction: 'skipped',
|
|
153
|
+
reason: mcpConflict.reason,
|
|
154
|
+
nextAction: mcpConflict.nextAction,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
137
157
|
// Ensure plugins.allow includes principles-disciple
|
|
138
158
|
if (!configObj.plugins)
|
|
139
159
|
configObj.plugins = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-host-installer.js","sourceRoot":"","sources":["../../src/installers/openclaw-host-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AASzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-host-installer.js","sourceRoot":"","sources":["../../src/installers/openclaw-host-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbuddy-host-installer.d.ts","sourceRoot":"","sources":["../../src/installers/workbuddy-host-installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workbuddy-host-installer.d.ts","sourceRoot":"","sources":["../../src/installers/workbuddy-host-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ import * as yaml from 'js-yaml';
|
|
|
48
48
|
import semver from 'semver';
|
|
49
49
|
import { getInstallLayoutPaths, getWorkbuddyWorkspaceDir, installManifestHostsForPersist, mergeInstallManifestWorkspaces, parseInstallManifest, INSTALL_LAYOUT_VERSION, } from '@principles/install-layout';
|
|
50
50
|
import { atomicReplaceTextFile, errnoCode } from '../utils/config-file-io.js';
|
|
51
|
+
import { checkMcpRegistrationConflict } from './mcp-registration-conflict.js';
|
|
52
|
+
import { resolveMcpServerDir, resolveMcpServerEntry } from '../mcp-server-layout-compat.js';
|
|
51
53
|
import { getHomeDir, generateConfigYamlContent, getConfigYamlPath, resolveDefaultModelForProvider, isValidHttpBaseUrl } from '../mvp-config.js';
|
|
52
54
|
// Type-only import from @principles/core — erased at compile time; this
|
|
53
55
|
// package ships self-contained without @principles/core (PRI-625/PRI-669).
|
|
@@ -67,6 +69,7 @@ const WORKBUDDY_REQUIRED_SKILLS = ['pd-cli-operator', 'pd-pain-signal', 'pd-revi
|
|
|
67
69
|
const WORKBUDDY_PAYLOAD_FILES = [
|
|
68
70
|
path.join('.codebuddy-plugin', 'plugin.json'),
|
|
69
71
|
path.join('hooks', 'hooks.json'),
|
|
72
|
+
path.join('mcp', 'launcher.cjs'),
|
|
70
73
|
path.join('scripts', 'wrapper.cjs'),
|
|
71
74
|
path.join('scripts', 'pd-control.cjs'),
|
|
72
75
|
...WORKBUDDY_REQUIRED_SKILLS.map((skill) => path.join('skills', skill, 'SKILL.md')),
|
|
@@ -84,6 +87,59 @@ const GOVERNANCE_INIT_TIMEOUT_MS = 180_000;
|
|
|
84
87
|
function isRecord(value) {
|
|
85
88
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
86
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Atomic replace for the binding file (same discipline as the OpenClaw plugin
|
|
92
|
+
* writer and `$pd-control setup`): a reader must never observe a truncated
|
|
93
|
+
* binding. No generic config subsystem — one helper next to its only use.
|
|
94
|
+
*/
|
|
95
|
+
function writeFileAtomicSync(file, contents) {
|
|
96
|
+
const temp = path.join(path.dirname(file), `.${path.basename(file)}.${process.pid}.tmp`);
|
|
97
|
+
try {
|
|
98
|
+
writeFileSync(temp, contents, 'utf-8');
|
|
99
|
+
renameSync(temp, file);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
try {
|
|
103
|
+
rmSync(temp, { force: true });
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
/* best-effort cleanup of our own temp file */
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Cache-binding comparison for the idempotent path. `writtenAt` is a
|
|
113
|
+
* per-install timestamp, so comparing raw bytes would force a cache refresh
|
|
114
|
+
* on every run; comparing the rest proves the launcher will read the same
|
|
115
|
+
* workspace/entry/versions the marketplace copy declares. Absent on both
|
|
116
|
+
* sides is a match (no MCP payload); absent on one side is drift.
|
|
117
|
+
*/
|
|
118
|
+
function mcpBindingMatches(sourceDir, cacheDir) {
|
|
119
|
+
const bindingFile = 'mcp-binding.json';
|
|
120
|
+
const read = (dir) => {
|
|
121
|
+
const file = path.join(dir, bindingFile);
|
|
122
|
+
if (!existsSync(file))
|
|
123
|
+
return undefined;
|
|
124
|
+
try {
|
|
125
|
+
const parsed = JSON.parse(readFileSync(file, 'utf-8'));
|
|
126
|
+
if (!isRecord(parsed))
|
|
127
|
+
return null;
|
|
128
|
+
const { writtenAt: _writtenAt, ...rest } = parsed;
|
|
129
|
+
return rest;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const source = read(sourceDir);
|
|
136
|
+
const cached = read(cacheDir);
|
|
137
|
+
if (source === undefined && cached === undefined)
|
|
138
|
+
return true;
|
|
139
|
+
if (source === undefined || cached === undefined || source === null || cached === null)
|
|
140
|
+
return false;
|
|
141
|
+
return JSON.stringify(source) === JSON.stringify(cached);
|
|
142
|
+
}
|
|
87
143
|
/** Native v2 stores scope records as an array; old PD installs used one object. */
|
|
88
144
|
function userInstalledPluginRecord(value) {
|
|
89
145
|
const records = Array.isArray(value) ? value : [value];
|
|
@@ -1087,6 +1143,47 @@ function materializeMarketplace(marketplaceRoot, pluginDir) {
|
|
|
1087
1143
|
// sources that escape it ("Path escapes marketplace root", frozen facts).
|
|
1088
1144
|
cpSync(pluginDir, path.join(marketplaceRoot, WORKBUDDY_PLUGIN_NAME), { recursive: true });
|
|
1089
1145
|
}
|
|
1146
|
+
/**
|
|
1147
|
+
* Gate 4 (PRI-1071): write the launcher binding into the marketplace payload
|
|
1148
|
+
* copy — the frozen governance workspace (getWorkbuddyWorkspaceDir SSoT) and
|
|
1149
|
+
* the canonical installed MCP server entry. Written only when the server
|
|
1150
|
+
* component exists (an older runtime without it stays honestly absent; the
|
|
1151
|
+
* launcher then fails closed with binding_missing — equally recoverable by
|
|
1152
|
+
* re-running the installer). A failure degrades to a structured note (G4-07:
|
|
1153
|
+
* MCP unavailability must not break the WorkBuddy host install).
|
|
1154
|
+
*/
|
|
1155
|
+
function writeWorkbuddyMcpBinding(marketplaceRoot, homeDir) {
|
|
1156
|
+
try {
|
|
1157
|
+
const layout = getInstallLayoutPaths(homeDir);
|
|
1158
|
+
// Gate 4 P2: the launcher validates serverEntry against this recorded
|
|
1159
|
+
// runtime root + the Install Layout SSoT component dir, so the binding
|
|
1160
|
+
// cannot point the host at arbitrary JavaScript.
|
|
1161
|
+
const serverEntry = resolveMcpServerEntry(layout);
|
|
1162
|
+
if (!existsSync(serverEntry))
|
|
1163
|
+
return { ok: false, reason: 'mcp_server_component_missing' };
|
|
1164
|
+
let mcpServerVersion = 'unknown';
|
|
1165
|
+
try {
|
|
1166
|
+
const manifest = JSON.parse(readFileSync(path.join(resolveMcpServerDir(layout), 'package.json'), 'utf-8'));
|
|
1167
|
+
if (typeof manifest.version === 'string')
|
|
1168
|
+
mcpServerVersion = manifest.version;
|
|
1169
|
+
}
|
|
1170
|
+
catch { /* version stays unknown (rc-3: never coerce) */ }
|
|
1171
|
+
const binding = {
|
|
1172
|
+
schemaVersion: 'pd.mcp-binding.v1',
|
|
1173
|
+
host: 'workbuddy',
|
|
1174
|
+
workspaceDir: getWorkbuddyWorkspaceDir(homeDir),
|
|
1175
|
+
runtimeDir: layout.runtimeDir,
|
|
1176
|
+
serverEntry,
|
|
1177
|
+
versions: { mcpServer: mcpServerVersion },
|
|
1178
|
+
writtenAt: new Date().toISOString(),
|
|
1179
|
+
};
|
|
1180
|
+
writeFileAtomicSync(path.join(marketplaceRoot, WORKBUDDY_PLUGIN_NAME, 'mcp-binding.json'), JSON.stringify(binding, null, 2) + '\n');
|
|
1181
|
+
return { ok: true };
|
|
1182
|
+
}
|
|
1183
|
+
catch (error) {
|
|
1184
|
+
return { ok: false, reason: `write_failed:${error instanceof Error ? error.message.slice(0, 120) : String(error).slice(0, 120)}` };
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1090
1187
|
export class WorkBuddyHostInstaller {
|
|
1091
1188
|
hostId = 'workbuddy';
|
|
1092
1189
|
deps;
|
|
@@ -1209,6 +1306,26 @@ export class WorkBuddyHostInstaller {
|
|
|
1209
1306
|
};
|
|
1210
1307
|
}
|
|
1211
1308
|
const { payload } = payloadFind;
|
|
1309
|
+
// 3b. SPEC §7.5/§11.3: a same-name user-level MCP server must stop the
|
|
1310
|
+
// install BEFORE any marketplace/cache/registration write. The check is
|
|
1311
|
+
// read-only and leaves the offending file untouched.
|
|
1312
|
+
const mcpConflict = checkMcpRegistrationConflict('workbuddy', {
|
|
1313
|
+
homeDir: this.deps.homeDir(),
|
|
1314
|
+
workbuddyConfigDir: p.configDir,
|
|
1315
|
+
// Ownership is proven by the payload PD ships OR by launcher content
|
|
1316
|
+
// stamps — never by the `mcp/launcher.cjs` file NAME alone.
|
|
1317
|
+
pdLauncherRoots: [payload.pluginDir],
|
|
1318
|
+
});
|
|
1319
|
+
if (!mcpConflict.ok) {
|
|
1320
|
+
return {
|
|
1321
|
+
success: false,
|
|
1322
|
+
hostId: this.hostId,
|
|
1323
|
+
configPath: p.settingsPath,
|
|
1324
|
+
configAction: 'skipped',
|
|
1325
|
+
reason: mcpConflict.reason,
|
|
1326
|
+
nextAction: mcpConflict.nextAction,
|
|
1327
|
+
};
|
|
1328
|
+
}
|
|
1212
1329
|
// 4. Materialize the PD-owned marketplace (source stays inside its root).
|
|
1213
1330
|
try {
|
|
1214
1331
|
materializeMarketplace(p.marketplaceRoot, payload.pluginDir);
|
|
@@ -1223,6 +1340,10 @@ export class WorkBuddyHostInstaller {
|
|
|
1223
1340
|
nextAction: `Check permissions under ${path.dirname(p.marketplaceRoot)} and re-run the installer.`,
|
|
1224
1341
|
};
|
|
1225
1342
|
}
|
|
1343
|
+
// 4b. Gate 4 (PRI-1071): bind the pd-recall MCP launcher to the frozen
|
|
1344
|
+
// governance workspace. Degrades to a note — the host install itself is
|
|
1345
|
+
// unaffected when the MCP component is missing or the write fails.
|
|
1346
|
+
const mcpBinding = writeWorkbuddyMcpBinding(p.marketplaceRoot, this.deps.homeDir());
|
|
1226
1347
|
// 5. Register: engine commands first; observable direct-write fallback.
|
|
1227
1348
|
const registration = this.registerPlugin(details, payload.version);
|
|
1228
1349
|
if (!registration.ok) {
|
|
@@ -1328,7 +1449,7 @@ export class WorkBuddyHostInstaller {
|
|
|
1328
1449
|
keywordPainEnabled: !governanceDefaults.keywordExplicitOff,
|
|
1329
1450
|
configPath: governanceDefaults.configPath,
|
|
1330
1451
|
},
|
|
1331
|
-
reason: `Registered ${WORKBUDDY_PLUGIN_KEY} via ${registration.mode}${registration.mode === 'engine' ? '' : ` (engine unreachable: ${registration.engineNote})`}. Governance workspace initialized at ${p.governanceDir}${governance.dbInit === 'skipped' ? ` (${governance.note})` : ''}.${profileNote}${governanceDefaultsNote}`,
|
|
1452
|
+
reason: `Registered ${WORKBUDDY_PLUGIN_KEY} via ${registration.mode}${registration.mode === 'engine' ? '' : ` (engine unreachable: ${registration.engineNote})`}. Governance workspace initialized at ${p.governanceDir}${governance.dbInit === 'skipped' ? ` (${governance.note})` : ''}.${profileNote}${governanceDefaultsNote}${mcpBinding.ok ? ' pd-recall MCP binding written.' : ` pd-recall MCP binding skipped (${mcpBinding.reason ?? 'unknown'}).`}`,
|
|
1332
1453
|
// PRI-1063 copy (single-line flat-key flow mapping) carried over from
|
|
1333
1454
|
// main; the "Existing workspaces retain their prior settings" sentence is
|
|
1334
1455
|
// deliberately dropped — PRI-1064 turns governance ON for those
|
|
@@ -1497,7 +1618,8 @@ export class WorkBuddyHostInstaller {
|
|
|
1497
1618
|
return false;
|
|
1498
1619
|
const sourceDir = path.join(p.marketplaceRoot, WORKBUDDY_PLUGIN_NAME);
|
|
1499
1620
|
try {
|
|
1500
|
-
|
|
1621
|
+
const filesMatch = WORKBUDDY_PAYLOAD_FILES.every((file) => readFileSync(path.join(sourceDir, file)).equals(readFileSync(path.join(cacheDir, file))));
|
|
1622
|
+
return filesMatch && mcpBindingMatches(sourceDir, cacheDir);
|
|
1501
1623
|
}
|
|
1502
1624
|
catch {
|
|
1503
1625
|
return false;
|