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 +12 -1
- package/bin/agentxchain.js +8 -0
- package/package.json +1 -1
- package/scripts/release-downstream-truth.sh +28 -2
- package/src/commands/demo.js +632 -0
- package/src/commands/init.js +14 -7
- package/src/commands/start.js +2 -1
- package/src/lib/context-section-parser.js +43 -5
- package/src/lib/dispatch-bundle.js +303 -5
- package/src/lib/governed-state.js +81 -1
- package/src/lib/repo-observer.js +47 -9
- package/src/lib/turn-paths.js +6 -0
- package/src/lib/turn-result-validator.js +149 -1
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 |
|
package/bin/agentxchain.js
CHANGED
|
@@ -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
|
@@ -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="$(
|
|
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 ${
|
|
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
|