@getmarrow/install 0.1.22 → 0.1.24

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
@@ -1,8 +1,8 @@
1
1
  # @getmarrow/install
2
2
 
3
- Universal installer for Marrow passive agent setup.
3
+ Universal installer for Marrow agent governance, proof, and passive control setup.
4
4
 
5
- Use it when you want Marrow to detect the local agent/runtime environment and wire the safest passive integration automatically.
5
+ Use it when you want Marrow to detect the local agent/runtime environment and wire the safest passive governance integration automatically.
6
6
 
7
7
  ```bash
8
8
  npx @getmarrow/install --dry-run
@@ -11,18 +11,26 @@ npx @getmarrow/install --repair
11
11
  npx @getmarrow/install doctor
12
12
  ```
13
13
 
14
- ## What's New in v0.1.22
14
+ ## What's New in v0.1.24
15
15
 
16
- v0.1.22 makes token value proof easier to repair from the Fleet Operator TUI.
16
+ v0.1.24 aligns the installer docs with Marrow's control-plane direction.
17
17
 
18
- - Generated passive runtimes enable compact model-usage capture by default with `captureModelUsage`.
19
- - First-run self-test calls `/v1/agent/value/proof` and prints a `Token value proof` block.
20
- - Fresh accounts show token capture as active and warming up; accounts with observed model calls show calls, tokens, estimated savings, confidence, and next action.
21
- - Provider usage capture stores compact metadata only: provider, model, token counts, latency, cost estimate, workflow/decision linkage, and Marrow intervention type.
22
- - Marrow does not store prompts, completions, tool stdout/stderr, plaintext API keys, or raw model output for this feature.
23
- - Disable only when required with `MARROW_PASSIVE_TOKEN_USAGE=false`.
18
+ - Marrow is positioned as an agent governance, proof, and intelligence layer, not a single-agent memory app.
19
+ - The recommended setup path remains passive by default: install once, then let agents call runtime gates, completion contracts, and outcome closure as they work.
20
+ - Hermes Agent is a supported client label and integration target; Marrow maps Hermes goals, verification evidence, learning, journey, and subagent outcomes into fleet governance proof.
21
+ - New backend surfaces include governance control-plane proof, completion-contract evaluation, fleet governance timeline, and buyer-grade value proof.
24
22
 
25
- Business value: new users should see from day one whether Marrow is capturing the signals needed to prove token/time savings over workflows, tasks, and builds.
23
+ ## What's New in v0.1.23
24
+
25
+ v0.1.23 improves attribution quality so Marrow can produce cleaner per-agent, per-harness, and per-workflow value reports.
26
+
27
+ - Installer self-tests and governed runner calls attach `source_meta.channel`, `source_meta.client`, and inferred workflow intent by default.
28
+ - Generated passive runtime keeps using SDK defaults for `agent_id`, harness/client, source channel, and user intent attribution.
29
+ - Set `MARROW_CLIENT`, `MARROW_HARNESS`, or `MARROW_AGENT_CLIENT` to labels such as `codex`, `claude-code`, `cursor`, `gemini`, `qwen`, `opencode`, `hermes`, `openclaw`, or `custom`.
30
+ - Invalid or unknown client labels fall back to `custom` instead of breaking onboarding.
31
+ - Marrow still does not store prompts, completions, tool stdout/stderr, plaintext API keys, or raw model output for this feature.
32
+
33
+ Business value: dashboards and reports can show which agents, harnesses, and workflow types are improving instead of grouping too much work into "unknown."
26
34
 
27
35
  ## Governed Runner
28
36
 
@@ -87,6 +95,14 @@ Use the lower-level packages only when you need direct control:
87
95
 
88
96
  The three packages are not three competing onboarding paths. `@getmarrow/install` is the front door; SDK and MCP are the implementation paths underneath it.
89
97
 
98
+ For cleaner attribution, set an agent id and optional client label before install:
99
+
100
+ ```bash
101
+ export MARROW_FLEET_AGENT_ID=codex-deploy-agent
102
+ export MARROW_CLIENT=codex
103
+ npx @getmarrow/install --yes
104
+ ```
105
+
90
106
  ## Agent Value Proof Quickstart
