agentxchain 2.57.0 → 2.59.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
@@ -63,15 +63,19 @@ Duplicate execution remains intentional for the current 36-file slice until a la
63
63
  ### Governed workflow
64
64
 
65
65
  ```bash
66
- agentxchain init --governed --dir my-agentxchain-project -y
66
+ agentxchain init --governed --goal "Build an API change planner for release teams" --dir my-agentxchain-project -y
67
67
  cd my-agentxchain-project
68
68
  git init
69
+ agentxchain template validate
70
+ agentxchain doctor
69
71
  git add -A
70
72
  git commit -m "initial governed scaffold"
71
73
  agentxchain status
72
74
  agentxchain step --role pm
73
75
  ```
74
76
 
77
+ If you skipped `--goal` during scaffold, set `project.goal` in `agentxchain.json` before the first governed turn instead of re-running init in place.
78
+
75
79
  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:
76
80
 
77
81
  ```bash
@@ -68,6 +68,13 @@ function truncateId(id, len = 12) {
68
68
  return id.length > len ? id.slice(0, len) + '…' : id;
69
69
  }
70
70
 
71
+ function truncateHeadline(headline, len = 40) {
72
+ if (!headline) return '—';
73
+ const normalized = String(headline).replace(/\s+/g, ' ').trim();
74
+ if (normalized.length <= len) return normalized;
75
+ return normalized.slice(0, len - 1) + '…';
76
+ }
77
+
71
78
  function isInheritable(entry) {
72
79
  const snap = entry?.inheritance_snapshot;
73
80
  if (!snap) return false;
@@ -105,6 +112,7 @@ function renderRow(entry, index) {
105
112
  <td>${formatCost(entry.total_cost_usd)}</td>
106
113
  <td>${formatDuration(entry.duration_ms)}</td>
107
114
  <td>${formatDate(entry.recorded_at || entry.completed_at)}</td>
115
+ <td title="${esc(entry.retrospective?.headline || '')}">${esc(truncateHeadline(entry.retrospective?.headline))}</td>
108
116
  </tr>`;
109
117
  }
110
118
 
@@ -144,6 +152,7 @@ export function render({ runHistory }) {
144
152
  <th>Cost</th>
145
153
  <th>Duration</th>
146
154
  <th>Date</th>
155
+ <th>Headline</th>
147
156
  </tr>
148
157
  </thead>
149
158
  <tbody>`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentxchain",
3
- "version": "2.57.0",
3
+ "version": "2.59.0",
4
4
  "description": "CLI for AgentXchain — governed multi-agent software delivery",
5
5
  "type": "module",
6
6
  "bin": {
@@ -604,9 +604,13 @@ All acceptance criteria met. OBJ-002 (clock skew) noted for follow-up. OBJ-003 (
604
604
  console.log('');
605
605
  console.log(chalk.dim(' ─'.repeat(26)));
606
606
  console.log('');
607
- console.log(` ${chalk.bold('Try it for real:')} agentxchain init --governed`);
608
- console.log(` ${chalk.bold('Step by step:')} https://agentxchain.dev/docs/getting-started`);
609
- console.log(` ${chalk.bold('Read more:')} https://agentxchain.dev/docs/quickstart`);
607
+ console.log(` ${chalk.bold('Next steps:')}`);
608
+ console.log('');
609
+ console.log(` ${chalk.dim('1.')} ${chalk.bold('Scaffold')} agentxchain init --governed --goal "Your project mission"`);
610
+ console.log(` ${chalk.dim('2.')} ${chalk.bold('Verify')} agentxchain doctor`);
611
+ console.log(` ${chalk.dim('3.')} ${chalk.bold('First turn')} agentxchain run`);
612
+ console.log('');
613
+ console.log(` ${chalk.bold('Docs:')} https://agentxchain.dev/docs/quickstart`);
610
614
  console.log('');
611
615
  }
612
616
 
@@ -50,8 +50,11 @@ export async function historyCommand(opts) {
50
50
  const parentNote = entry.provenance?.parent_run_id
51
51
  ? ` from ${entry.provenance.parent_run_id.slice(0, 12)}`
52
52
  : '';
53
+ const headline = entry.retrospective?.headline
54
+ ? ` ${formatHeadline(entry.retrospective.headline)}`
55
+ : '';
53
56
  const prefix = i === 0 ? ' ' : ' └─ ';
54
- console.log(`${prefix}${runId} ${status} ${pad(phases, 20)} ${pad(turns, 10)} ${pad(cost, 8)} (${trigger}${parentNote})${ctxMarker}`);
57
+ console.log(`${prefix}${runId} ${status} ${pad(phases, 20)} ${pad(turns, 10)} ${pad(cost, 8)} (${trigger}${parentNote})${ctxMarker}${headline}`);
55
58
  });
56
59
  return;
57
60
  }
@@ -89,6 +92,7 @@ export async function historyCommand(opts) {
89
92
  pad('Cost', 10),
90
93
  pad('Duration', 10),
91
94
  pad('Date', 20),
95
+ pad('Headline', 42),
92
96
  ].join(' ');
93
97
 
94
98
  console.log(chalk.bold(header));
@@ -111,6 +115,7 @@ export async function historyCommand(opts) {
111
115
  const date = entry.recorded_at
112
116
  ? new Date(entry.recorded_at).toLocaleString()
113
117
  : '—';
118
+ const headline = formatHeadline(entry.retrospective?.headline);
114
119
 
115
120
  console.log([
116
121
  pad(idx, 4),
@@ -123,6 +128,7 @@ export async function historyCommand(opts) {
123
128
  pad(cost, 10),
124
129
  pad(duration, 10),
125
130
  pad(date, 20),
131
+ pad(headline, 42),
126
132
  ].join(' '));
127
133
  });
128
134
 
@@ -163,3 +169,10 @@ function formatDuration(ms) {
163
169
  const remainMins = mins % 60;
164
170
  return `${hrs}h ${remainMins}m`;
165
171
  }
172
+
173
+ function formatHeadline(headline) {
174
+ if (!headline) return '—';
175
+ const normalized = String(headline).replace(/\s+/g, ' ').trim();
176
+ if (normalized.length <= 40) return normalized;
177
+ return `${normalized.slice(0, 39)}…`;
178
+ }