agentxchain 2.103.0 → 2.105.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.
Files changed (66) hide show
  1. package/README.md +13 -7
  2. package/bin/agentxchain.js +16 -8
  3. package/dashboard/app.js +111 -7
  4. package/dashboard/components/blocked.js +95 -11
  5. package/dashboard/components/blockers.js +85 -86
  6. package/dashboard/components/coordinator-timeouts.js +13 -0
  7. package/dashboard/components/cross-repo.js +17 -12
  8. package/dashboard/components/gate.js +31 -11
  9. package/dashboard/components/initiative.js +173 -78
  10. package/dashboard/components/ledger.js +28 -0
  11. package/dashboard/components/live-status.js +39 -0
  12. package/dashboard/components/run-history.js +76 -1
  13. package/dashboard/components/timeline.js +5 -1
  14. package/dashboard/index.html +21 -0
  15. package/dashboard/live-observer.js +91 -0
  16. package/package.json +1 -1
  17. package/scripts/release-bump.sh +26 -3
  18. package/scripts/release-preflight.sh +82 -38
  19. package/src/commands/accept-turn.js +3 -3
  20. package/src/commands/decisions.js +98 -29
  21. package/src/commands/diff.js +27 -4
  22. package/src/commands/doctor.js +48 -16
  23. package/src/commands/generate.js +126 -1
  24. package/src/commands/history.js +21 -3
  25. package/src/commands/init.js +15 -97
  26. package/src/commands/multi.js +223 -54
  27. package/src/commands/phase.js +11 -13
  28. package/src/commands/reject-turn.js +1 -1
  29. package/src/commands/restart.js +28 -11
  30. package/src/commands/resume.js +6 -6
  31. package/src/commands/role.js +51 -14
  32. package/src/commands/run.js +5 -11
  33. package/src/commands/status.js +145 -13
  34. package/src/commands/step.js +36 -29
  35. package/src/lib/admission-control.js +14 -12
  36. package/src/lib/blocked-state.js +150 -0
  37. package/src/lib/conflict-actions.js +17 -0
  38. package/src/lib/context-section-parser.js +2 -0
  39. package/src/lib/continuity-status.js +1 -1
  40. package/src/lib/coordinator-blocker-presentation.js +127 -0
  41. package/src/lib/coordinator-event-narrative.js +43 -0
  42. package/src/lib/coordinator-gate-approval.js +98 -0
  43. package/src/lib/coordinator-gate-evaluation-presentation.js +57 -0
  44. package/src/lib/coordinator-next-actions.js +128 -0
  45. package/src/lib/coordinator-pending-gate-presentation.js +79 -0
  46. package/src/lib/coordinator-presentation-detail.js +11 -0
  47. package/src/lib/coordinator-repo-snapshots.js +53 -0
  48. package/src/lib/coordinator-repo-status-presentation.js +134 -0
  49. package/src/lib/dashboard/actions.js +105 -29
  50. package/src/lib/dashboard/bridge-server.js +7 -0
  51. package/src/lib/dashboard/coordinator-blockers.js +17 -0
  52. package/src/lib/dashboard/coordinator-repo-status.js +50 -0
  53. package/src/lib/dashboard/coordinator-timeout-status.js +34 -11
  54. package/src/lib/dashboard/state-reader.js +36 -1
  55. package/src/lib/dispatch-bundle.js +23 -0
  56. package/src/lib/export-diff.js +70 -38
  57. package/src/lib/export-verifier.js +3 -0
  58. package/src/lib/history-diff-summary.js +249 -0
  59. package/src/lib/manual-qa-fallback.js +18 -0
  60. package/src/lib/normalized-config.js +27 -22
  61. package/src/lib/planning-artifacts.js +131 -0
  62. package/src/lib/recent-event-summary.js +132 -0
  63. package/src/lib/repo-decisions.js +69 -28
  64. package/src/lib/report.js +353 -145
  65. package/src/lib/run-diff.js +4 -0
  66. package/src/lib/runtime-capabilities.js +222 -0
