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.
- package/bin/lib/config.mjs +1 -1
- package/bin/lib/fleet.mjs +15 -0
- package/package.json +1 -1
package/bin/lib/config.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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": {
|