@getmarrow/install 0.1.44 → 0.1.45

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/README.md CHANGED
@@ -91,7 +91,18 @@ npx @getmarrow/install controller stop
91
91
 
92
92
  Persistent controller lifecycle is currently Linux-only. On macOS or Windows, activation still installs and verifies the supported hooks without starting or signaling a background process; run `npx @getmarrow/install sidecar` under an owner-managed service and pass `--no-controller`. The controller does not silently upgrade packages, change governance policy, rotate credentials, or modify unrelated project configuration.
93
93
 
94
- ## What's New in v0.1.44
94
+ ## What's New in v0.1.45
95
+
96
+ v0.1.45 pins the one-command setup path to the published receipt-safe MCP release:
97
+
98
+ - generated MCP setup, launch, and certified hook commands pin current MCP `3.9.62`;
99
+ - adapter provenance records exact MCP source `c025d720af8fe9b16702ba764ff85c822adc2a26` and the live public registry integrity;
100
+ - MCP versions older than `3.9.62` are treated as stale so new installs receive the fail-closed runtime authorization contract;
101
+ - `npx @getmarrow/install@latest update` is the owner-approved one-command refresh of certified install/SDK/MCP pins; doctor and status print an owner notice so agents can tell the user to update;
102
+ - self-test and governed-runner requests report install, SDK, and MCP versions together so the API can notify on any stale package;
103
+ - SDK `3.7.56` detection and operator-approved upgrade rules are unchanged.
104
+
105
+ ## Previous: v0.1.44
95
106
 
96
107
  v0.1.44 restores exact package-chain detection and current MCP setup truth:
97
108
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getmarrow/install",
3
- "version": "0.1.44",
3
+ "version": "0.1.45",
4
4
  "description": "Universal installer and governed runner for Marrow agent fleets.",