@@ -66,38 +66,15 @@ export function summarizeRepoDecisions(decisions, config) {
66
66
  if (!Array.isArray(decisions) || decisions.length === 0) return null;
67
67
  const active = decisions.filter((d) => d.status === 'active');
68
68
  const overridden = decisions.filter((d) => d.status === 'overridden');
69
- const addAuthority = (decision) => {
70
- const authority = getDecisionAuthorityMetadata(decision.role, config);
71
- return {
72
- id: decision.id,
73
- category: decision.category,
74
- statement: decision.statement,
75
- role: decision.role,
76
- run_id: decision.run_id,
77
- overrides: decision.overrides || null,
78
- durability: decision.durability || 'repo',
79
- authority_level: authority?.level ?? null,
80
- authority_source: authority?.source || null,
81
- };
82
- };
69
+ const activeEntries = active.map((decision) => addActiveAuthority(decision, config));
70
+ const overriddenEntries = overridden.map((decision) => addOverriddenAuthority(decision, config));
83
71
  return {
84
72
  total: decisions.length,
85
73
  active_count: active.length,
86
74
  overridden_count: overridden.length,
87
- active: active.map(addAuthority),
88
- overridden: overridden.map((d) => {
89
- const authority = getDecisionAuthorityMetadata(d.role, config);
90
- return {
91
- id: d.id,
92
- overridden_by: d.overridden_by,
93
- statement: d.statement,
94
- overrides: d.overrides || null,
95
- durability: d.durability || 'repo',
96
- role: d.role || null,
97
- authority_level: authority?.level ?? null,
98
- authority_source: authority?.source || null,
99
- };
100
- }),
75
+ active: activeEntries,
76
+ overridden: overriddenEntries,
77
+ operator_summary: buildRepoDecisionOperatorSummaryFromEntries(activeEntries, overriddenEntries),
101
78
  };
102
79
  }
103
80
 
@@ -105,6 +82,17 @@ export function buildRepoDecisionsSummary(decisions) {
105
82
  return summarizeRepoDecisions(decisions, null);
106
83
  }
107
84
 
85
+ export function buildRepoDecisionOperatorSummary(decisions, config) {
86
+ if (!Array.isArray(decisions) || decisions.length === 0) return null;
87
+ const activeEntries = decisions
88
+ .filter((decision) => decision.status === 'active')
89
+ .map((decision) => addActiveAuthority(decision, config));
90
+ const overriddenEntries = decisions
91
+ .filter((decision) => decision.status === 'overridden')
92
+ .map((decision) => addOverriddenAuthority(decision, config));
93
+ return buildRepoDecisionOperatorSummaryFromEntries(activeEntries, overriddenEntries);
94
+ }
95
+
108
96
  // ── Write ───────────────────────────────────────────────────────────────────
109
97
 
110
98
  export function appendRepoDecision(root, entry) {
@@ -255,6 +243,59 @@ export function renderRepoDecisionsMarkdown(activeDecisions, config) {
255
243
  return lines.join('\n');
256
244
  }
257
245
 
246
+ function addActiveAuthority(decision, config) {
247
+ const authority = getDecisionAuthorityMetadata(decision.role, config);
248
+ return {
249
+ id: decision.id,
250
+ category: decision.category,
251
+ statement: decision.statement,
252
+ role: decision.role,
253
+ run_id: decision.run_id,
254
+ overrides: decision.overrides || null,
255
+ durability: decision.durability || 'repo',
256
+ authority_level: authority?.level ?? null,
257
+ authority_source: authority?.source || null,
258
+ };
259
+ }
260
+
261
+ function addOverriddenAuthority(decision, config) {
262
+ const authority = getDecisionAuthorityMetadata(decision.role, config);
263
+ return {
264
+ id: decision.id,
265
+ overridden_by: decision.overridden_by,
266
+ statement: decision.statement,
267
+ overrides: decision.overrides || null,
268
+ durability: decision.durability || 'repo',
269
+ role: decision.role || null,
270
+ authority_level: authority?.level ?? null,
271
+ authority_source: authority?.source || null,
272
+ };
273
+ }
274
+
275
+ function buildRepoDecisionOperatorSummaryFromEntries(activeEntries, overriddenEntries) {
276
+ const activeCategories = [...new Set(
277
+ activeEntries
278
+ .map((decision) => decision.category)
279
+ .filter(Boolean),
280
+ )].sort();
281
+
282
+ const highestAuthority = activeEntries
283
+ .filter((decision) => typeof decision.authority_level === 'number')
284
+ .reduce((current, decision) => {
285
+ if (!current || decision.authority_level > current.authority_level) return decision;
286
+ return current;
287
+ }, null);
288
+
289
+ return {
290
+ active_categories: activeCategories,
291
+ highest_active_authority_level: highestAuthority?.authority_level ?? null,
292
+ highest_active_authority_role: highestAuthority?.role ?? null,
293
+ highest_active_authority_source: highestAuthority?.authority_source ?? null,
294
+ superseding_active_count: activeEntries.filter((decision) => decision.overrides).length,
295
+ overridden_with_successor_count: overriddenEntries.filter((decision) => decision.overridden_by).length,
296
+ };
297
+ }
298
+
258
299
  // ── Constants ───────────────────────────────────────────────────────────────
259
300
 
260
301
  export { REPO_DECISIONS_PATH };