flowviant 0.107.0 → 0.108.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.
@@ -61,7 +61,13 @@ export function mergeOutward({
61
61
  if (current === base) {
62
62
  const dirty = String(git(['status', '--porcelain', '--untracked-files=no'], repoRoot)).trim();
63
63
  if (dirty) {
64
- throw new Error(`this repository has no remote, so the merge lands on ${base} in ${repoRoot} itself, and that checkout has uncommitted changes. Commit or stash them, then approve again.`);
64
+ // THE PERSON'S FIX (0.108.0): nothing on the branch is wrong, so the
65
+ // agent merge path reports `fix: 'person'` and the server queues no
66
+ // resolve turn — the agent cannot commit somebody's checkout.
67
+ throw Object.assign(
68
+ new Error(`this repository has no remote, so the merge lands on ${base} in ${repoRoot} itself, and that checkout has uncommitted changes. Commit or stash them, then approve again.`),
69
+ { fix: 'person' }
70
+ );
65
71
  }
66
72
  git(['merge', '--ff-only', merged], repoRoot);
67
73
  } else {
@@ -214,6 +214,7 @@ export function createWorkAgentMerges({
214
214
  await report({
215
215
  agentId,
216
216
  ok: false,
217
+ fix: 'person',
217
218
  detail: ghDown.missing
218
219
  ? 'this project merges through pull requests, and the GitHub CLI (gh) is not installed on this machine'
219
220
  : `this project merges through pull requests, and gh is not signed in here: ${ghDown.error}`,
@@ -225,6 +226,7 @@ export function createWorkAgentMerges({
225
226
  await report({
226
227
  agentId,
227
228
  ok: false,
229
+ fix: 'person',
228
230
  detail: `this agent is on the base branch (${prBase}) — there is nothing to open a pull request from`,
229
231
  });
230
232
  return;
@@ -271,7 +273,9 @@ export function createWorkAgentMerges({
271
273
  // token in its userinfo — so this one line is the only place on the
272
274
  // agent merge path that can leak a credential into a stored,
273
275
  // team-visible `mergeError`.
274
- await report({ agentId, ok: false, detail: envScrub(ghFirstLine(e)) });
276
+ // A refused push is the remote or its login (no `origin`, a
277
+ // credential, a protected ref) — the person's to fix, not the branch.
278
+ await report({ agentId, ok: false, fix: 'person', detail: envScrub(ghFirstLine(e)) });
275
279
  return;
276
280
  }
277
281
  const pr = ensureOpenPr(head, prBase, { cwd: repoRoot });
@@ -279,6 +283,7 @@ export function createWorkAgentMerges({
279
283
  await report({
280
284
  agentId,
281
285
  ok: false,
286
+ fix: 'person',
282
287
  detail: `the open pull request for ${head} targets ${pr.wrongBase}, not ${prBase} — retarget or close it, then approve again`,
283
288
  });
284
289
  return;
@@ -344,6 +349,11 @@ export function createWorkAgentMerges({
344
349
  await report({
345
350
  agentId,
346
351
  ok: false,
352
+ // WHOSE FIX IT IS (0.108.0), when the merge said: a refusal about
353
+ // the person's side (`shipMerge.mjs`'s dirty checkout) queues no
354
+ // resolve turn on the server. A conflict says nothing, and the
355
+ // agent resolves it in its worktree as before.
356
+ ...(e?.fix === 'person' ? { fix: 'person' } : {}),
347
357
  detail: envScrub(String(e?.message || e)).slice(0, 2000),
348
358
  });
349
359
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowviant",
3
- "version": "0.107.0",
3
+ "version": "0.108.0",
4
4
  "description": "Run your own coding CLIs as build agents for Flowviant — Claude Code, Codex or Antigravity, on your own credentials. Holds your sessions, keeps a worktree per tab, and ships branches on your word.",
5
5
  "type": "module",
6
6
  "bin": {