fluxflow-cli 4.21.5 → 4.22.1

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.
@@ -1,4 +1,4 @@
1
- import{a as i}from"./chunk-ORXN6WUW.js";import{a as f}from"./chunk-Y5JU726N.js";import"./chunk-SIINYZWE.js";import"./chunk-RI37VZYB.js";var m=async(k,c={})=>{let l=f(k),n=l.method,d=l.id,a=c.chatId;if(!c.systemSettings?.advanceRollback)return"ERROR: Advance Rollback feature is currently disabled in settings under Security. Tell user to enable it.";if(!a)return"ERROR: No active chat transaction found for rollback.";if(n==="getCheckpoint"){let r=await i.getCheckpoints(a);if(r.length===0)return"No checkpoints available.";let s={write_file:"WriteFile",update_file:"PatchFile",view_file:"ReadFile",read_folder:"ReadFolder",exec_command:"Run",web_search:"WebSearch",web_scrape:"WebScrape",search_keyword:"SearchKeyword",CodeSearch:"SearchKeyword",code_search:"SearchKeyword",write_pdf:"WritePDF",write_docx:"WriteDoc",generate_image:"GenerateImage",file_map:"FileMap",todo:"Todo",goal:"Goal",Goal:"Goal",await:"Await",ask:"AskUser",ask_user:"AskUser",AskUser:"AskUser",askuser:"AskUser",invoke:"Invoke",invokesync:"InvokeSync",getprogress:"GetProgress",cancel:"Cancel",emergency_rollback:"EmergencyRollback",emergencyrollback:"EmergencyRollback"},t=e=>s[e]||s[e.toLowerCase()]||e,o=`Available checkpoints for rollback:
1
+ import{a as i}from"./chunk-ORXN6WUW.js";import{a as f}from"./chunk-Y5JU726N.js";import"./chunk-SIINYZWE.js";import"./chunk-RI37VZYB.js";var m=async(k,c={})=>{let l=f(k),s=l.method,d=l.id,a=c.chatId;if(!c.systemSettings?.advanceRollback)return"ERROR: Advance Rollback feature is currently disabled in settings under Security. Tell user to enable it if needed.";if(!a)return"ERROR: No active chat transaction found for rollback.";if(s==="getCheckpoint"){let r=await i.getCheckpoints(a);if(r.length===0)return"No checkpoints available.";let n={write_file:"WriteFile",update_file:"PatchFile",view_file:"ReadFile",read_folder:"ReadFolder",exec_command:"Run",web_search:"WebSearch",web_scrape:"WebScrape",search_keyword:"SearchKeyword",CodeSearch:"SearchKeyword",code_search:"SearchKeyword",write_pdf:"WritePDF",write_docx:"WriteDoc",generate_image:"GenerateImage",file_map:"FileMap",todo:"Todo",goal:"Goal",Goal:"Goal",await:"Await",ask:"AskUser",ask_user:"AskUser",AskUser:"AskUser",askuser:"AskUser",invoke:"Invoke",invokesync:"InvokeSync",getprogress:"GetProgress",cancel:"Cancel",emergency_rollback:"EmergencyRollback",emergencyrollback:"EmergencyRollback"},t=e=>n[e]||n[e.toLowerCase()]||e,o=`Available checkpoints for rollback:
2
2
 
3
3
  `;for(let e of r)if(e.id==="initial")o+=`--- Initial State (id: initial) ---
4
4
  Tools Used: User Prompted for task
@@ -6,7 +6,7 @@ Tools Used: User Prompted for task
6
6
  `;else{let p=e.id.replace("turn_",""),h=e.toolsUsed&&e.toolsUsed.length>0?e.toolsUsed.map(t).join(", "):"None";o+=`--- Turn ${p} (id: ${e.id}) ---
7
7
  Tools Used: ${h}
8
8
 
9
- `}return o.trim()}else if(n==="forceRevert"){if(!d)return"ERROR: Missing required parameter 'id' for forceRevert.";try{let r=await i.rollbackToCheckpoint(a,d),{checkpointId:s,stats:t}=r,o=t.restored+t.replaced+t.failed.length,e=`SUCCESS: Repository rolled back to checkpoint [${s}].
9
+ `}return o.trim()}else if(s==="forceRevert"){if(!d)return"ERROR: Missing required parameter 'id' for forceRevert.";try{let r=await i.rollbackToCheckpoint(a,d),{checkpointId:n,stats:t}=r,o=t.restored+t.replaced+t.failed.length,e=`SUCCESS: Repository rolled back to checkpoint [${n}].
10
10
 
11
11
  `;return e+=`Stats:
12
12
  `,e+=` Restored : ${t.restored} file${t.restored!==1?"s":""} (new to workspace)
@@ -15,4 +15,4 @@ Tools Used: ${h}
15
15
  ${t.failed.join(`
16
16
  `)}`),e+=`
17
17
  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500-
18
- `,e+=` Total : ${o} file${o!==1?"s":""} processed`,e}catch(r){return`ERROR: ${r.message}`}}else return`ERROR: Invalid method "${n}". Use "getCheckpoint" or "forceRevert".`};export{m as emergency_rollback};
18
+ `,e+=` Total : ${o} file${o!==1?"s":""} processed`,e}catch(r){return`ERROR: ${r.message}`}}else return`ERROR: Invalid method "${s}". Use "getCheckpoint" or "forceRevert".`};export{m as emergency_rollback};
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i}from"./chunk-VNDYRWUJ.js";import"./chunk-A4CCI7SQ.js";import"./chunk-Y5JU726N.js";export{d as activeChildProcess,h as adjustWindowsCommand,c as cleanTerminalOutput,i as exec_command,e as isActiveCommandPty,a as isPtyAvailable,b as stripAnsi,g as terminateActiveCommand,f as writeToActiveCommand};
1
+ import{a,b,c,d,e,f,g,h,i}from"./chunk-57DBJNK7.js";import"./chunk-IU4E277E.js";import"./chunk-Y5JU726N.js";export{d as activeChildProcess,h as adjustWindowsCommand,c as cleanTerminalOutput,i as exec_command,e as isActiveCommandPty,a as isPtyAvailable,b as stripAnsi,g as terminateActiveCommand,f as writeToActiveCommand};
@@ -1,6 +1,6 @@
1
- import{a as k,c as d}from"./chunk-56EJGQU3.js";import{a as b}from"./chunk-Y5JU726N.js";var I=async(w,s={})=>{let{runSubagent:U}=await import("./ai-OGOXSATY.js"),l=b(w),c=l.task||l.instruction||l.prompt,C=l.model||null,E=l.title||null,m=l.tools||null;if(!c)return'ERROR: Missing "task" argument for invoke.';let f=null;if(m)try{let t=m.trim();t.startsWith("[")&&t.endsWith("]")&&(t=t.substring(1,t.length-1)),f=t.split(",").map(n=>n.trim().replace(/^["']|["']$/g,"")).filter(Boolean)}catch{}let i=`subagent-${Date.now()}-${Math.floor(Math.random()*1e3)}`,h=null,S=null,$=new Promise((t,n)=>{h=t,S=n}),e={id:i,title:E||c.substring(0,30),task:c,status:"running",startedAt:Date.now(),lastChunkTime:Date.now(),wps:0,questions:[],pendingSteerMessages:[],steer:t=>{t&&e.pendingSteerMessages.push(t)},completionPromise:$,_resolveCompletion:h,_rejectCompletion:S,progress:[]},r={chunks:[],totalWords:0};k.push(e),s.onSubagentUpdate&&s.onSubagentUpdate();let a=[],M={...s,taskId:i,onAskMain:async t=>{let n=`q-${Date.now()}-${Math.floor(Math.random()*1e3)}`,o=null,p=new Promise(g=>{o=g}),u={id:n,question:t,answered:!1,answer:null,askedAt:Date.now(),_resolve:o};return e.questions.push(u),e.status="waiting",s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" is WAITING FOR YOUR INPUT: "${t}"
1
+ import{a as k,c as d}from"./chunk-56EJGQU3.js";import{a as b}from"./chunk-Y5JU726N.js";var I=async(w,s={})=>{let{runSubagent:U}=await import("./ai-RFTQLPYD.js"),l=b(w),c=l.task||l.instruction||l.prompt,C=l.model||null,E=l.title||null,m=l.tools||null;if(!c)return'ERROR: Missing "task" argument for invoke.';let f=null;if(m)try{let t=m.trim();t.startsWith("[")&&t.endsWith("]")&&(t=t.substring(1,t.length-1)),f=t.split(",").map(n=>n.trim().replace(/^["']|["']$/g,"")).filter(Boolean)}catch{}let i=`subagent-${Date.now()}-${Math.floor(Math.random()*1e3)}`,h=null,S=null,$=new Promise((t,n)=>{h=t,S=n}),e={id:i,title:E||c.substring(0,30),task:c,status:"running",startedAt:Date.now(),lastChunkTime:Date.now(),wps:0,questions:[],pendingSteerMessages:[],steer:t=>{t&&e.pendingSteerMessages.push(t)},completionPromise:$,_resolveCompletion:h,_rejectCompletion:S,progress:[]},r={chunks:[],totalWords:0};k.push(e),s.onSubagentUpdate&&s.onSubagentUpdate();let a=[],M={...s,taskId:i,onAskMain:async t=>{let n=`q-${Date.now()}-${Math.floor(Math.random()*1e3)}`,o=null,p=new Promise(g=>{o=g}),u={id:n,question:t,answered:!1,answer:null,askedAt:Date.now(),_resolve:o};return e.questions.push(u),e.status="waiting",s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" is WAITING FOR YOUR INPUT: "${t}"
2
2
  Respond using tool: [tool:Answer(id="${i}", answer="...")]
3
3
  [/SYSTEM]`),await p},onVisualFeedback:t=>{e.lastChunkTime=Date.now();let n=t.replace(/\x1b\[[0-9;]*m/g,""),o=n.match(/[✔✘✗✖🔍📖→➕↻•]\s*([A-Za-z0-9\s-]+)/);o?e.currentTool=o[1].trim():e.currentTool=n,s.onSubagentUpdate&&s.onSubagentUpdate()},onTokenChunk:(t,n)=>{let o=Date.now();if(e.lastChunkTime=o,e.currentTool="Thinking",typeof n=="number"&&n>0){r.totalWords+=n,r.chunks.push({time:o,words:n});let p=o-400;if(r.chunks=r.chunks.filter(u=>u.time>=p),r.chunks.length>0){let u=r.chunks.reduce((_,A)=>_+A.words,0),T=r.chunks[0].time,g=Math.max(.4,(o-T)/1e3);e.wps=Math.round(u/g)}}s.onSubagentUpdate&&s.onSubagentUpdate()}};return U(c,M,C,f,50,t=>{if(e.status==="cancelled")return;if(t.startsWith("[Subagent Turn")&&a.length>0&&(e.progress.push([...a]),a=[]),t.includes("[Executing Tool]")){let o=t.match(/\[Executing Tool\]\s*([a-zA-Z0-9_]+)/);o&&(!e.currentTool||e.currentTool==="Thinking")&&(e.currentTool=o[1])}let n=t;if(n.startsWith("[Tool Result]")){let o=n.split(`
4
4
  `);o.length>5&&(n=o.slice(0,4).join(`
5
5
  `)+`
6
- ... [Content/Diff Truncated from Logs] ...`)}a.push(n),s.onSubagentUpdate&&s.onSubagentUpdate()},!0).then(t=>{if(e.status==="cancelled"){e._resolveCompletion&&e._resolveCompletion(t);return}a.length>0&&(e.progress.push([...a]),a=[]),e.status="completed",e.finalAnswer=t,s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" (id: ${i}) has FINISHED. Call GetProgress(id="${i}") to see the final result. [/SYSTEM]`),e._resolveCompletion&&e._resolveCompletion(t)}).catch(async t=>{let{isTerminationSignaled:n}=await import("./ai-OGOXSATY.js");if(t.message==="Subagent task was cancelled."||e.status==="cancelled"||n()){e.status="cancelled",a.push("[SUBAGENT CANCELLED] Task was cancelled."),e.progress.push([...a]),s.onSubagentUpdate&&s.onSubagentUpdate(),e._resolveCompletion&&e._resolveCompletion(null);return}a.push(`[SUBAGENT FAILURE] Error: ${t.message}`),e.progress.push([...a]),e.status="failed",e.error=t.message,s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" (id: ${i}) FAILED with error: ${t.message}. [/SYSTEM]`),e._rejectCompletion&&e._rejectCompletion(t)}),`SUCCESS: Background subagent started. Task ID: ${i}`};export{I as invoke};
6
+ ... [Content/Diff Truncated from Logs] ...`)}a.push(n),s.onSubagentUpdate&&s.onSubagentUpdate()},!0).then(t=>{if(e.status==="cancelled"){e._resolveCompletion&&e._resolveCompletion(t);return}a.length>0&&(e.progress.push([...a]),a=[]),e.status="completed",e.finalAnswer=t,s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" (id: ${i}) has FINISHED. Call GetProgress(id="${i}") to see the final result. [/SYSTEM]`),e._resolveCompletion&&e._resolveCompletion(t)}).catch(async t=>{let{isTerminationSignaled:n}=await import("./ai-RFTQLPYD.js");if(t.message==="Subagent task was cancelled."||e.status==="cancelled"||n()){e.status="cancelled",a.push("[SUBAGENT CANCELLED] Task was cancelled."),e.progress.push([...a]),s.onSubagentUpdate&&s.onSubagentUpdate(),e._resolveCompletion&&e._resolveCompletion(null);return}a.push(`[SUBAGENT FAILURE] Error: ${t.message}`),e.progress.push([...a]),e.status="failed",e.error=t.message,s.onSubagentUpdate&&s.onSubagentUpdate(),d(`[SYSTEM] Background subagent "${e.title}" (id: ${i}) FAILED with error: ${t.message}. [/SYSTEM]`),e._rejectCompletion&&e._rejectCompletion(t)}),`SUCCESS: Background subagent started. Task ID: ${i}`};export{I as invoke};
@@ -1,3 +1,3 @@
1
- import{a as o}from"./chunk-Y5JU726N.js";var k=async(b,t={})=>{let{runSubagent:u}=await import("./ai-OGOXSATY.js"),s=o(b),a=s.task||s.instruction||s.prompt,m=s.model||null,l=s.tools||null;if(!a)return'ERROR: Missing "task" argument for invokeSync.';let r=null;if(l)try{let e=l.trim();e.startsWith("[")&&e.endsWith("]")&&(e=e.substring(1,e.length-1)),r=e.split(",").map(i=>i.trim().replace(/^["']|["']$/g,"")).filter(Boolean)}catch{}let n=s.title||a.substring(0,30);try{t.onVisualFeedback&&t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n}`);let e=await u(a,t,m,r,50);return t.onVisualFeedback&&t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n} [COMPLETED]
2
- `),e}catch(e){let{isTerminationSignaled:i}=await import("./ai-OGOXSATY.js"),c=e.message==="Subagent task was cancelled by user."||i();if(t.onVisualFeedback){let d=c?"[CANCELLED]":"[FAILED]";t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n} ${d}
1
+ import{a as o}from"./chunk-Y5JU726N.js";var k=async(b,t={})=>{let{runSubagent:u}=await import("./ai-RFTQLPYD.js"),s=o(b),a=s.task||s.instruction||s.prompt,m=s.model||null,l=s.tools||null;if(!a)return'ERROR: Missing "task" argument for invokeSync.';let r=null;if(l)try{let e=l.trim();e.startsWith("[")&&e.endsWith("]")&&(e=e.substring(1,e.length-1)),r=e.split(",").map(i=>i.trim().replace(/^["']|["']$/g,"")).filter(Boolean)}catch{}let n=s.title||a.substring(0,30);try{t.onVisualFeedback&&t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n}`);let e=await u(a,t,m,r,50);return t.onVisualFeedback&&t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n} [COMPLETED]
2
+ `),e}catch(e){let{isTerminationSignaled:i}=await import("./ai-RFTQLPYD.js"),c=e.message==="Subagent task was cancelled by user."||i();if(t.onVisualFeedback){let d=c?"[CANCELLED]":"[FAILED]";t.onVisualFeedback(`\x1B[95mSubAgent\x1B[0m: \x1B[32mGeneralist\x1B[0m \u2192 ${n} ${d}
3
3
  `)}return`ERROR: Subagent execution failed: ${e.message}`}};export{k as invokeSync};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-2KD7V3OK.js";import"./chunk-Y5JU726N.js";import"./chunk-RI37VZYB.js";export{a as view_file};
package/dist/cli.js CHANGED
@@ -51,6 +51,7 @@ Usage: fluxflow --export error`),process.exit(1)}if(V&&(console.log(`v${n}`),pro
51
51
  /thinking <level> [--map <target>] Set AI reasoning depth or map thinking levels
52
52
  /model <model_id> [-sv|-rm|-rn|-df] Switch or manage models for active provider
53
53
  /wildcard-tooling Use if the model lacks Tooling Capability
54
+ /wildercard-tooling Extended version of /wildcard-tooling
54
55
  /provider Select AI Provider
55
56
  /settings Configure system preferences
56
57
  /theme Customize UI color theme
@@ -65,23 +66,24 @@ Usage: fluxflow --export error`),process.exit(1)}if(V&&(console.log(`v${n}`),pro
65
66
  /docs View documentation
66
67
  /fluxflow init Create FluxFlow.md template
67
68
  /update check Check for new version
68
- /update latest Install latest release`),process.exit(0)),z){let C=t[1]||"latest";if(C==="check"){let w=t[2]==="latest";try{let y=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;y||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log(w?`Latest version: v${y}`:y!==n?`A new version of FluxFlow is available: v${y} (current: v${n}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${n}).`)}catch(c){console.error("Error checking for updates:",c.message),process.exit(1)}process.exit(0)}else if(C==="latest"){console.log("Checking latest version and settings...");try{let p=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;p||(console.error("Error: Could not retrieve latest version."),process.exit(1)),p===n&&(console.log(`FluxFlow is already up to date (v${n}).`),process.exit(0));let y=async()=>{let s=(await import("react")).default,{useState:R}=s,{render:L,Box:a,Text:E}=await import("ink"),k=(await import("ink-select-input")).default,j=(await import("ink-text-input")).default;return new Promise(G=>{let Y=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],q=({label:M,isSelected:v})=>s.createElement(a,{width:"100%"},s.createElement(E,{bold:v},"\u2514\u2500 ",v?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",M)),I,H=()=>{let[M,v]=R("select"),[N,e]=R(""),l=F=>{F.value==="custom"?v("custom"):U({manager:F.value})},g=F=>{U({manager:"custom",customCommand:F})};return M==="custom"?s.createElement(a,{flexDirection:"column",marginY:1},s.createElement(a,{marginBottom:1},s.createElement(E,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),s.createElement(a,{flexDirection:"row"},s.createElement(E,{color:"cyan",bold:!0}," \u276F "),s.createElement(j,{value:N,onChange:e,onSubmit:g})),s.createElement(a,{marginTop:1},s.createElement(E,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):s.createElement(a,{flexDirection:"column",marginY:1},s.createElement(a,{marginBottom:1},s.createElement(E,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),s.createElement(k,{items:Y,onSelect:l,itemComponent:q,indicatorComponent:()=>null}))},U=M=>{I&&I(),G(M)},{unmount:W}=L(s.createElement(H,null));I=W})},i,A="",$;try{let{loadSettings:s}=await import("./chunks/settings-6BPZ6DG5.js");$=await s(),i=$?.systemSettings?.updateManager||$?.updateManager}catch{}if(!i){let s=await y();i=s.manager,A=s.customCommand}let m="";i==="pnpm"?m=`pnpm add -g fluxflow-cli@${p}`:i==="bun"?m=`bun add -g fluxflow-cli@${p}`:i==="yarn"?m=`yarn global add fluxflow-cli@${p}`:i==="custom"?m=A||$?.customUpdateCommand||`npm install -g fluxflow-cli@${p}`:m=`npm install -g fluxflow-cli@${p}`,console.log(`Updating FluxFlow to v${p} using ${i}...`),console.log(`Running: ${m}`);let{execSync:S}=await import("child_process");S(m,{stdio:"inherit"}),console.log(`\x1B[32m\u2705 Update successful! FluxFlow updated to v${p}.\x1B[0m`)}catch(w){console.error("\x1B[31m\u274C Update failed:\x1B[0m",w.message),process.exit(1)}process.exit(0)}else console.error("Unknown update command. Available options: --update, --update check, --update check latest, --update latest"),process.exit(1)}}let{default:re}=await import("react"),{render:ne}=await import("ink"),{default:ie}=await import("./chunks/app-WAYY665D.js");process.env.NODE_NO_WARNINGS="1";let ae=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],le=console.log,ce=console.warn,pe=console.error,B=o=>{let d=o.map(String).join(" ");return ae.some(r=>d.includes(r))};console.log=(...o)=>!B(o)&&le(...o),console.warn=(...o)=>!B(o)&&ce(...o),console.error=(...o)=>!B(o)&&pe(...o);let D=t.findIndex(o=>o==="--cwd"||o==="--path");if(D!==-1&&D+1<t.length){let o=t[D+1],d=await import("path"),r=await import("fs-extra"),u=d.default.resolve(o);try{r.default.existsSync(u)&&r.default.statSync(u).isDirectory()?process.chdir(u):(console.error(`[ERROR] Directory not found: "${o}"`),process.exit(0))}catch(h){console.error(`[ERROR] Failed to change directory to "${o}": ${h.message}`),process.exit(0)}}let K=t.findIndex(o=>o==="-p"||o==="--prompt");if(K!==-1){let o=t.includes("--new")||t.includes("-n"),r=t.slice(K+1).filter(e=>e!=="-n"&&e!=="--new")[0],u=t.findIndex(e=>e==="-r"||e==="--run"),h=null,n=null;if(u!==-1&&u+1<t.length){h=t[u+1];try{let{execSync:e}=await import("child_process");n=e(h,{encoding:"utf8",stdio:["ignore","pipe","pipe"]}).trim()}catch(e){n=(e.stdout?e.stdout.toString().trim():"")||(e.stderr?e.stderr.toString().trim():"")||e.message}}if(n){let{stripAnsi:e}=await import("./chunks/exec_command-XDQLYK3G.js");n=e(n).trim(),r?r=`Stdin Context (${h}):
69
+ /update latest Install latest release`),process.exit(0)),z){let C=t[1]||"latest";if(C==="check"){let w=t[2]==="latest";try{let y=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;y||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log(w?`Latest version: v${y}`:y!==n?`A new version of FluxFlow is available: v${y} (current: v${n}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${n}).`)}catch(c){console.error("Error checking for updates:",c.message),process.exit(1)}process.exit(0)}else if(C==="latest"){console.log("Checking latest version and settings...");try{let p=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;p||(console.error("Error: Could not retrieve latest version."),process.exit(1)),p===n&&(console.log(`FluxFlow is already up to date (v${n}).`),process.exit(0));let y=async()=>{let s=(await import("react")).default,{useState:R}=s,{render:L,Box:a,Text:$}=await import("ink"),k=(await import("ink-select-input")).default,j=(await import("ink-text-input")).default;return new Promise(G=>{let Y=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],q=({label:M,isSelected:v})=>s.createElement(a,{width:"100%"},s.createElement($,{bold:v},"\u2514\u2500 ",v?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",M)),I,H=()=>{let[M,v]=R("select"),[N,e]=R(""),l=F=>{F.value==="custom"?v("custom"):U({manager:F.value})},g=F=>{U({manager:"custom",customCommand:F})};return M==="custom"?s.createElement(a,{flexDirection:"column",marginY:1},s.createElement(a,{marginBottom:1},s.createElement($,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),s.createElement(a,{flexDirection:"row"},s.createElement($,{color:"cyan",bold:!0}," \u276F "),s.createElement(j,{value:N,onChange:e,onSubmit:g})),s.createElement(a,{marginTop:1},s.createElement($,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):s.createElement(a,{flexDirection:"column",marginY:1},s.createElement(a,{marginBottom:1},s.createElement($,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),s.createElement(k,{items:Y,onSelect:l,itemComponent:q,indicatorComponent:()=>null}))},U=M=>{I&&I(),G(M)},{unmount:W}=L(s.createElement(H,null));I=W})},i,A="",E;try{let{loadSettings:s}=await import("./chunks/settings-6BPZ6DG5.js");E=await s(),i=E?.systemSettings?.updateManager||E?.updateManager}catch{}if(!i){let s=await y();i=s.manager,A=s.customCommand}let m="";i==="pnpm"?m=`pnpm add -g fluxflow-cli@${p}`:i==="bun"?m=`bun add -g fluxflow-cli@${p}`:i==="yarn"?m=`yarn global add fluxflow-cli@${p}`:i==="custom"?m=A||E?.customUpdateCommand||`npm install -g fluxflow-cli@${p}`:m=`npm install -g fluxflow-cli@${p}`,console.log(`Updating FluxFlow to v${p} using ${i}...`),console.log(`Running: ${m}`);let{execSync:S}=await import("child_process");S(m,{stdio:"inherit"}),console.log(`\x1B[32m\u2705 Update successful! FluxFlow updated to v${p}.\x1B[0m`)}catch(w){console.error("\x1B[31m\u274C Update failed:\x1B[0m",w.message),process.exit(1)}process.exit(0)}else console.error("Unknown update command. Available options: --update, --update check, --update check latest, --update latest"),process.exit(1)}}let{default:re}=await import("react"),{render:ne}=await import("ink"),{default:ie}=await import("./chunks/app-D7ZS4M6W.js");process.env.NODE_NO_WARNINGS="1";let ae=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],le=console.log,ce=console.warn,pe=console.error,B=o=>{let d=o.map(String).join(" ");return ae.some(r=>d.includes(r))};console.log=(...o)=>!B(o)&&le(...o),console.warn=(...o)=>!B(o)&&ce(...o),console.error=(...o)=>!B(o)&&pe(...o);let D=t.findIndex(o=>o==="--cwd"||o==="--path");if(D!==-1&&D+1<t.length){let o=t[D+1],d=await import("path"),r=await import("fs-extra"),u=d.default.resolve(o);try{r.default.existsSync(u)&&r.default.statSync(u).isDirectory()?process.chdir(u):(console.error(`[ERROR] Directory not found: "${o}"`),process.exit(0))}catch(h){console.error(`[ERROR] Failed to change directory to "${o}": ${h.message}`),process.exit(0)}}let K=t.findIndex(o=>o==="-p"||o==="--prompt");if(K!==-1){let o=t.includes("--new")||t.includes("-n"),r=t.slice(K+1).filter(e=>e!=="-n"&&e!=="--new")[0],u=t.findIndex(e=>e==="-r"||e==="--run"),h=null,n=null;if(u!==-1&&u+1<t.length){h=t[u+1];try{let{execSync:e}=await import("child_process");n=e(h,{encoding:"utf8",stdio:["ignore","pipe","pipe"]}).trim()}catch(e){n=(e.stdout?e.stdout.toString().trim():"")||(e.stderr?e.stderr.toString().trim():"")||e.message}}if(n){let{stripAnsi:e}=await import("./chunks/exec_command-BP3TON5E.js");n=e(n).trim(),r?r=`Stdin Context (${h}):
69
70
  ${n}
70
71
  ---
71
72
 
72
- ${r}`:r=n}if(!process.stdin.isTTY){let e=[];for await(let g of process.stdin)e.push(g);let l=Buffer.concat(e).toString("utf8").trim();if(l){let{stripAnsi:g}=await import("./chunks/exec_command-XDQLYK3G.js");l=g(l).trim(),r?r=`Stdin Context:
73
+ ${r}`:r=n}if(!process.stdin.isTTY){let e=[];for await(let g of process.stdin)e.push(g);let l=Buffer.concat(e).toString("utf8").trim();if(l){let{stripAnsi:g}=await import("./chunks/exec_command-BP3TON5E.js");l=g(l).trim(),r?r=`Stdin Context:
73
74
  ${l}
74
75
  ---
75
76
 
76
- ${r}`:r=l}}r||(console.error("[ERROR] -p/--prompt requires a prompt string (or piped stdin input)."),process.exit(1));let{loadSettings:C}=await import("./chunks/settings-6BPZ6DG5.js"),{getProviderAPIKey:w}=await import("./chunks/secrets-RFEEPY3S.js"),{getDefaultModel:c}=await import("./chunks/model_config-UZLNHYP5.js"),{generateSimpleContent:p}=await import("./chunks/ai-OGOXSATY.js"),{checkQuotaDetailed:y}=await import("./chunks/usage-5LVLEH5S.js"),i=await C(),A=t.filter(e=>e!=="-p"&&e!=="--prompt"&&e!==r&&e!=="-n"&&e!=="--new"),$=A.includes("--raw")||t.includes("--raw"),m=e=>{for(let l of e){let g=A.indexOf(l);if(g!==-1&&g+1<A.length)return A[g+1]}return null},S=m(["--provider"])||i.aiProvider||"Google",s=m(["--model"])||i.activeModel||c(S,i.apiTier)||c(S,"paid"),R=m(["--key"])||await w(S);R||(console.error(`[ERROR] No API key resolved for provider "${S}".`),process.exit(1));let L=await y("agent",{aiProvider:S});L.allowed||(console.error(`[ERROR] ${L.reason||"Budget Exhausted"} - adjust with /budget set.`),process.exit(1));let a={aiProvider:S,apiKey:R,model:s,mode:"flow",thinkingLevel:m(["--thinking"])||"Fast",systemSettings:i.systemSettings||{}},E=process.platform==="win32"?"Windows":process.platform==="darwin"?"macOS":"Linux",k=new Date,j=k.getFullYear(),G=k.toLocaleString("en-US",{month:"short"}).toUpperCase(),Y=String(k.getDate()).padStart(2,"0"),q=k.toLocaleTimeString([],{hour:"2-digit",hour12:!0}),I=`${j}-${G}-${Y}, ${q}`,H=`Identity: FluxFlow. Sassy, CLI Assistant
77
+ ${r}`:r=l}}r||(console.error("[ERROR] -p/--prompt requires a prompt string (or piped stdin input)."),process.exit(1));let{loadSettings:C}=await import("./chunks/settings-6BPZ6DG5.js"),{getProviderAPIKey:w}=await import("./chunks/secrets-RFEEPY3S.js"),{getDefaultModel:c}=await import("./chunks/model_config-UZLNHYP5.js"),{generateSimpleContent:p}=await import("./chunks/ai-RFTQLPYD.js"),{checkQuotaDetailed:y}=await import("./chunks/usage-5LVLEH5S.js"),i=await C(),A=t.filter(e=>e!=="-p"&&e!=="--prompt"&&e!==r&&e!=="-n"&&e!=="--new"),E=A.includes("--raw")||t.includes("--raw"),m=e=>{for(let l of e){let g=A.indexOf(l);if(g!==-1&&g+1<A.length)return A[g+1]}return null},S=m(["--provider"])||i.aiProvider||"Google",s=m(["--model"])||i.activeModel||c(S,i.apiTier)||c(S,"paid"),R=m(["--key"])||await w(S);R||(console.error(`[ERROR] No API key resolved for provider "${S}".`),process.exit(1));let L=await y("agent",{aiProvider:S});L.allowed||(console.error(`[ERROR] ${L.reason||"Budget Exhausted"} - adjust with /budget set.`),process.exit(1));let a={aiProvider:S,apiKey:R,model:s,mode:"flow",thinkingLevel:m(["--thinking"])||"Fast",systemSettings:i.systemSettings||{}},$=process.platform==="win32"?"Windows":process.platform==="darwin"?"macOS":"Linux",k=new Date,j=k.getFullYear(),G=k.toLocaleString("en-US",{month:"short"}).toUpperCase(),Y=String(k.getDate()).padStart(2,"0"),q=k.toLocaleTimeString([],{hour:"2-digit",hour12:!0}),I=`${j}-${G}-${Y}, ${q}`,H=`Identity: FluxFlow. Sassy, CLI Assistant
77
78
  Use NO markdown, only plain text
78
79
  Additional Context:
79
- - OS: ${E}
80
+ - OS: ${$}
80
81
  - Model: ${_.basename(a.model).trim().replace(":free","").replace("-free","").replace("/free","").replace("_free","").replace("free_","").replaceAll("-"," ").replaceAll("_"," ").replace(/\b\w/g,e=>e.toUpperCase().trim())}
81
82
  - Approx time: ${I}
82
83
  - Non interactive CLI, support piped inputs
83
- - 'fluxflow' TUI has full agentic tools & capabilities`.trim(),{getPromptSessionHistory:U,savePromptSessionHistory:W,clearPromptSessionHistory:M}=await import("./chunks/sessionDaemon-GHQTAGDG.js"),v=[];o?await M():v=await U();let N=[];if(Array.isArray(v)&&v.length>0)for(let e of v)e.text&&N.push({role:e.role==="model"?"model":"user",parts:[{text:e.text}]});N.push({role:"user",parts:[{text:r}]});try{if(!$){let g="\x1B[36m",F="\x1B[35m",Z="\x1B[0m",me=_.basename(a.model).trim().replace(":free","").replace("-free","").replace("free/","").replaceAll("-"," ").replace(/\b\w/g,de=>de.toUpperCase().trim());process.stdout.write(`Responding with ${g}${me}${Z} from ${F}${a.aiProvider}${Z}:
84
+ - 'fluxflow' TUI has full agentic tools & capabilities`.trim(),{getPromptSessionHistory:U,savePromptSessionHistory:W,clearPromptSessionHistory:M}=await import("./chunks/sessionDaemon-GHQTAGDG.js"),v=[];o?await M():v=await U();let N=[];if(Array.isArray(v)&&v.length>0)for(let e of v)e.text&&N.push({role:e.role==="model"?"model":"user",parts:[{text:e.text}]});N.push({role:"user",parts:[{text:r}]});try{if(!E){let g="\x1B[36m",F="\x1B[35m",Z="\x1B[0m",me=_.basename(a.model).trim().replace(":free","").replace("-free","").replace("free/","").replaceAll("-"," ").replace(/\b\w/g,de=>de.toUpperCase().trim());process.stdout.write(`Responding with ${g}${me}${Z} from ${F}${a.aiProvider}${Z}:
84
85
  `)}let{text:e}=await p(a,s,N,H,a.thinkingLevel),l=(e||"").trim();process.stdout.write(l+`
85
- `),l&&await W(r,l)}catch(e){console.error(`[ERROR] Prompt request failed: ${e.message.trim()}
86
+ ${E?"":`
87
+ `}`),l&&await W(r,l)}catch(e){console.error(`[ERROR] Prompt request failed: ${e.message.trim()}
86
88
 
87
89
  `),process.exit(1)}process.exit(0)}process.stdout.write("\x1B[2J\x1B[3J\x1B[H"),process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07"),process.stdout.write("\x1B[?2004h"));let Q=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?2004l")};if(process.on("exit",Q),["SIGINT","SIGTERM","SIGHUP"].forEach(o=>{process.once(o,()=>{Q(),process.exit(0)})}),t.includes("--playground")){let o=process.cwd();process.argv.push("--original-cwd",o);let{DATA_DIR:d}=await import("./chunks/paths-Y7ACZJAE.js"),r=await import("path"),u=await import("fs-extra"),h=r.default.join(d,"playground");try{u.default.ensureDirSync(h),process.chdir(h)}catch{}}ne(re.createElement(ie,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "4.21.5",
4
- "date": "2026-09-27",
3
+ "version": "4.22.1",
4
+ "date": "2026-09-28",
5
5
  "description": "One of the lightest, fastest, high-fidelity agentic CLI with sub-agents & computer use.",
6
6
  "keywords": [
7
7
  "ai",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "4.21.5",
4
- "date": "2026-09-27",
3
+ "version": "4.22.1",
4
+ "date": "2026-09-28",
5
5
  "description": "One of the lightest, fastest, high-fidelity agentic CLI with sub-agents & computer use.",
6
6
  "keywords": [
7
7
  "ai",