@@ -33,10 +33,6 @@ pub enum HookCmd {
3333 TaskCompleted ,
3434 /// Rewrite Bash commands via rtk token optimizer (PreToolUse hook).
3535 RtkRewrite ,
36- /// Start flowctl daemon in background (SessionStart hook).
37- DaemonStart ,
38- /// Stop flowctl daemon (Stop hook).
39- DaemonStop ,
4036}
4137
4238pub fn dispatch ( cmd : & HookCmd ) {
@@ -48,8 +44,6 @@ pub fn dispatch(cmd: &HookCmd) {
4844 HookCmd :: SubagentContext => cmd_subagent_context ( ) ,
4945 HookCmd :: TaskCompleted => cmd_task_completed ( ) ,
5046 HookCmd :: RtkRewrite => cmd_rtk_rewrite ( ) ,
51- HookCmd :: DaemonStart => cmd_daemon_start ( ) ,
52- HookCmd :: DaemonStop => cmd_daemon_stop ( ) ,
5347 }
5448}
5549
@@ -105,21 +99,9 @@ fn cmd_auto_memory() {
10599 std:: process:: exit ( 0 ) ;
106100}
107101
108- /// Find . flow/ directory from CWD upward .
102+ /// Find flow directory — delegates to shared resolver (git-common-dir aware) .
109103fn get_flow_dir ( ) -> PathBuf {
110- let cwd = env:: current_dir ( ) . unwrap_or_else ( |_| PathBuf :: from ( "." ) ) ;
111- let mut p = cwd. as_path ( ) ;
112- loop {
113- let candidate = p. join ( ".flow" ) ;
114- if candidate. is_dir ( ) {
115- return candidate;
116- }
117- match p. parent ( ) {
118- Some ( parent) => p = parent,
119- None => break ,
120- }
121- }
122- cwd. join ( ".flow" )
104+ super :: helpers:: get_flow_dir ( )
123105}
124106
125107/// Check if auto-memory is explicitly disabled in config.
@@ -1809,94 +1791,6 @@ fn cmd_rtk_rewrite() {
18091791 }
18101792}
18111793
1812- // ═══════════════════════════════════════════════════════════════════════
1813- // Daemon Start / Stop
1814- // ═══════════════════════════════════════════════════════════════════════
1815-
1816- fn daemon_pid_file ( ) -> PathBuf {
1817- let flow_dir = get_flow_dir ( ) ;
1818- let canonical = fs:: canonicalize ( & flow_dir)
1819- . unwrap_or_else ( |_| flow_dir. to_path_buf ( ) ) ;
1820- let hash = md5_hex ( canonical. to_string_lossy ( ) . as_bytes ( ) ) ;
1821- PathBuf :: from ( format ! (
1822- "{}/flowctl-daemon-{hash}.pid" ,
1823- env:: var( "TMPDIR" ) . unwrap_or_else( |_| "/tmp" . into( ) )
1824- ) )
1825- }
1826-
1827- fn cmd_daemon_start ( ) {
1828- let _input = read_stdin_json ( ) ;
1829-
1830- let flow_dir = get_flow_dir ( ) ;
1831- if !flow_dir. exists ( ) {
1832- std:: process:: exit ( 0 ) ;
1833- }
1834-
1835- let pid_file = daemon_pid_file ( ) ;
1836-
1837- // If PID file exists and process is alive, exit (already running)
1838- if pid_file. exists ( ) {
1839- if let Ok ( contents) = fs:: read_to_string ( & pid_file) {
1840- if let Ok ( pid) = contents. trim ( ) . parse :: < u32 > ( ) {
1841- let alive = Command :: new ( "kill" )
1842- . args ( [ "-0" , & pid. to_string ( ) ] )
1843- . stdout ( std:: process:: Stdio :: null ( ) )
1844- . stderr ( std:: process:: Stdio :: null ( ) )
1845- . status ( )
1846- . map ( |s| s. success ( ) )
1847- . unwrap_or ( false ) ;
1848- if alive {
1849- std:: process:: exit ( 0 ) ;
1850- }
1851- }
1852- }
1853- }
1854-
1855- let self_exe = match std:: env:: current_exe ( ) {
1856- Ok ( p) if p. exists ( ) => p,
1857- _ => std:: process:: exit ( 0 ) ,
1858- } ;
1859-
1860- let child = Command :: new ( & self_exe)
1861- . args ( [ "serve" , "--port" , "17319" ] )
1862- . stdout ( std:: process:: Stdio :: null ( ) )
1863- . stderr ( std:: process:: Stdio :: null ( ) )
1864- . spawn ( ) ;
1865-
1866- match child {
1867- Ok ( c) => {
1868- let _ = fs:: write ( & pid_file, c. id ( ) . to_string ( ) ) ;
1869- println ! ( "flowctl dashboard: http://127.0.0.1:17319" ) ;
1870- }
1871- Err ( _) => {
1872- // Silently fail — daemon is optional
1873- }
1874- }
1875-
1876- std:: process:: exit ( 0 ) ;
1877- }
1878-
1879- fn cmd_daemon_stop ( ) {
1880- let _input = read_stdin_json ( ) ;
1881-
1882- let pid_file = daemon_pid_file ( ) ;
1883-
1884- if pid_file. exists ( ) {
1885- if let Ok ( contents) = fs:: read_to_string ( & pid_file) {
1886- if let Ok ( pid) = contents. trim ( ) . parse :: < u32 > ( ) {
1887- let _ = Command :: new ( "kill" )
1888- . arg ( pid. to_string ( ) )
1889- . stdout ( std:: process:: Stdio :: null ( ) )
1890- . stderr ( std:: process:: Stdio :: null ( ) )
1891- . status ( ) ;
1892- }
1893- }
1894- let _ = fs:: remove_file ( & pid_file) ;
1895- }
1896-
1897- std:: process:: exit ( 0 ) ;
1898- }
1899-
19001794// ── Shared helpers ────────────────────────────────────────────────────
19011795
19021796fn read_stdin_json ( ) -> Value {
0 commit comments