flowviant 0.22.0 → 0.23.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.
@@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs';
4
4
  import { join } from 'node:path';
5
5
  import { homedir } from 'node:os';
6
6
 
7
- export const VERSION = '0.22.0';
7
+ export const VERSION = '0.23.0';
8
8
 
9
9
  // Credential stored by `flowviant login` (device auth) — the no-token,
10
10
  // no-env-var path. An explicit --fleet flag or FLOWVIANT_FLEET env still wins.
package/bin/lib/fleet.mjs CHANGED
@@ -515,11 +515,17 @@ export async function runFleetDaemon() {
515
515
  }
516
516
  void postWikiProgress(frame());
517
517
  };
518
+ // Heartbeat: re-send the current frame every 5s even with no new stream
519
+ // event, so the app's freshness window never lapses during a long
520
+ // thinking block or slow tool (which emit nothing until they finish) —
521
+ // otherwise the cover would flap back to the empty state mid-sweep.
522
+ let heartbeat = null;
518
523
  try {
519
524
  // Immediate frame so the cover shows the daemon feed right away (the
520
525
  // "reading your code" phase), not a static message, while Claude warms up.
521
526
  feed.push('starting…');
522
527
  await postWikiProgress(frame(), true);
528
+ heartbeat = setInterval(() => void postWikiProgress(frame(), true), 5000);
523
529
  if (!existsSync(wikiWt)) {
524
530
  try {
525
531
  git(['worktree', 'add', '--detach', wikiWt, baseRef], repoRoot);
@@ -580,6 +586,7 @@ export async function runFleetDaemon() {
580
586
  } catch (e) {
581
587
  warn(`wiki ${task.type} failed: ${e.message}`);
582
588
  } finally {
589
+ if (heartbeat) clearInterval(heartbeat);
583
590
  // Terminal frame so the app cover clears promptly (don't wait for the
584
591
  // freshness window to lapse). force-sent past the throttle.
585
592
  await postWikiProgress(frame({ done: true }), true);
@@ -626,6 +633,14 @@ export async function runFleetDaemon() {
626
633
  if (!connected) {
627
634
  connected = true;
628
635
  ok('Connected to Flowviant — watching your roster.');
636
+ // Name the scoped project so a mismatch (this daemon serves project A, but
637
+ // you're viewing project B's wiki) is obvious instead of a silent no-op.
638
+ if (roster.project) {
639
+ note(
640
+ `${c.cyan('project')} · ${c.bold(roster.project.name)} ${c.dim(`(${roster.project.id})`)}`
641
+ );
642
+ note(c.dim(' wiki + agents stream to THIS project — view its Code canvas in Flowviant.'));
643
+ }
629
644
  }
630
645
  if (roster.mcpUrl) mcpUrl = roster.mcpUrl;
631
646
  if (roster.leaseTtlSeconds) leaseTtlSeconds = roster.leaseTtlSeconds;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowviant",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Run your own Claude Code as headless build agents for Flowviant — on your own credentials. Claims dispatched work, opens PRs, captures review evidence, and routes questions back to you.",
5
5
  "type": "module",
6
6
  "bin": {