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 +5 -1
- package/dashboard/components/run-history.js +9 -0
- package/package.json +1 -1
- package/src/commands/demo.js +7 -3
- package/src/commands/history.js +14 -1
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
package/src/commands/demo.js
CHANGED
|
@@ -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('
|
|
608
|
-
console.log(
|
|
609
|
-
console.log(` ${chalk.
|
|
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
|
|
package/src/commands/history.js
CHANGED
|
@@ -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
|
+
}
|