agentxchain 2.17.0 → 2.19.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/README.md CHANGED
@@ -17,6 +17,16 @@ Legacy IDE-window coordination is still shipped as a compatibility mode for team
17
17
  - [Build your own runner](https://agentxchain.dev/docs/build-your-own-runner/)
18
18
  - [Why governed multi-agent delivery matters](https://agentxchain.dev/why/)
19
19
 
20
+ ## Try It Now
21
+
22
+ See governance before you scaffold a real repo:
23
+
24
+ ```bash
25
+ npx agentxchain demo
26
+ ```
27
+
28
+ Requires Node.js 18.17+ or 20.5+ and `git`. The demo creates a temporary governed repo, runs a full PM -> Dev -> QA lifecycle through the real runner interface, shows gates/decisions/objections, and removes the temp workspace when finished. No API keys, config edits, or manual turn authoring required.
29
+
20
30
  ## Install
21
31
 
22
32
  ```bash
@@ -59,7 +69,7 @@ agentxchain status
59
69
  agentxchain step --role pm
60
70
  ```
61
71
 
62
- The default governed dev runtime is `claude --print` with stdin prompt delivery. If your local coding agent uses a different launch contract, set it during scaffold creation:
72
+ The default governed dev runtime is `claude --print --dangerously-skip-permissions` with stdin prompt delivery. The non-interactive governed path needs write access, so do not pretend bare `claude --print` is sufficient for unattended implementation turns. If your local coding agent uses a different launch contract, set it during scaffold creation:
63
73
 
64
74
  ```bash
65
75
  npx agentxchain init --governed --dir my-agentxchain-project --dev-command ./scripts/dev-agent.sh --dev-prompt-transport dispatch_bundle_only -y
@@ -119,6 +129,7 @@ agentxchain step
119
129
 
120
130
  | Command | What it does |
121
131
  |---|---|
132
+ | `demo` | Run a temporary PM -> Dev -> QA governed lifecycle demo with real gates, decisions, and objections |
122
133
  | `init --governed [--dir <path>] [--template <id>]` | Create a governed project, optionally in-place or in an explicit target directory, with project-shape-specific planning artifacts |
123
134
  | `migrate` | Convert a legacy v3 project to governed format |
124
135
  | `status` | Show current run, template, phase, turn, and approval state |
@@ -101,6 +101,7 @@ import { intakeHandoffCommand } from '../src/commands/intake-handoff.js';
101
101
  import { intakeScanCommand } from '../src/commands/intake-scan.js';
102
102
  import { intakeResolveCommand } from '../src/commands/intake-resolve.js';
103
103
  import { intakeStatusCommand } from '../src/commands/intake-status.js';
104
+ import { demoCommand } from '../src/commands/demo.js';
104
105
 
105
106
  const __dirname = dirname(fileURLToPath(import.meta.url));
106
107
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
@@ -233,6 +234,13 @@ program
233
234
  .description('Check local environment and first-run readiness')
234
235
  .action(doctorCommand);
235
236
 
237
+ program
238
+ .command('demo')
239
+ .description('Run a complete governed lifecycle demo (no API keys required)')
240
+ .option('-j, --json', 'Output as JSON')
241
+ .option('-v, --verbose', 'Show stack traces on failure')
242
+ .action(demoCommand);
243
+
236
244
  program
237
245
  .command('validate')
238
246
  .description('Validate project protocol artifacts')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentxchain",
3
- "version": "2.17.0",
3
+ "version": "2.19.0",
4
4
  "description": "CLI for AgentXchain — governed multi-agent software delivery",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,6 +48,8 @@ fi
48
48
 
49
49
  PACKAGE_NAME="$(node -e "console.log(JSON.parse(require('fs').readFileSync('package.json', 'utf8')).name)")"
50
50
  CANONICAL_HOMEBREW_FORMULA_URL="${AGENTXCHAIN_DOWNSTREAM_FORMULA_URL:-https://raw.githubusercontent.com/shivamtiwari93/homebrew-tap/main/Formula/agentxchain.rb}"
51
+ CANONICAL_HOMEBREW_FORMULA_REPO="${AGENTXCHAIN_DOWNSTREAM_FORMULA_REPO:-https://github.com/shivamtiwari93/homebrew-tap.git}"
52
+ CANONICAL_HOMEBREW_FORMULA_PATH="${AGENTXCHAIN_DOWNSTREAM_FORMULA_PATH:-Formula/agentxchain.rb}"
51
53
 
52
54
  PASS=0
53
55
  FAIL=0
@@ -55,6 +57,30 @@ FAIL=0
55
57
  pass() { PASS=$((PASS + 1)); echo " PASS: $1"; }
56
58
  fail() { FAIL=$((FAIL + 1)); echo " FAIL: $1"; }
57
59
 
60
+ fetch_formula_content() {
61
+ local content=""
62
+ if [[ -n "${AGENTXCHAIN_DOWNSTREAM_FORMULA_URL:-}" ]]; then
63
+ content="$(curl -fsSL "$CANONICAL_HOMEBREW_FORMULA_URL" 2>/dev/null || true)"
64
+ printf '%s' "$content"
65
+ return 0
66
+ fi
67
+
68
+ if ! command -v git >/dev/null 2>&1; then
69
+ printf ''
70
+ return 0
71
+ fi
72
+
73
+ local tmpdir
74
+ tmpdir="$(mktemp -d)"
75
+ if git clone --depth 1 "$CANONICAL_HOMEBREW_FORMULA_REPO" "$tmpdir" >/dev/null 2>&1; then
76
+ if [[ -f "$tmpdir/$CANONICAL_HOMEBREW_FORMULA_PATH" ]]; then
77
+ content="$(cat "$tmpdir/$CANONICAL_HOMEBREW_FORMULA_PATH")"
78
+ fi
79
+ fi
80
+ rm -rf "$tmpdir"
81
+ printf '%s' "$content"
82
+ }
83
+
58
84
  echo "AgentXchain v${TARGET_VERSION} Downstream Release Truth"
59
85
  echo "====================================="
60
86
  echo "Checks downstream surfaces after publish: GitHub release, canonical Homebrew tap."
@@ -87,11 +113,11 @@ fi
87
113
  # --- Get registry tarball URL and compute SHA ---
88
114
  echo "[2/3] Canonical Homebrew tap SHA matches registry tarball"
89
115
  REGISTRY_TARBALL_URL="$(npm view "${PACKAGE_NAME}@${TARGET_VERSION}" dist.tarball 2>/dev/null || true)"
90
- FORMULA_CONTENT="$(curl -fsSL "$CANONICAL_HOMEBREW_FORMULA_URL" 2>/dev/null || true)"
116
+ FORMULA_CONTENT="$(fetch_formula_content)"
91
117
  if [[ -z "$REGISTRY_TARBALL_URL" ]]; then
92
118
  fail "cannot fetch registry tarball URL for ${PACKAGE_NAME}@${TARGET_VERSION}"
93
119
  elif [[ -z "$FORMULA_CONTENT" ]]; then
94
- fail "cannot fetch canonical Homebrew formula from ${CANONICAL_HOMEBREW_FORMULA_URL}"
120
+ fail "cannot fetch canonical Homebrew formula from ${CANONICAL_HOMEBREW_FORMULA_REPO}"
95
121
  else
96
122
  REGISTRY_SHA="$(curl -sL "$REGISTRY_TARBALL_URL" | shasum -a 256 | awk '{print $1}')"
97
123
  if [[ -z "$REGISTRY_SHA" ]]; then