5
5
  "bin": {
6
6
  "marrow-install": "bin/marrow-install.js"
@@ -21,6 +21,7 @@ const {
21
21
  stopGovernanceController,
22
22
  } = require('./controller-manager');
23
23
  const {
24
+ ADAPTER_PROVENANCE,
24
25
  HARNESS_CAPABILITY_REGISTRY,
25
26
  applyPlan,
26
27
  buildPlan,
@@ -482,6 +483,9 @@ function headers(options) {
482
483
  'X-Marrow-Client': sourceClient(options.client),
483
484
  'X-Marrow-Package': '@getmarrow/install',
484
485
  'X-Marrow-Package-Version': INSTALLER_PACKAGE_VERSION,
486
+ 'X-Marrow-Install-Version': INSTALLER_PACKAGE_VERSION,
487
+ 'X-Marrow-SDK-Version': ADAPTER_PROVENANCE.sdk.version,
488
+ 'X-Marrow-MCP-Version': ADAPTER_PROVENANCE.mcp.version,
485
489
  'User-Agent': '@getmarrow/install governed-runner',
486
490
  };
487
491
  return h;
@@ -1006,7 +1010,11 @@ function statusPanel(status = {}) {
1006
1010
  if (update && (update.update_available === true || update.version_status === 'unknown' || notification === 'unknown' || notification === 'version_unknown' || priority === 'security_required')) {
1007
1011
  lines.push(`Client update: ${displayText(priority, 32)}; installed=${displayText(update.installed_version || update.current_version || 'unknown', 32)}; latest=${displayText(update.latest_version || 'unknown', 32)}`);
1008
1012
  lines.push('Automatic notification: yes; automatic local mutation: no; operator policy applies.');
1009
- if (update.update_command || update.exact_update_command) lines.push(`Update: ${displayText(update.update_command || update.exact_update_command, 240)}`);
1013
+ if (update.owner_notice) lines.push(`Tell owner: ${displayText(update.owner_notice, 240)}`);
1014
+ if (update.agent_instruction) lines.push(`Agent instruction: ${displayText(update.agent_instruction, 240)}`);
1015
+ if (update.auto_update_command || update.update_command || update.exact_update_command) {
1016
+ lines.push(`Update: ${displayText(update.auto_update_command || update.update_command || update.exact_update_command, 240)}`);
1017
+ }
1010
1018
  if (update.verification_command || update.exact_verification_command) lines.push(`Verify: ${displayText(update.verification_command || update.exact_verification_command, 240)}`);
1011
1019
  } else {
1012
1020
  lines.push('Client update: current or unavailable.');
package/src/installer.js CHANGED
@@ -8,9 +8,9 @@ const { controllerStatus, controllerSupportedPlatform, ensureGovernanceControlle
8
8
  const DEFAULT_BASE_URL = 'https://api.getmarrow.ai';
9
9
  const MARROW_BLOCK_START = '<!-- marrow:passive-start -->';
10
10
  const MARROW_BLOCK_END = '<!-- marrow:passive-end -->';
11
- const MCP_ADAPTER_VERSION = '3.9.61';
12
- const MCP_ADAPTER_SOURCE_SHA = 'ebe06a5c78895e70ceea7b7383ac31d5aaacbd41';
13
- const MCP_ADAPTER_INTEGRITY = 'sha512-6ojhKztiJp8/mZecuSnt+kiEe41COPBOjrka9j+r+yFacNl4uapW9quq/wEVo5SxuDmxolFIBaqkX6xIdaD2rA==';
11
+ const MCP_ADAPTER_VERSION = '3.9.62';
12
+ const MCP_ADAPTER_SOURCE_SHA = 'c025d720af8fe9b16702ba764ff85c822adc2a26';
13
+ const MCP_ADAPTER_INTEGRITY = 'sha512-XwvwptwMHnH2cchrt242iQGng8t8OVDHGYORHmD04cfSn2NQoH1Y3bPoxkvlf/j/ujPtqSPpT+uZGEFNRpecZQ==';
14
14
  const SDK_ADAPTER_VERSION = '3.7.56';
15
15
  const SDK_ADAPTER_INTEGRITY = 'sha512-mllohsI4DHpcVuEL58303kpGwS/pl/HMZ99mGNo3swYLomZwwfVzcner9Bn+p0b72989NOpS1l2frY/vra1gfQ==';
16
16
  const SDK_ADAPTER_TARBALL = `https://registry.npmjs.org/@getmarrow/sdk/-/sdk-${SDK_ADAPTER_VERSION}.tgz`;
@@ -277,9 +277,10 @@ function parseArgs(argv) {
277
277
  options.selfTest = true;
278
278
  }
279
279
  else if (arg === '--yes' || arg === '-y') options.yes = true;
280
- else if (arg === '--repair' || arg === 'repair') {
280
+ else if (arg === '--repair' || arg === 'repair' || arg === 'update' || arg === '--update') {
281
281
  options.repair = true;
282
282
  options.yes = true;
283
+ options.update = true;
283
284
  }
284
285
  else if (arg === '--dry-run') options.dryRun = true;
285
286
  else if (arg === '--doctor' || arg === 'doctor' || arg === 'check') options.doctor = true;
@@ -328,6 +329,7 @@ function usage() {
328
329
  npx @getmarrow/install activate
329
330
  npx @getmarrow/install --yes
330
331
  npx @getmarrow/install --repair
332
+ npx @getmarrow/install update
331
333
  npx @getmarrow/install doctor
332
334
  npx @getmarrow/install --mcp --yes
333
335
  npx @getmarrow/install --sdk --yes
@@ -337,6 +339,7 @@ Options:
337
339
  --dry-run Print planned changes without writing
338
340
  --doctor Check install health without writing
339
341
  --repair Write missing hooks/config, then run self-test and status check
342
+ update Same as --repair: refresh certified MCP/SDK/install pins after owner approval
340
343
  --yes, -y Write detected config files
341
344
  --mode <mode> auto, mcp, sdk, both, or md
342
345
  --key <key> Marrow API key for self-test. Prefer MARROW_API_KEY because CLI args can appear in process listings.
@@ -1258,6 +1261,9 @@ async function runSelfTest(options) {
1258
1261
  'x-marrow-client': options.client || sourceClient(),
1259
1262
  'x-marrow-package': '@getmarrow/install',
1260
1263
  'x-marrow-package-version': INSTALLER_ADAPTER_VERSION,
1264
+ 'x-marrow-install-version': INSTALLER_ADAPTER_VERSION,
1265
+ 'x-marrow-sdk-version': SDK_ADAPTER_VERSION,
1266
+ 'x-marrow-mcp-version': MCP_ADAPTER_VERSION,
1261
1267
  };
1262
1268
  if (options.agentId) headers['x-marrow-agent-id'] = options.agentId;
1263
1269
 
@@ -1627,7 +1633,11 @@ function printReport(report) {
1627
1633
  process.stdout.write(`- latest: ${update.latest_version || 'unknown'}\n`);
1628
1634
  process.stdout.write('- automatic notification: yes\n');
1629
1635
  process.stdout.write('- automatic local mutation: no; operator policy applies\n');
1630
- if (update.update_command || update.exact_update_command) process.stdout.write(`- update: ${update.update_command || update.exact_update_command}\n`);
1636
+ if (update.owner_notice) process.stdout.write(`- tell owner: ${update.owner_notice}\n`);
1637
+ if (update.agent_instruction) process.stdout.write(`- agent instruction: ${update.agent_instruction}\n`);
1638
+ if (update.update_command || update.exact_update_command || update.auto_update_command) {
1639
+ process.stdout.write(`- update: ${update.auto_update_command || update.update_command || update.exact_update_command}\n`);
1640
+ }
1631
1641
  if (update.verification_command || update.exact_verification_command) process.stdout.write(`- verify: ${update.verification_command || update.exact_verification_command}\n`);
1632
1642
  }
1633
1643
  if (report.selfTest.first_value_signal) {