91
107
 
92
108
  One command should prove Marrow is active and useful:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@getmarrow/install",
3
- "version": "0.1.22",
4
- "description": "Universal installer for Marrow passive agent setup.",
3
+ "version": "0.1.24",
4
+ "description": "Universal installer for Marrow agent governance, proof, and passive control setup.",
5
5
  "bin": {
6
6
  "marrow-install": "bin/marrow-install.js"
7
7
  },
@@ -15,7 +15,10 @@
15
15
  "marrow",
16
16
  "mcp",
17
17
  "installer",
18
- "passive-runtime"
18
+ "passive-runtime",
19
+ "governance",
20
+ "proof-packs",
21
+ "agent-control-plane"
19
22
  ],
20
23
  "repository": {
21
24
  "type": "git",
@@ -9,6 +9,36 @@ const DEFAULT_BASE_URL = 'https://api.getmarrow.ai';
9
9
  const HIGH_RISK_TERMS = /\b(deploy|prod|production|publish|release|merge|migration|migrate|secret|token|key|cloudflare|wrangler|npm publish|gh pr merge|git push|terraform apply|kubectl apply|delete|destroy|drop)\b/i;
10
10
  const GOVERN_TUI_ROW_COUNT = 7;
11
11
  const FLEET_TUI_ROW_COUNT = 11;
12
+ const SOURCE_CLIENTS = new Set(['claude-code', 'cursor', 'windsurf', 'openclaw', 'codex', 'gemini', 'grok', 'deepseek', 'qwen', 'kimi', 'minimax', 'cline', 'opencode', 'hermes', 'glm', 'custom', 'unknown']);
13
+
14
+ function sourceClient() {
15
+ const raw = String(process.env.MARROW_CLIENT || process.env.MARROW_HARNESS || process.env.MARROW_AGENT_CLIENT || '').trim().toLowerCase().replace(/\s+/g, '-').replace(/^@/, '');
16
+ const aliases = {
17
+ claude: 'claude-code',
18
+ claude_code: 'claude-code',
19
+ 'claude-code': 'claude-code',
20
+ cursor: 'cursor',
21
+ windsurf: 'windsurf',
22
+ openclaw: 'openclaw',
23
+ codex: 'codex',
24
+ 'openai-codex': 'codex',
25
+ gemini: 'gemini',
26
+ google: 'gemini',
27
+ grok: 'grok',
28
+ deepseek: 'deepseek',
29
+ qwen: 'qwen',
30
+ kimi: 'kimi',
31
+ minimax: 'minimax',
32
+ cline: 'cline',
33
+ opencode: 'opencode',
34
+ 'open-code': 'opencode',
35
+ hermes: 'hermes',
36
+ 'hermes-agent': 'hermes',
37
+ glm: 'glm',
38
+ };
39
+ return aliases[raw] || (SOURCE_CLIENTS.has(raw) ? raw : 'custom');
40
+ }
41
+
12
42
  function usage() {
13
43
  return `Usage:
14
44
  npx @getmarrow/install run --agent deploy-agent -- npm test
@@ -283,6 +313,7 @@ function headers(options) {
283
313
  'Content-Type': 'application/json',
284
314
  'X-Marrow-Agent-Id': options.agentId,
285
315
  'X-Marrow-Session-Id': options.sessionId,
316
+ 'X-Marrow-Client': sourceClient(),
286
317
  'User-Agent': '@getmarrow/install governed-runner',
287
318
  };
288
319
  return h;
@@ -449,6 +480,11 @@ async function createDecision(options, action, type) {
449
480
  profile: options.profile,
450
481
  governed: true,
451
482
  },
483
+ source_meta: {
484
+ channel: 'cli',
485
+ client: sourceClient(),
486
+ user_intent: type === 'deploy' ? 'deploy' : 'operate',
487
+ },
452
488
  });
453
489
  }
454
490
 
package/src/installer.js CHANGED
@@ -6,6 +6,35 @@ const crypto = require('node:crypto');
6
6
  const DEFAULT_BASE_URL = 'https://api.getmarrow.ai';
7
7
  const MARROW_BLOCK_START = '<!-- marrow:passive-start -->';
8
8
  const MARROW_BLOCK_END = '<!-- marrow:passive-end -->';
9
+ const SOURCE_CLIENTS = new Set(['claude-code', 'cursor', 'windsurf', 'openclaw', 'codex', 'gemini', 'grok', 'deepseek', 'qwen', 'kimi', 'minimax', 'cline', 'opencode', 'hermes', 'glm', 'custom', 'unknown']);
10
+
11
+ function sourceClient() {
12
+ const raw = String(process.env.MARROW_CLIENT || process.env.MARROW_HARNESS || process.env.MARROW_AGENT_CLIENT || '').trim().toLowerCase().replace(/\s+/g, '-').replace(/^@/, '');
13
+ const aliases = {
14
+ claude: 'claude-code',
15
+ claude_code: 'claude-code',
16
+ 'claude-code': 'claude-code',
17
+ cursor: 'cursor',
18
+ windsurf: 'windsurf',
19
+ openclaw: 'openclaw',
20
+ codex: 'codex',
21
+ 'openai-codex': 'codex',
22
+ gemini: 'gemini',
23
+ google: 'gemini',
24
+ grok: 'grok',
25
+ deepseek: 'deepseek',
26
+ qwen: 'qwen',
27
+ kimi: 'kimi',
28
+ minimax: 'minimax',
29
+ cline: 'cline',
30
+ opencode: 'opencode',
31
+ 'open-code': 'opencode',
32
+ hermes: 'hermes',
33
+ 'hermes-agent': 'hermes',
34
+ glm: 'glm',
35
+ };
36
+ return aliases[raw] || (SOURCE_CLIENTS.has(raw) ? raw : 'custom');
37
+ }
9
38
 
10
39
  function parseArgs(argv) {
11
40
  const options = {
@@ -291,7 +320,7 @@ Marrow should run passively after install:
291
320
  Required environment:
292
321
 
293
322
  - \`MARROW_API_KEY\`
294
- - Optional: \`MARROW_BASE_URL\`, \`MARROW_FLEET_AGENT_ID\`
323
+ - Optional: \`MARROW_BASE_URL\`, \`MARROW_FLEET_AGENT_ID\`, \`MARROW_CLIENT\`
295
324
  - Optional: \`MARROW_PASSIVE_TOKEN_USAGE=false\` disables compact provider usage capture when needed.
296
325
  ${MARROW_BLOCK_END}`;
297
326
  }
@@ -330,6 +359,7 @@ function envExample() {
330
359
  return `MARROW_API_KEY=mrw_live_replace_me
331
360
  MARROW_BASE_URL=${DEFAULT_BASE_URL}
332
361
  MARROW_FLEET_AGENT_ID=agent-or-fleet-id
362
+ MARROW_CLIENT=codex
333
363
  MARROW_ENFORCEMENT_MODE=auto
334
364
  MARROW_PASSIVE_BRIEF=auto
335
365
  MARROW_PASSIVE_VALUE_REPORT=true
@@ -565,6 +595,7 @@ async function runSelfTest(options) {
565
595
  authorization: `Bearer ${options.apiKey}`,
566
596
  'content-type': 'application/json',
567
597
  'x-marrow-session-id': `install-${Date.now()}`,
598
+ 'x-marrow-client': sourceClient(),
568
599
  };
569
600
  if (options.agentId) headers['x-marrow-agent-id'] = options.agentId;
570
601
 
@@ -575,6 +606,11 @@ async function runSelfTest(options) {
575
606
  body: JSON.stringify({
576
607
  type: 'process',
577
608
  action: 'Marrow passive install self-test: verify SDK/MCP hooks can record a harmless setup event',
609
+ source_meta: {
610
+ channel: 'cli',
611
+ client: sourceClient(),
612
+ user_intent: 'operate',
613
+ },
578
614
  }),
579
615
  });
580
616