@getmarrow/install 0.1.45 → 0.1.46

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.45
94
+ ## What's New in v0.1.46
95
+
96
+ v0.1.46 makes default install cover every workspace honestly:
97
+
98
+ - auto mode now writes MCP plus agent instructions in every project, and the SDK passive runtime whenever Node is present;
99
+ - Claude native hooks still install only when `.claude` is present; detected Cursor workspaces also get `.cursor/mcp.json`;
100
+ - Hermes, OpenClaw, and custom hosts stay event-contract only and are not claimed as native interception;
101
+ - generated MCP setup, launch, and certified hook commands pin current MCP `3.9.64` from source `ed8293165247e89161045c7fbf68aeee4d51c6da`;
102
+ - SDK detection and operator-approved upgrade rules pin exact public `3.7.59`;
103
+ - empty token savings stay zero until observed model usage lands.
104
+
105
+ ## Previous: v0.1.45
95
106
 
96
107
  v0.1.45 pins the one-command setup path to the published receipt-safe MCP release:
97
108
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getmarrow/install",
3
- "version": "0.1.45",
3
+ "version": "0.1.46",
4
4
  "description": "Universal installer and governed runner for Marrow agent fleets.",
5
5
  "bin": {
6
6
  "marrow-install": "bin/marrow-install.js"
package/src/installer.js CHANGED
@@ -8,11 +8,11 @@ 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.62';
12
- const MCP_ADAPTER_SOURCE_SHA = 'c025d720af8fe9b16702ba764ff85c822adc2a26';
13
- const MCP_ADAPTER_INTEGRITY = 'sha512-XwvwptwMHnH2cchrt242iQGng8t8OVDHGYORHmD04cfSn2NQoH1Y3bPoxkvlf/j/ujPtqSPpT+uZGEFNRpecZQ==';
14
- const SDK_ADAPTER_VERSION = '3.7.56';
15
- const SDK_ADAPTER_INTEGRITY = 'sha512-mllohsI4DHpcVuEL58303kpGwS/pl/HMZ99mGNo3swYLomZwwfVzcner9Bn+p0b72989NOpS1l2frY/vra1gfQ==';
11
+ const MCP_ADAPTER_VERSION = '3.9.64';
12
+ const MCP_ADAPTER_SOURCE_SHA = 'ed8293165247e89161045c7fbf68aeee4d51c6da';
13
+ const MCP_ADAPTER_INTEGRITY = 'sha512-D654txYXhEciNl3xqm3o5TdH8S3rkPfuVcnoQqSjc1dqAGKbq90BuyZqcUVMxO6dkSbQ3QS++Sg++zhySqSN/w==';
14
+ const SDK_ADAPTER_VERSION = '3.7.59';
15
+ const SDK_ADAPTER_INTEGRITY = 'sha512-Ba4kqOYP1tEfMoiz4ddrOP86Q5Q1ANDQpZ8rvDJwh5BLaSVKamSbyOUAQ9lNSt7S5IzlhhTHO5HrOQq35xahDg==';
16
16
  const SDK_ADAPTER_TARBALL = `https://registry.npmjs.org/@getmarrow/sdk/-/sdk-${SDK_ADAPTER_VERSION}.tgz`;
17
17
  const MCP_PACKAGE_SPEC = `@getmarrow/mcp@${MCP_ADAPTER_VERSION}`;
18
18
  const ADAPTER_PROVENANCE = Object.freeze({
@@ -619,9 +619,10 @@ function passiveInstructions() {
619
619
 
620
620
  Marrow should run passively after install:
621
621
 
622
- - Use MCP hooks when available: \`npx -y --package=@getmarrow/mcp@latest marrow-mcp setup\`.
622
+ - Use MCP plus these instructions in every workspace: \`npx -y --package=@getmarrow/mcp@latest marrow-mcp setup\`.
623
623
  - Use SDK passive runtime in owned Node processes: \`createPassiveRuntime().install()\`.
624
- - Keep passive token/model usage proof enabled so Marrow can show token, cost, latency, and workflow savings after real work completes.
624
+ - Native Claude hooks install only when \`.claude\` is present. Cursor, Composer, Cline, and Windsurf get MCP tools on demand. Codex, Grok, Gemini, and similar CLI harnesses use the governed wrapper. Hermes, OpenClaw, and custom hosts need a bounded event adapter.
625
+ - Keep passive token/model usage proof enabled. Empty savings stay zero until observed model usage lands. Do not invent token, cost, or time savings.
625
626
  - Before risky work, use Marrow's decision brief or passive prompt hook.
626
627
  - After meaningful work, record the outcome so future agents learn from it.
627
628
  - After Marrow blocks, warns, or requires review, use the decision trace receipt to tell the operator what changed and which recorded workflow or proof is required. Stay quiet for routine low-risk work.
@@ -1051,13 +1052,36 @@ function inspectSdkDependency(detection) {
1051
1052
  };
1052
1053
  }
1053
1054
 
1055
+ function defaultHarnessInstallMatrix(detection = detectEnvironment(process.cwd())) {
1056
+ const node = Boolean(detection.node);
1057
+ return HARNESS_CAPABILITY_REGISTRY.map((entry) => {
1058
+ const detected = detectedClient(detection) === entry.client
1059
+ || (entry.client === 'claude-code' && detection.claudeCode)
1060
+ || (entry.client === 'cursor' && detection.cursor)
1061
+ || (entry.client === 'codex' && detection.codex);
1062
+ return {
1063
+ client: entry.client,
1064
+ capability_level: entry.capability_level,
1065
+ automatic: entry.automatic,
1066
+ install_surface: entry.install_surface,
1067
+ default_install: {
1068
+ mcp: true,
1069
+ instructions: true,
1070
+ sdk_passive_runtime: node,
1071
+ native_hooks: entry.capability_level === 'native_hooks' && Boolean(detection.claudeCode),
1072
+ governed_wrapper: entry.capability_level === 'governed_wrapper',
1073
+ },
1074
+ verified_passive: detected && entry.automatic.length > 0,
1075
+ unsupported_claim: entry.capability_level === 'event_contract'
1076
+ ? 'Needs a bounded event adapter. MCP tools remain on demand.'
1077
+ : null,
1078
+ };
1079
+ });
1080
+ }
1081
+
1054
1082
  function buildPlan(detection, options) {
1055
1083
  const mode = options.mode === 'auto'
1056
- ? detection.node && (detection.claudeCode || detection.cursor || detection.codex || detection.openclaw)
1057
- ? 'both'
1058
- : detection.node
1059
- ? 'sdk'
1060
- : 'mcp'
1084
+ ? detection.node ? 'both' : 'mcp'
1061
1085
  : options.mode;
1062
1086
  const writes = [];
1063
1087
 
@@ -1092,6 +1116,14 @@ function buildPlan(detection, options) {
1092
1116
  label: 'Project MCP server config',
1093
1117
  transform: upsertMcpServerConfig,
1094
1118
  });
1119
+ if (detection.cursor) {
1120
+ writes.push({
1121
+ type: 'json-transform',
1122
+ path: detection.paths.cursorMcp,
1123
+ label: 'Cursor MCP server config',
1124
+ transform: upsertMcpServerConfig,
1125
+ });
1126
+ }
1095
1127
  }
1096
1128
 
1097
1129
  if (mode === 'md' || mode === 'both' || mode === 'mcp') {
@@ -1947,4 +1979,5 @@ module.exports = {
1947
1979
  printReport,
1948
1980
  ADAPTER_PROVENANCE,
1949
1981
  HARNESS_CAPABILITY_REGISTRY,
1982
+ defaultHarnessInstallMatrix,
1950
1983
  };