vinta-ai-workflows 0.7.0-alpha6 → 0.7.0-alpha8

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 (2) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,8 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [0.7.0] — YYYY-MM-DD
9
9
 
10
+ <!-- pre-release: 0.7.0-alpha8 on 2026-09-14 -->
11
+ <!-- pre-release: 0.7.0-alpha7 on 2026-09-14 -->
10
12
  <!-- pre-release: 0.7.0-alpha6 on 2026-09-13 -->
11
13
  <!-- pre-release: 0.7.0-alpha5 on 2026-09-13 -->
12
14
  <!-- pre-release: 0.7.0-alpha4 on 2026-09-13 -->
@@ -16,6 +18,77 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
16
18
 
17
19
  ### Added
18
20
 
21
+ - **A failed phase retries itself, and then asks.** `--on-failure` defaults to
22
+ `retry`: one cold re-attempt (`--retries <n>`, 0–5), and then the node parks
23
+ on a question — retry, retry with another member of the crew, or stop. The
24
+ failures this system produces are overwhelmingly environmental and are gone by
25
+ the second attempt; the ones that survive it are the ones worth a person.
26
+ `ask` skips the automatic attempt. `stop` is the old behaviour and remains the
27
+ right choice for CI, because everything else eventually **waits**.
28
+
29
+ A failure that survives its retries says so: the reason carries
30
+ `(after N attempts)`, which no event otherwise records.
31
+
32
+ - **A failed phase can be retried by hand.** A **Retry phase** button, and
33
+ `POST /api/runs/:runId/nodes/:nodeId/retry`. It returns the node to the ready
34
+ set and unblocks the subtree its failure blocked — a phase that died of
35
+ something environmental holds up work that was never broken. It needs the run
36
+ to still be in flight, which with the new default it usually is; a run that
37
+ has genuinely ended is re-run, not retried, and says so rather than doing
38
+ nothing.
39
+
40
+ - **The monitor can go and look.** It was given a digest and nothing else, and
41
+ read exactly as thin as that sounds — it could say a phase had failed and
42
+ never say what the phase had written. It is briefed as a technical project
43
+ manager now, with the map: the plan document, each phase's brief, each lane's
44
+ worktree path, each branch and its base, and where the journal and transcripts
45
+ live. It has a shell and its working directory is the repository, so it can
46
+ read the diff before drawing a conclusion. The digest stays as the index —
47
+ bounded, cheap, enough to know which phase is worth a closer look.
48
+
49
+ - **The monitor conversation is kept.** It lived in component state, so a reload
50
+ threw away every question and every answer — a worse record than the run it
51
+ describes. It is written to the transcript store under a reserved node id and
52
+ read back on load, so it outlives the tab, the daemon and the run.
53
+
54
+ - **Panels expand.** Anything holding content that is only nominally
55
+ summarisable — an agent's transcript, a gate log, the monitor conversation,
56
+ the steering box — takes the full container width and about a screen of
57
+ height on demand. The height travels as a CSS variable, because the element
58
+ that has to grow is a scroller several components below the panel.
59
+
60
+ - **A run has a spokesperson you can ask.** `serve` grows a **Monitor** panel on
61
+ the run view: one agent that reads the journal and answers in prose — what is
62
+ blocked, why a phase failed, what it would take to move on. It runs on the
63
+ dearest tier on the crew, because it is read by a person deciding what to do
64
+ about a failing run, and it is asked a handful of times rather than hundreds.
65
+
66
+ Three things it deliberately is not.
67
+
68
+ **It is not in the permission path.** The obvious thought, once an agent has
69
+ been refused something, is to put a smarter agent in front of the refusals —
70
+ but a phase makes hundreds of tool calls (one node in one real run made 179)
71
+ and a model turn before each is latency and cost spent on questions like "may
72
+ I run ruff", which should never have been questions. Permissions are settled
73
+ structurally, once per spawn, for free.
74
+
75
+ **It does not read the transcripts.** Piping every agent's output into a
76
+ second agent would make the monitor the most expensive thing in the run and
77
+ tie its cost to the work rather than to the questions. It reads a bounded
78
+ digest — statuses, failure reasons, pending questions, the last few refusals
79
+ with their sentences, one trimmed last word per phase — so a one-hour run and
80
+ a one-day run cost about the same to ask about.
81
+
82
+ **It has no authority.** It can explain a §9.1 pause; it cannot answer one.
83
+ An agent that could quietly approve its colleagues' work would turn a
84
+ checkpoint into a formality, and the checkpoint is the point.
85
+
86
+ It answers about **finished runs too**, which is when "why did this fail" is
87
+ usually asked, and it needs no lane: it writes nothing.
88
+
89
+ - **`serve` reads `--permission`.** The flag has been accepted and ignored since
90
+ it existed. It decides how the monitor is spawned, so it is read now.
91
+
19
92
  - **A plan staffs a team, instead of picking a model per phase.** Choosing a tier
20
93
  phase by phase answers "what runs this one" ten times and never adds it up, so the
21
94
  two questions that decide what a feature costs go unasked: how many agents does
@@ -221,6 +294,13 @@ the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
221
294
 
222
295
  ### Fixed
223
296
 
297
+ - **`serve --host 0.0.0.0` prints a URL another machine can open.** Binding
298
+ every interface made the server report the wildcard back, so the line printed
299
+ for the operator to open — and share — was `http://0.0.0.0:<port>`, which
300
+ resolves for nobody. The bind is unchanged; the printed host is now this
301
+ machine's LAN address. The daemon still warns, because the token in that URL
302
+ is the only thing between the run and anyone who can reach the port.
303
+
224
304
  - **An agent can run a shell command.** `auto` mapped to the vendor's
225
305
  `acceptEdits`, which accepts file *edits* and nothing else — a shell command
226
306
  still goes to a permission prompt, and in `-p` there is nobody to answer one.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vinta-ai-workflows",
3
- "version": "0.7.0-alpha6",
3
+ "version": "0.7.0-alpha8",
4
4
  "description": "Bootstrap AI tooling (AGENTS.md, skills, sub-agents) across Claude Code, Codex, Cursor, and VS Code + GitHub Copilot.",
5
5
  "type": "module",
6
6
  "bin": {