arqzero 2.1.0-beta.1 → 2.1.0-beta.2
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/dist/arqzero.mjs +65 -63
- package/package.json +1 -1
package/dist/arqzero.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import yo from'os';import
|
|
3
|
-
`,"utf-8");}function jo(o,e,t){let n={type:"compaction",timestamp:new Date().toISOString(),data:e},r=Bt(t);z$1.mkdirSync(r,{recursive:true}),z$1.appendFileSync(
|
|
4
|
-
`,"utf-8");}function
|
|
2
|
+
import yo from'os';import Ce,{extname,dirname,join}from'path';import z$1,{readFileSync,existsSync,mkdirSync,writeFileSync,statSync,readdirSync}from'fs';import is,{useState,useRef,useEffect,useCallback}from'react';import {render,useApp,useInput,Box,Text}from'ink';import fs from'crypto';import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {Marked}from'marked';import {markedTerminal}from'marked-terminal';import Zo from'highlight.js';import ra from'ink-text-input';import {z}from'zod';import Ra from'openai';import {spawnSync,spawn,execFileSync}from'child_process';import {createInterface}from'readline';import pc from'fast-glob';import {Client}from'@modelcontextprotocol/sdk/client/index.js';import {StdioClientTransport}from'@modelcontextprotocol/sdk/client/stdio.js';import {Command}from'commander';import'url';var mi=Object.defineProperty;var Wn=(o,e)=>()=>(o&&(e=o(o=0)),e);var gi=(o,e)=>{for(var t in e)mi(o,t,{get:e[t],enumerable:true});};function I(){let o=process.env.ARQZERO_HOME;return o&&o.trim()?o:Ce.join(yo.homedir(),".arqzero")}function cr(){return {model:process.env.ARQZERO_MODEL,maxTokens:process.env.ARQZERO_MAX_TOKENS?parseInt(process.env.ARQZERO_MAX_TOKENS,10):void 0,reducedMotion:process.env.ARQZERO_REDUCED_MOTION==="1",syntaxHighlightingDisabled:process.env.ARQZERO_NO_HIGHLIGHT==="1",verbose:process.env.ARQZERO_VERBOSE==="1",apiKey:process.env.FIREWORKS_API_KEY,provider:process.env.ARQZERO_PROVIDER,theme:process.env.ARQZERO_THEME}}var Z=Wn(()=>{});var Bo={};gi(Bo,{appendCompaction:()=>jo,appendMessage:()=>xt,deleteSession:()=>Uo,getSessionInfo:()=>pr,getTranscriptPath:()=>Lo,listSessions:()=>kt,listSessionsWithInfo:()=>No,loadSession:()=>Ie,sessionExists:()=>Oo});function Bt(o){let e=o??I();return Ce.join(e,"sessions")}function $e(o,e){return Ce.join(Bt(e),`${o}.jsonl`)}function Lo(o,e){return $e(o,e)}function xt(o,e,t){let n={type:"message",timestamp:new Date().toISOString(),data:e},r=Bt(t);z$1.mkdirSync(r,{recursive:true}),z$1.appendFileSync($e(o,t),JSON.stringify(n)+`
|
|
3
|
+
`,"utf-8");}function jo(o,e,t){let n={type:"compaction",timestamp:new Date().toISOString(),data:e},r=Bt(t);z$1.mkdirSync(r,{recursive:true}),z$1.appendFileSync($e(o,t),JSON.stringify(n)+`
|
|
4
|
+
`,"utf-8");}function Ie(o,e){let t=$e(o,e);if(!z$1.existsSync(t))return null;let n=z$1.readFileSync(t,"utf-8").trim();if(!n)return [];let s=n.split(`
|
|
5
5
|
`).filter(l=>l).flatMap(l=>{try{return [JSON.parse(l)]}catch{return []}}),i=-1;for(let l=s.length-1;l>=0;l--)if(s[l].type==="compaction"){i=l;break}if(i===-1)return s.filter(l=>l.type==="message").map(l=>l.data);let a=s[i].data,c=[];a.summary&&c.push({role:"system",content:`[Previous conversation summary]
|
|
6
|
-
${a.summary}`}),c.push(...a.preservedMessages);for(let l=i+1;l<s.length;l++)s[l].type==="message"&&c.push(s[l].data);return c}function Oo(o,e){return z$1.existsSync(
|
|
7
|
-
`).filter(c=>c),i=0,a=false;for(let c of s)try{let l=JSON.parse(c);l.type==="message"&&i++,l.type==="compaction"&&(a=!0);}catch{}return {id:o,messageCount:i,lastModified:n.mtime,sizeBytes:n.size,hasCompaction:a}}function No(o){let e=kt(o),t=[];for(let n of e){let r=pr(n,o);r&&t.push(r);}return t.sort((n,r)=>r.lastModified.getTime()-n.lastModified.getTime())}var
|
|
6
|
+
${a.summary}`}),c.push(...a.preservedMessages);for(let l=i+1;l<s.length;l++)s[l].type==="message"&&c.push(s[l].data);return c}function Oo(o,e){return z$1.existsSync($e(o,e))}function kt(o){let e=Bt(o);return z$1.existsSync(e)?z$1.readdirSync(e).filter(t=>t.endsWith(".jsonl")).map(t=>t.replace(".jsonl","")):[]}function Uo(o,e){let t=$e(o,e);return z$1.existsSync(t)?(z$1.unlinkSync(t),true):false}function pr(o,e){let t=$e(o,e);if(!z$1.existsSync(t))return null;let n=z$1.statSync(t),s=z$1.readFileSync(t,"utf-8").trim().split(`
|
|
7
|
+
`).filter(c=>c),i=0,a=false;for(let c of s)try{let l=JSON.parse(c);l.type==="message"&&i++,l.type==="compaction"&&(a=!0);}catch{}return {id:o,messageCount:i,lastModified:n.mtime,sizeBytes:n.size,hasCompaction:a}}function No(o){let e=kt(o),t=[];for(let n of e){let r=pr(n,o);r&&t.push(r);}return t.sort((n,r)=>r.lastModified.getTime()-n.lastModified.getTime())}var Ze=Wn(()=>{Z();});function Ot(o){return {role:"user",content:o}}function Kn(o){return {role:"assistant",content:o}}function zn(o,e,t,n){return {role:"tool",content:t,toolCallId:o,toolName:e}}function Gn(o){return {role:"system",content:o}}var fi=`You are a conversation summarizer. Summarize the following conversation concisely, preserving:
|
|
8
8
|
1. Key decisions and outcomes
|
|
9
9
|
2. Important file paths, code snippets, and technical details
|
|
10
10
|
3. Current task state and what was being worked on
|
|
@@ -14,7 +14,7 @@ Be concise but don't lose critical context. Output only the summary, no preamble
|
|
|
14
14
|
`),a=[Ot(`Summarize this conversation:
|
|
15
15
|
|
|
16
16
|
${i}`)],c="";try{for await(let l of t.chat({messages:a,model:n,intent:"summarize",systemPrompt:fi}))l.type==="text_delta"&&(c+=l.text);}catch(l){c=`[Compaction failed: ${l instanceof Error?l.message:String(l)}. Previous ${r.length} messages were removed to free context space.]`;}return {summary:c,compactedMessageCount:r.length,preservedMessageCount:s.length}}function Jn(o,e){let t=[];return o&&t.push(Gn(`[Previous conversation summary]
|
|
17
|
-
${o}`)),t.push(...e),t}function Zn(o,e){return true}function Qn(o,e){return true}function Yn(o,e){return true}function Xn(o){return 42}var
|
|
17
|
+
${o}`)),t.push(...e),t}function Zn(o,e){return true}function Qn(o,e){return true}function Yn(o,e){return true}function Xn(o){return 42}var H={reducedMotion:false,syntaxHighlightingDisabled:false,verbose:false,theme:"dark",tier:"free"};function er(o){Object.assign(H,o);}var hi=new Set(["Write","Edit","MultiEdit"]),Nt=class{constructor(e,t,n){this.registry=e;this.permissions=t??null,this.checkpointStore=n??null;}permissions;checkpointStore;currentPrompt;setCurrentPrompt(e){this.currentPrompt=e;}async execute(e,t,n){let r=this.registry.get(e);if(!r)return {content:`Unknown tool: ${e}`,isError:true};if(!Qn(e,H.tier??"free"));if(this.permissions){let a=await this.permissions.check(e,r.permissionLevel,t,n.promptUser);if(!a.allowed)return {content:a.denial??`Tool "${e}" was denied`,isError:true}}let s=null,i;if(this.checkpointStore&&hi.has(e)&&(i=this.extractFilePath(t),i))try{s=z$1.readFileSync(i,"utf-8");}catch{s=null;}try{let a=await r.execute(t,n);if(this.checkpointStore&&i&&!a.isError)try{let c=z$1.readFileSync(i,"utf-8");this.checkpointStore.capture(e,i,s,c,this.currentPrompt);}catch{}return a}catch(a){return {content:`Tool "${e}" failed: ${a instanceof Error?a.message:String(a)}`,isError:true}}}extractFilePath(e){if(e&&typeof e=="object"){let t=e;if(typeof t.file_path=="string")return t.file_path;if(typeof t.filePath=="string")return t.filePath;if(typeof t.path=="string")return t.path}}};var yi=[{name:"planning",description:"Break complex tasks into an explicit plan before implementation",triggers:["plan","design","architect","strategy","roadmap","blueprint","decompose"],category:"methodology",phase:10,systemPromptAddition:["1. Restate the goal in one sentence so there is no ambiguity.","2. List hard constraints (language, runtime, repo conventions).","3. Identify unknowns \u2014 read code, search docs, or ask the user.","4. Decompose the goal into ordered, independently testable sub-tasks.","5. For each sub-task, name the files to touch and the tool to use.","6. Estimate risk per sub-task (low / medium / high) and flag anything that needs user sign-off.","7. Present the full plan as a numbered checklist and WAIT for user approval before writing any code.","8. After approval, execute sub-tasks in order, checking each off as it passes its verification step."].join(`
|
|
18
18
|
`)},{name:"tdd",description:"Test-driven development: red-green-refactor cycle",triggers:["tdd","test-driven","test first","red green"],category:"methodology",phase:20,requires:["testing-standards"],systemPromptAddition:["1. Identify the smallest unit of behavior to implement next.","2. Write a failing test that asserts the expected behavior (RED).","3. Run the test suite and confirm the new test fails for the right reason.","4. Write the minimum production code to make the test pass (GREEN).","5. Run the test suite and confirm all tests pass.","6. Refactor the production code for clarity while keeping tests green (REFACTOR).","7. Run the full suite again after refactoring.","8. Repeat from step 1 for the next behavior.","9. Never write production code without a corresponding failing test first.","10. Keep each cycle under 5 minutes of wall-clock time to maintain momentum."].join(`
|
|
19
19
|
`)},{name:"debugging",description:"Systematic bug investigation and resolution",triggers:["bug","fix","error","broken","crash","fail","debug","issue","stack trace","exception"],category:"methodology",phase:20,systemPromptAddition:["1. Reproduce the bug \u2014 get a reliable repro case before anything else.","2. Read the full error message and stack trace; identify the exact file and line.","3. Form a hypothesis about the root cause (not the symptom).","4. Add logging or a minimal test to confirm the hypothesis.","5. If the hypothesis is wrong, return to step 3 with new evidence.","6. Implement the smallest fix that addresses the root cause.","7. Run the repro case and confirm the bug is gone.","8. Run the full test suite to confirm no regressions.","9. Remove any temporary logging added during investigation.","10. If the bug could recur, add a regression test."].join(`
|
|
20
20
|
`)},{name:"refactoring",description:"Improve code structure without changing behavior",triggers:["refactor","clean","simplify","restructure","deduplicate","extract"],category:"methodology",phase:30,requires:["testing-standards"],systemPromptAddition:["1. Ensure the existing test suite passes before touching any code.","2. Identify the specific code smell or structural problem to address.","3. Plan the refactoring as a sequence of small, reversible steps.","4. Execute one step at a time \u2014 move, rename, extract, inline, or simplify.","5. Run the test suite after EVERY step; revert immediately if anything fails.","6. Do NOT change observable behavior \u2014 same inputs must produce same outputs.","7. After all steps are done, run the full suite one final time.","8. Review the diff: if it is larger than expected, break it into smaller commits."].join(`
|
|
@@ -28,7 +28,7 @@ ${o}`)),t.push(...e),t}function Zn(o,e){return true}function Qn(o,e){return tr
|
|
|
28
28
|
`),verificationGate:{steps:["Check all interactive elements have ARIA labels or accessible names","Verify color contrast meets WCAG AA ratios","Confirm full keyboard navigation works without a mouse"],failAction:"report"}},{name:"error-handling",description:"Ensure comprehensive error handling across the codebase",triggers:["error handling","try catch","exception","error boundary","graceful degradation","fault tolerance"],category:"guardrail",systemPromptAddition:["1. Identify all async operations and confirm each has error handling.","2. Ensure caught errors are logged with context (what was attempted, with what input).","3. Verify errors are propagated or translated appropriately \u2014 never silently swallowed.","4. Check that user-facing error messages are helpful but do not leak internals.","5. Confirm error paths are tested, not just happy paths."].join(`
|
|
29
29
|
`),verificationGate:{steps:["Check all async operations have try/catch or .catch()","Test error paths with intentional failures"],failAction:"retry"}},{name:"input-validation",description:"Validate and sanitize all external input",triggers:["validation","sanitize","input validation","schema validation","zod","joi","yup"],category:"guardrail",systemPromptAddition:["1. Identify every entry point where external data enters the system.","2. Define a schema for each input (type, range, format, required fields).","3. Validate at the boundary \u2014 before the data reaches business logic.","4. Return descriptive error messages that tell the caller what was wrong.","5. Test with malformed, missing, and adversarial input."].join(`
|
|
30
30
|
`),verificationGate:{steps:["Test each input endpoint with malformed data","Confirm descriptive validation error messages are returned"],failAction:"retry"}},{name:"testing-standards",description:"Enforce test quality and coverage standards",triggers:["test","coverage","spec","assert","expect","test suite","unit test","integration test"],category:"guardrail",systemPromptAddition:["1. Every public function must have at least one test.","2. Tests must cover happy path, edge cases, and error conditions.","3. No skipped tests \u2014 fix or remove them.","4. Assertions must be specific (not just `assert.ok(result)`).","5. Run the full suite and confirm all tests pass."].join(`
|
|
31
|
-
`),verificationGate:{steps:["Run the full test suite","Confirm no tests are skipped","Report total pass / fail / skip count"],failAction:"retry"}}],wi=[{name:"parallel-quality",description:"Run lint, typecheck, and test in parallel",triggers:["quality check","lint and test","full check","pre-commit"],category:"orchestration",dispatchHint:{when:"User requests a comprehensive quality check",tasks:["Run linter","Run type checker","Run test suite"],maxConcurrent:3}},{name:"parallel-implementation",description:"Fan out implementation across files, fan in verification",triggers:["implement all","batch implement","parallel implement","fan out"],category:"orchestration",dispatchHint:{when:"Multiple independent files need similar changes",tasks:["Implement changes per file in parallel","Run full test suite to verify"],maxConcurrent:5}},{name:"phased-deploy",description:"Multi-phase deployment with pre-checks and smoke tests",triggers:["deploy pipeline","staged deploy","phased deploy","canary deploy"],category:"orchestration",requires:["testing-standards","security-review"],dispatchHint:{when:"Deploying to production with safety checks",tasks:["Run pre-deploy checks (lint, test, audit)","Execute deployment","Run smoke tests"],maxConcurrent:1}},{name:"review-sweep",description:"Dispatch one review agent per file in a changeset",triggers:["review all","sweep review","review sweep","batch review"],category:"orchestration",dispatchHint:{when:"A large changeset needs file-by-file review",tasks:["Dispatch one review agent per changed file"],maxConcurrent:7}},{name:"multi-stack",description:"Parallel frontend and backend development",triggers:["full stack","frontend and backend","multi-stack","parallel stack"],category:"orchestration",dispatchHint:{when:"Feature requires coordinated frontend and backend work",tasks:["Implement backend API changes","Implement frontend UI changes","Integration test"],maxConcurrent:2}}],vi=[{name:"file-operations",description:"File reading, writing, editing, and navigation",triggers:["file","read","write","edit","create","delete","rename","move","copy"],category:"tool",suggestedTools:["Read","Write","Edit","MultiEdit","Glob","LS"]},{name:"search",description:"Code and file search across the project",triggers:["find","search","grep","locate","where","which"],category:"tool",suggestedTools:["Glob","Grep","Read"]},{name:"shell",description:"Shell command execution and process management",triggers:["run","execute","command","terminal","npm","yarn","pip","cargo"],category:"tool",suggestedTools:["Bash","BashOutput","KillShell"]},{name:"web-research",description:"Web search and content fetching",triggers:["search web","look up","fetch url","download","url","website"],category:"tool",suggestedTools:["WebSearch","WebFetch"]},{name:"notebook",description:"Jupyter notebook reading and editing",triggers:["notebook","jupyter","ipynb","cell"],category:"tool",suggestedTools:["NotebookRead","NotebookEdit"]}],Do=[...yi,...xi,...ki,...bi,...wi,...vi];var Ti=["ing","ed","er","tion","ment","ly","ness","ize","ise","ation","able","ible"];function or(o){let e=o,t=true;for(;t;){t=false;for(let n of Ti)if(e.length>n.length+2&&e.endsWith(n)){e=e.slice(0,-n.length),t=true;break}}return e}function Si(o,e){if(o===e)return true;let t=o.length<=e.length?o:e,n=o.length>e.length?o:e;return t.length>=4&&n.startsWith(t)}var nr={methodology:1,architecture:2,domain:3,guardrail:4,orchestration:5,tool:6};function rr(o,e){let t=o.toLowerCase(),n=t.split(/\s+/),r=n.map(or),s=[];for(let i of e){let a=[],c=0;for(let l of i.triggers)if(l.includes(" "))t.includes(l)&&a.push(l);else if(n.includes(l))a.push(l);else {let p=or(l);r.some(u=>Si(u,p))&&(a.push(l),c++);}if(a.length>0){let l=a.length-c;s.push({capability:i,score:l+c*.5,matchedKeywords:a});}}return s.sort((i,a)=>{let c=nr[i.capability.category]??99,l=nr[a.capability.category]??99;if(c!==l)return c-l;let p=i.capability.phase??50,u=a.capability.phase??50;return p!==u?p-u:a.score-i.score})}function sr(o,e,t){let n=new Map(e.map(i=>[i.name,i])),r=new Set(o.map(i=>i.capability.name)),s=[...o];for(let i of o)for(let a of i.capability.requires??[])!r.has(a)&&n.has(a)&&(s.push({capability:n.get(a),score:0,matchedKeywords:["(required)"]}),r.add(a));if(s.length<t)for(let i of o)for(let a of i.capability.recommends??[])!r.has(a)&&n.has(a)&&s.length<t&&(s.push({capability:n.get(a),score:0,matchedKeywords:["(recommended)"]}),r.add(a));return s}function ir(o,e){let t=Xn(
|
|
31
|
+
`),verificationGate:{steps:["Run the full test suite","Confirm no tests are skipped","Report total pass / fail / skip count"],failAction:"retry"}}],wi=[{name:"parallel-quality",description:"Run lint, typecheck, and test in parallel",triggers:["quality check","lint and test","full check","pre-commit"],category:"orchestration",dispatchHint:{when:"User requests a comprehensive quality check",tasks:["Run linter","Run type checker","Run test suite"],maxConcurrent:3}},{name:"parallel-implementation",description:"Fan out implementation across files, fan in verification",triggers:["implement all","batch implement","parallel implement","fan out"],category:"orchestration",dispatchHint:{when:"Multiple independent files need similar changes",tasks:["Implement changes per file in parallel","Run full test suite to verify"],maxConcurrent:5}},{name:"phased-deploy",description:"Multi-phase deployment with pre-checks and smoke tests",triggers:["deploy pipeline","staged deploy","phased deploy","canary deploy"],category:"orchestration",requires:["testing-standards","security-review"],dispatchHint:{when:"Deploying to production with safety checks",tasks:["Run pre-deploy checks (lint, test, audit)","Execute deployment","Run smoke tests"],maxConcurrent:1}},{name:"review-sweep",description:"Dispatch one review agent per file in a changeset",triggers:["review all","sweep review","review sweep","batch review"],category:"orchestration",dispatchHint:{when:"A large changeset needs file-by-file review",tasks:["Dispatch one review agent per changed file"],maxConcurrent:7}},{name:"multi-stack",description:"Parallel frontend and backend development",triggers:["full stack","frontend and backend","multi-stack","parallel stack"],category:"orchestration",dispatchHint:{when:"Feature requires coordinated frontend and backend work",tasks:["Implement backend API changes","Implement frontend UI changes","Integration test"],maxConcurrent:2}}],vi=[{name:"file-operations",description:"File reading, writing, editing, and navigation",triggers:["file","read","write","edit","create","delete","rename","move","copy"],category:"tool",suggestedTools:["Read","Write","Edit","MultiEdit","Glob","LS"]},{name:"search",description:"Code and file search across the project",triggers:["find","search","grep","locate","where","which"],category:"tool",suggestedTools:["Glob","Grep","Read"]},{name:"shell",description:"Shell command execution and process management",triggers:["run","execute","command","terminal","npm","yarn","pip","cargo"],category:"tool",suggestedTools:["Bash","BashOutput","KillShell"]},{name:"web-research",description:"Web search and content fetching",triggers:["search web","look up","fetch url","download","url","website"],category:"tool",suggestedTools:["WebSearch","WebFetch"]},{name:"notebook",description:"Jupyter notebook reading and editing",triggers:["notebook","jupyter","ipynb","cell"],category:"tool",suggestedTools:["NotebookRead","NotebookEdit"]}],Do=[...yi,...xi,...ki,...bi,...wi,...vi];var Ti=["ing","ed","er","tion","ment","ly","ness","ize","ise","ation","able","ible"];function or(o){let e=o,t=true;for(;t;){t=false;for(let n of Ti)if(e.length>n.length+2&&e.endsWith(n)){e=e.slice(0,-n.length),t=true;break}}return e}function Si(o,e){if(o===e)return true;let t=o.length<=e.length?o:e,n=o.length>e.length?o:e;return t.length>=4&&n.startsWith(t)}var nr={methodology:1,architecture:2,domain:3,guardrail:4,orchestration:5,tool:6};function rr(o,e){let t=o.toLowerCase(),n=t.split(/\s+/),r=n.map(or),s=[];for(let i of e){let a=[],c=0;for(let l of i.triggers)if(l.includes(" "))t.includes(l)&&a.push(l);else if(n.includes(l))a.push(l);else {let p=or(l);r.some(u=>Si(u,p))&&(a.push(l),c++);}if(a.length>0){let l=a.length-c;s.push({capability:i,score:l+c*.5,matchedKeywords:a});}}return s.sort((i,a)=>{let c=nr[i.capability.category]??99,l=nr[a.capability.category]??99;if(c!==l)return c-l;let p=i.capability.phase??50,u=a.capability.phase??50;return p!==u?p-u:a.score-i.score})}function sr(o,e,t){let n=new Map(e.map(i=>[i.name,i])),r=new Set(o.map(i=>i.capability.name)),s=[...o];for(let i of o)for(let a of i.capability.requires??[])!r.has(a)&&n.has(a)&&(s.push({capability:n.get(a),score:0,matchedKeywords:["(required)"]}),r.add(a));if(s.length<t)for(let i of o)for(let a of i.capability.recommends??[])!r.has(a)&&n.has(a)&&s.length<t&&(s.push({capability:n.get(a),score:0,matchedKeywords:["(recommended)"]}),r.add(a));return s}function ir(o,e){let t=Xn(H.tier??"free");return o.slice(0,t)}function ar(o){if(o.length===0)return "";let e=[`
|
|
32
32
|
## Active Capabilities`],t=o.filter(l=>l.capability.category==="methodology"),n=o.filter(l=>l.capability.category==="architecture"),r=o.filter(l=>l.capability.category==="domain"),s=o.filter(l=>l.capability.category==="guardrail"),i=o.filter(l=>l.capability.category==="orchestration"),a=o.filter(l=>l.capability.category==="tool");if(t.length>0){e.push(`
|
|
33
33
|
### Workflow`);for(let l of t)e.push(`
|
|
34
34
|
**${l.capability.name}**`),l.capability.systemPromptAddition&&e.push(l.capability.systemPromptAddition);}if(n.length>0){e.push(`
|
|
@@ -43,56 +43,58 @@ WHEN: ${l.capability.dispatchHint.when}`),e.push("USE Dispatch to run in paralle
|
|
|
43
43
|
### Verification Gates (MANDATORY)`),e.push("Before reporting completion, you MUST complete these steps:");for(let l of c)e.push(`
|
|
44
44
|
**${l.capability.name}**:`),l.capability.verificationGate.steps.forEach((p,u)=>e.push(`${u+1}. ${p}`)),e.push(`On failure: ${l.capability.verificationGate.failAction==="retry"?"fix and re-verify":"report failures explicitly"}`);e.push(`
|
|
45
45
|
Do NOT claim completion until all gates pass.`);}return e.join(`
|
|
46
|
-
`)}Je();var te=[{id:"accounts/fireworks/models/glm-5p1",displayName:"Enso",tier:"default",description:"Default \u2014 200K context, balanced speed and reasoning",costPerMInput:.6,costPerMOutput:2.2,contextWindow:2e5},{id:"accounts/fireworks/models/deepseek-v4-pro",displayName:"PRIMUS",tier:"strong",description:"Advanced \u2014 auto-engaged for complex multi-step tasks",costPerMInput:1,costPerMOutput:3,contextWindow:2e5}];function Ie(o){let e=o.toLowerCase();return te.find(t=>t.displayName.toLowerCase()===e||t.id===o||t.id.endsWith("/"+e))}function Ht(o){return te.find(e=>e.tier===o)??te[0]}function Ze(o){let e=te.find(n=>n.id===o);if(e)return {costPerMInput:e.costPerMInput,costPerMOutput:e.costPerMOutput};let t=Ht("default");return {costPerMInput:t.costPerMInput,costPerMOutput:t.costPerMOutput}}var ur=["planning","code-review","security-review","incident-response","migration","backend-patterns","microservices","database-design"];function dr(o,e,t){if(!t.startsWith("accounts/fireworks/models/"))return {model:t,reason:"default (cross-provider routing disabled)"};if(e.some(s=>ur.includes(s))){let s=Ht("strong");if(s&&s.id!==t){let i=e.filter(a=>ur.includes(a));return {model:s.id,reason:`${i.join(", ")} task`}}}return {model:t,reason:"default"}}Z();function Ho(){return Se.join(I(),"auth.json")}var Pi=7;function O(){try{let o=Ho();return z$1.existsSync(o)?JSON.parse(z$1.readFileSync(o,"utf-8")):null}catch{return null}}function xe(o){let e=Ho();z$1.mkdirSync(Se.dirname(e),{recursive:true}),z$1.writeFileSync(e,JSON.stringify(o,null,2),{mode:384});}function qt(){try{z$1.unlinkSync(Ho());}catch{}}function gr(o){return Date.now()>=o.expiresAt}function fr(o){let e=Pi*24*60*60*1e3;return Date.now()-o.lastValidated>e}var Ri="https://lxvdapryxafrreskdvny.functions.supabase.co/api",Ft=class extends Error{constructor(e,t){super(`Invalid ARQZERO_API_URL "${e}": ${t}`),this.name="InvalidApiUrlError";}};function B(){let o=process.env.ARQZERO_API_URL?.trim(),e=o&&o.length>0?o:Ri,t;try{t=new URL(e);}catch{throw new Ft(e,"not a valid URL")}if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Ft(e,`unsupported protocol ${t.protocol}`);return e.replace(/\/+$/,"")}var Ei="https://arqzero.pages.dev";function hr(){let o=process.env.ARQZERO_WEB_URL?.trim();return (o&&o.length>0?o:Ei).replace(/\/+$/,"")}async function yr(o,e){let t=await fetch(`${B()}/auth/device/authorize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:o,deviceLabel:e})});if(!t.ok){let n=await t.json().catch(()=>({}));throw new Error(n.error??`Device authorize failed: ${t.status}`)}return t.json()}async function xr(o){let e=await fetch(`${B()}/auth/device/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:o})}),t=await e.json().catch(()=>({}));if(e.ok)return {kind:"ok",...t};if(e.status===400&&t.error==="authorization_pending")return {kind:"pending"};if(e.status===400&&t.error==="slow_down")return {kind:"slow_down"};if(e.status===410&&t.error==="denied")return {kind:"denied"};if(e.status===410)return {kind:"expired"};throw new Error(t.error??`Poll failed: ${e.status}`)}async function Wt(o){let e=await fetch(`${B()}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})});if(!e.ok){let t=await e.json().catch(()=>({}));throw new Error(t.error??`Login request failed: ${e.status}`)}}async function Kt(o,e,t,n){let r=await fetch(`${B()}/auth/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,code:e,machineId:t,deviceLabel:n})});if(!r.ok){let s=await r.json().catch(()=>({}));throw new Error(s.error??`Verification failed: ${r.status}`)}return r.json()}async function qo(o,e){let t=await fetch(`${B()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:o,machineId:e})});if(!t.ok)throw new Error(`Refresh failed: ${t.status}`);return t.json()}async function zt(o){await fetch(`${B()}/auth/logout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:o})}).catch(()=>{});}async function ke(o){let e=await fetch(`${B()}/license`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`License fetch failed: ${e.status}`);return e.json()}async function kr(o,e,t){let n=await fetch(`${B()}/usage/sync`,{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify({date:e,messageCount:t})});if(!n.ok)throw new Error(`Usage sync failed: ${n.status}`);return n.json()}async function br(o){let e=await fetch(`${B()}/users/me`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`User fetch failed: ${e.status}`);return e.json()}async function Gt(o){let e=await fetch(`${B()}/users/sessions`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`Sessions fetch failed: ${e.status}`);return (await e.json()).sessions??[]}async function wr(o,e){let t=await fetch(`${B()}/users/sessions/${e}`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}});if(!t.ok){let n=await t.json().catch(()=>({}));throw new Error(n.error??`Revoke failed: ${t.status}`)}}async function vr(o,e){let t=await fetch(`${B()}/checkout/session`,{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify({tier:e})});if(!t.ok)throw new Error(`Checkout failed: ${t.status}`);return (await t.json()).url}Z();function Cr(){return Se.join(I(),"usage.json")}var Mi=10;function Vt(){return new Date().toISOString().slice(0,10)}function $i(){try{let o=Cr();if(!z$1.existsSync(o))return {date:Vt(),count:0,lastSyncedCount:0};let e=JSON.parse(z$1.readFileSync(o,"utf-8"));return e.date!==Vt()?{date:Vt(),count:0,lastSyncedCount:0}:e}catch{return {date:Vt(),count:0,lastSyncedCount:0}}}function Tr(o){let e=Cr();z$1.mkdirSync(Se.dirname(e),{recursive:true}),z$1.writeFileSync(e,JSON.stringify(o),"utf-8");}function Ar(){let o=$i();if(o.count++,Tr(o),o.count-o.lastSyncedCount>=Mi){let e=o.count;o.lastSyncedCount=e,Tr(o);let t=O();t&&(async()=>{try{await kr(t.accessToken,o.date,e);}catch{}})();}}var Qe=null,Wo=0,Ii=3e4,Fo=new Set,Pr=new Map,Rr=[70,80,90,92,94,96,98,100];function Zt(o){return /deepseek-v4-pro|primus/i.test(o)?"primus":"enso"}async function Er(o=false){let e=O();if(!e)return null;if(!o&&Qe&&Date.now()-Wo<Ii)return Qe;try{let t=await fetch(`${B()}/usage/quota`,{headers:{Authorization:`Bearer ${e.accessToken}`}});return t.ok?(Qe=await t.json(),Wo=Date.now(),Qe):null}catch{return null}}async function Mr(o){let e=O();if(!e)return null;try{let t=await fetch(`${B()}/usage/track`,{method:"POST",headers:{Authorization:`Bearer ${e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(o)});return t.ok?(Qe=await t.json(),Wo=Date.now(),Qe):null}catch{return null}}function $r(o){let e=[],t=[{bucket:"enso",period:"5h",entry:o.enso["5h"]},{bucket:"enso",period:"week",entry:o.enso.week},{bucket:"primus",period:"5h",entry:o.primus["5h"]},{bucket:"primus",period:"week",entry:o.primus.week}];for(let{bucket:n,period:r,entry:s}of t){let i=`${n}-${r}`,a=`${i}-${s.resetsAt}`,c=Pr.get(i),l=new Date(s.resetsAt).getTime();if(c!==l){for(let p of Rr)Fo.delete(`${i}-${c}-${p}`);Pr.set(i,l);}for(let p of Rr)if(s.percent>=p){let u=`${a}-${p}`;Fo.has(u)||(Fo.add(u),e.push({bucket:n,period:r,percent:p,used:s.used,cap:s.cap,resetsAt:s.resetsAt}));}}return e}function Qt(o,e=Date.now()){let t=new Date(o).getTime()-e;if(t<=0)return "now";let n=Math.floor(t/6e4);if(n<60)return `in ${n}m`;let r=Math.floor(n/60),s=n%60;return r<24?`in ${r}h${s.toString().padStart(2,"0")}m`:`in ${Math.floor(r/24)}d${r%24}h`}function Ir(o){return o==="enso"?"Enso":"PRIMUS"}function _i(){return {inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,costMicrocents:0}}var me={startedAt:Date.now(),linesAdded:0,linesRemoved:0,perModel:{}};function _r(o,e){let t=me.perModel[o]??_i();t.inputTokens+=e.inputTokens??0,t.outputTokens+=e.outputTokens??0,t.cacheReadTokens+=e.cacheReadTokens??0,t.cacheWriteTokens+=e.cacheWriteTokens??0;let n=Ze(o),r=((e.inputTokens??0)*n.costPerMInput+(e.outputTokens??0)*n.costPerMOutput)/1e6;t.costMicrocents+=Math.round(r*1e6),me.perModel[o]=t;}function Yt(o,e){me.linesAdded+=Math.max(0,o),me.linesRemoved+=Math.max(0,e);}function Dr(){let o=Object.entries(me.perModel).map(([e,t])=>({modelId:e,displayName:e,bucket:Zt(e),...t}));return {startedAt:me.startedAt,durationMs:Date.now()-me.startedAt,linesAdded:me.linesAdded,linesRemoved:me.linesRemoved,perModel:o}}var be=class{messages=[];executor;options;activeCapabilityContext="";activeModel;turnAbort=new AbortController;constructor(e){this.options=e,this.activeModel=e.model,this.executor=new Nt(e.registry,e.permissions,e.checkpointStore);}buildHookPayload(e,t={}){let n=this.options.session?.id,r=n?Lo(n):void 0,s=this.options.toolContext?.cwd;return {event:e,hook_event_name:e,sessionId:n,session_id:n,cwd:s,transcript_path:r,timestamp:Date.now(),...t,tool_name:t.tool_name??t.toolName,toolName:t.toolName??t.tool_name,tool_input:t.tool_input??t.toolInput,toolInput:t.toolInput??t.tool_input,tool_response:t.tool_response??t.toolResult,toolResult:t.toolResult??t.tool_response}}getMessages(){return [...this.messages]}getActiveModel(){return this.activeModel}async handleUserMessage(e,t={}){if(this.options.session?.touch(),this.turnAbort=new AbortController,this.options.toolContext.abortSignal=this.turnAbort.signal,this.options.hooks){let l=await this.options.hooks.fire("UserPromptSubmit",this.buildHookPayload("UserPromptSubmit",{tool_input:e}));if(l.action==="deny"){t.onError?.(new Error(l.message??"Prompt blocked by hook"));return}typeof l.modifiedInput=="string"&&(e=l.modifiedInput);}let n=rr(e,Do),r=ir(n),s=sr(r,Do,8);this.activeCapabilityContext=ar(s),s.length>0&&t.onCapabilitiesMatched?.(s);let i=dr(e,s.map(l=>l.capability.name),this.options.model);this.activeModel=i.model,i.model!==this.options.model&&t.onModelRouted?.(i.model,i.reason),Ar();let a=Ot(e);this.messages.push(a),this.options.session&&xt(this.options.session.id,a),this.executor.setCurrentPrompt(e),await this.runConversationLoop(t),this.executor.setCurrentPrompt(void 0);let{contextWindow:c}=this.options;if(c){let l=c.getUsageSummary();if(c.isCritical()&&!c.needsCompaction()&&t.onContextWarning?.(l.percent,"warning"),c.needsCompaction()){t.onContextWarning?.(l.percent,"compacting"),await this.options.hooks?.fire("PreCompact",this.buildHookPayload("PreCompact"));let p=c.getPreserveCount(this.messages.length),u=await Vn(this.messages,p,this.options.provider,this.options.model);if(u.compactedMessageCount>0){let f=this.messages.slice(this.messages.length-u.preservedMessageCount);if(this.messages=Jn(u.summary,f),this.options.session?.recordCompaction(),this.options.session){let d={summary:u.summary,preservedMessages:f,compactedCount:u.compactedMessageCount};jo(this.options.session.id,d);}let g=c.getUsageSummary();t.onContextWarning?.(g.percent,"compacted"),t.onCompaction?.(u),await this.options.hooks?.fire("PostCompact",this.buildHookPayload("PostCompact",{tool_response:{compactedMessageCount:u.compactedMessageCount}}));}}}}async runConversationLoop(e,t=0){let n=this.options.maxToolRounds??25;if(t>=n){e.onError?.(new Error("Max tool execution rounds reached"));return}let r=this.options.registry.getDefinitions(),s={messages:this.messages,model:this.activeModel,tools:r.length>0?r:void 0,maxTokens:this.options.maxTokens,systemPrompt:this.options.systemPrompt?this.options.systemPrompt+this.activeCapabilityContext:this.activeCapabilityContext||void 0,intent:"chat"},i=[],a="",c="",l=new Map;try{for await(let g of this.options.provider.chat(s))switch(g.type){case "text_delta":a+=g.text,e.onTextDelta?.(g.text);break;case "thinking_delta":c+=g.text,e.onThinkingDelta?.(g.text);break;case "tool_use_start":a&&(i.push({type:"text",text:a}),a=""),c&&(i.push({type:"thinking",text:c}),c=""),l.set(g.id,{name:g.name,jsonParts:[]}),e.onToolStart?.(g.id,g.name);break;case "tool_use_delta":l.get(g.id)?.jsonParts.push(g.input);break;case "tool_use_end":{let d=l.get(g.id);if(d){let y=d.jsonParts.join(""),b={};try{b=y?JSON.parse(y):{};}catch{b={_raw:y};}i.push({type:"tool_use",id:g.id,name:d.name,input:b}),l.delete(g.id);}break}case "message_end":this.options.contextWindow?.trackUsage(g.usage),e.onMessageEnd?.(g.usage),_r(this.activeModel,{inputTokens:g.usage.inputTokens,outputTokens:g.usage.outputTokens,cacheReadTokens:g.usage.cacheReadTokens,cacheWriteTokens:g.usage.cacheWriteTokens}),(async()=>{let d=Zt(this.activeModel),y=Ze(this.activeModel),b=g.usage.inputTokens??0,R=g.usage.outputTokens??0,D=(b*y.costPerMInput+R*y.costPerMOutput)/1e6,H=Math.round(D*1e6),he=await Mr({modelBucket:d,inputTokens:b,outputTokens:R,costMicrocents:H});if(he&&e.onQuotaThreshold)for(let Ke of $r(he))e.onQuotaThreshold(Ke);})();break;case "error":e.onError?.(g.error);break}}catch(g){e.onError?.(g instanceof Error?g:new Error(String(g)));return}c&&i.push({type:"thinking",text:c}),a&&i.push({type:"text",text:a});let p=Kn(i);this.messages.push(p),this.options.session&&xt(this.options.session.id,p);let u=i.filter(g=>g.type==="tool_use");if(u.length===0){await this.options.hooks?.fire("Stop",this.buildHookPayload("Stop"));return}let f=await Promise.all(u.map(async g=>{if(this.options.hooks){let b=await this.options.hooks.fire("PreToolUse",this.buildHookPayload("PreToolUse",{tool_name:g.name,tool_input:g.input}));if(b.action==="deny")return {block:g,result:{content:b.message??"Blocked by hook",isError:true}};b.modifiedInput!==void 0&&(g.input=b.modifiedInput??void 0);}let d=await this.executor.execute(g.name,g.input,this.options.toolContext),y=d.isError?"PostToolUseFailure":"PostToolUse";return await this.options.hooks?.fire(y,this.buildHookPayload(y,{tool_name:g.name,tool_input:g.input,tool_response:d})),{block:g,result:d}}));for(let{block:g,result:d}of f){e.onToolEnd?.(g.id,g.name,d,g.input);let y=zn(g.id,g.name,d.content,d.isError);this.messages.push(y),this.options.session&&xt(this.options.session.id,y);}await this.runConversationLoop(e,t+1);}setMessages(e){this.messages=[...e];}abort(){this.options.provider.abort(),this.turnAbort.signal.aborted||this.turnAbort.abort();}};var Di=[/rm\s+(-rf|--recursive)/,/rm\s+-[a-zA-Z]*f[a-zA-Z]*\s/,/git\s+push\s+--force/,/git\s+push\s+-f\b/,/git\s+reset\s+--hard/,/git\s+clean\s+-[a-zA-Z]*f/,/DROP\s+(TABLE|DATABASE)/i,/TRUNCATE\s+TABLE/i,/DELETE\s+FROM\s+\w+\s*$/i,/mkfs\b/,/fdisk\b/,/dd\s+if=.*\s+of=(?!\/dev\/null)/,/chmod\s+777/,/curl\s+.*\|\s*(ba)?sh/,/wget\s+.*\|\s*(ba)?sh/,/>\s*\/etc\//,/npm\s+publish/,/npx\s+.*--yes/];function Lr(o,e,t){if(e==="safe")return "safe";if(e==="dangerous")return "dangerous";if(o!=="Bash")return e;let n=t?.command;if(!n)return e;for(let r of Di)if(r.test(n))return "dangerous";return e}var Li=new Set(["Write","Edit","MultiEdit","Bash"]),Ye=class{sessionAlwaysAllow=new Set;sessionTrustedPatterns=new Map;config;constructor(e){this.config=e;}async check(e,t,n,r){if(this.config.alwaysDeny.includes(e))return {allowed:false,denial:`Tool "${e}" is denied by configuration`};let s=Lr(e,t,n);if(s==="safe")return {allowed:true};if(this.sessionAlwaysAllow.has(e))return {allowed:true};if(Li.has(e)){if(this.config.defaultMode==="locked")return {allowed:false,denial:`Tool "${e}" denied: locked mode`};let c=await r({tool:e,input:n,level:s});return c.allowed?(c.remember==="session"&&this.sessionAlwaysAllow.add(e),{allowed:true}):{allowed:false,denial:`Tool "${e}" denied by user`}}if(this.config.alwaysAllow.includes(e))return {allowed:true};if(this.config.defaultMode==="trust")return {allowed:true};if(this.config.defaultMode==="locked")return {allowed:false,denial:`Tool "${e}" denied: locked mode`};if(this.matchesTrustedPattern(e,n,this.config.trustedPatterns))return {allowed:true};let i=this.sessionTrustedPatterns.get(e);if(i&&this.matchesPatternList(n,i))return {allowed:true};let a=await r({tool:e,input:n,level:s});return a.allowed?(a.remember==="session"&&this.sessionAlwaysAllow.add(e),{allowed:true}):{allowed:false,denial:`Tool "${e}" denied by user`}}matchesTrustedPattern(e,t,n){let r=n[e];return r?this.matchesPatternList(t,r):false}matchesPatternList(e,t){let n=e?.command;if(!n)return false;for(let r of t)if(this.globMatch(n,r))return true;return false}globMatch(e,t){let n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`).test(e)}getSessionAlwaysAllow(){return [...this.sessionAlwaysAllow]}resetSession(){this.sessionAlwaysAllow.clear(),this.sessionTrustedPatterns.clear();}};var wt=class{id;startedAt;lastActiveAt;messageCount=0;compactionCount=0;constructor(e){this.id=e??fs.randomUUID(),this.startedAt=new Date,this.lastActiveAt=new Date;}touch(){this.lastActiveAt=new Date,this.messageCount++;}recordCompaction(){this.compactionCount++;}getInfo(){return {id:this.id,startedAt:this.startedAt,lastActiveAt:this.lastActiveAt,messageCount:this.messageCount,compactionCount:this.compactionCount}}};var Oi={maxContextTokens:2e5,compactionThreshold:.95,preserveRatio:.2},Xt=class{config;totalInputTokens=0;totalOutputTokens=0;constructor(e){this.config={...Oi,...e};}trackUsage(e){this.totalInputTokens+=e.inputTokens,this.totalOutputTokens+=e.outputTokens;}getEstimatedTokens(){return this.totalInputTokens}needsCompaction(){let e=this.config.maxContextTokens*this.config.compactionThreshold;return this.totalInputTokens>=e}isCritical(){return this.totalInputTokens>=this.config.maxContextTokens*.9}getTokenBudgetRemaining(){return Math.max(0,this.config.maxContextTokens-this.totalInputTokens)}getPreserveCount(e){return Math.max(2,Math.ceil(e*this.config.preserveRatio))}getUsageSummary(){return {input:this.totalInputTokens,output:this.totalOutputTokens,max:this.config.maxContextTokens,percent:Math.round(this.totalInputTokens/this.config.maxContextTokens*100)}}reset(){this.totalInputTokens=0,this.totalOutputTokens=0;}};var Xe=class{checkpoints=[];nextId=1;capture(e,t,n,r,s){let i={id:this.nextId++,timestamp:Date.now(),toolName:e,filePath:t,beforeContent:n,afterContent:r,promptText:s};return this.checkpoints.push(i),i}getAll(){return [...this.checkpoints]}getById(e){return this.checkpoints.find(t=>t.id===e)}getAfter(e){let t=this.checkpoints.findIndex(n=>n.id===e);return t>=0?this.checkpoints.slice(t):[]}clear(){this.checkpoints=[],this.nextId=1;}};Z();var to=new Map,Ko=null;function Or(){return process.env.ARQZERO_TODOS_DIR??Se.join(I(),"todos")}function Ur(o){return Se.join(Or(),`${o}.json`)}function zo(){return to}function Nr(o){if(Ko=o,to.clear(),!o)return;let e=Ur(o);if(z$1.existsSync(e))try{let t=z$1.readFileSync(e,"utf-8"),n=JSON.parse(t);if(Array.isArray(n))for(let r of n)r&&typeof r.id=="string"&&typeof r.content=="string"&&typeof r.status=="string"&&to.set(r.id,r);}catch{}}function Br(){if(!Ko)return;let o=Or();z$1.mkdirSync(o,{recursive:true});let e=[...to.values()];z$1.writeFileSync(Ur(Ko),JSON.stringify(e,null,2));}function Hr(o){let e=o.match(/^(\d+)([smh])$/);if(!e)return null;let t=parseInt(e[1],10);if(t<=0)return null;let n=e[2];return t*{s:1e3,m:6e4,h:36e5}[n]}var oo=class{jobs=[];nextId=1;add(e,t,n,r){let s=this.nextId++,i=setInterval(()=>{n().catch(a=>{r&&r(a);});},e);return this.jobs.push({id:s,intervalMs:e,prompt:t,timer:i}),s}list(){return this.jobs.map(({id:e,intervalMs:t,prompt:n})=>({id:e,intervalMs:t,prompt:n}))}stop(e){let t=this.jobs.findIndex(n=>n.id===e);return t===-1?false:(clearInterval(this.jobs[t].timer),this.jobs.splice(t,1),true)}stopAll(){for(let e of this.jobs)clearInterval(e.timer);this.jobs=[];}};var k={brand:"#00D4AA",brandLight:"#4EECD0",success:"#3AAF60",error:"#D04545",warning:"#C47F00",info:"#4A8FD4",toolFile:"#4A7CF0",toolBash:"#D42E8A",diffLineAdd:"#2E9E50",diffWordAdd:"#48BC66",diffLineRemove:"#B03A3A",diffWordRemove:"#D05858",username:"#6B7280",structural:"#374151",badgeBg:"#1f1f1f",textPrimary:"#D4D4D4",textSecondary:"#6B7280",permYes:"#3AAF60",permAlways:"#4A8FD4",permNo:"#D04545"},m={dot:process.platform==="darwin"?"\u23FA":"\u25CF",branch:"\u23BF",arrow:"\u25B8",successDot:"\u25CF",failureMark:"\xD7",primary:k.brand,primaryShimmer:k.brandLight,text:k.textPrimary,dim:k.textSecondary,success:k.success,error:k.error,warning:k.warning,info:k.info,toolBorder:k.toolFile,bashBorder:k.toolBash,diffAdded:k.diffLineAdd,diffRemoved:k.diffLineRemove,version:"2.0.0"},Go=["Architecting","Assembling","Blueprinting","Bootstrapping","Brewing","Building","Calibrating","Calculating","Cascading","Channeling","Churning","Compiling","Computing","Configuring","Constructing","Converging","Crafting","Crunching","Debugging","Decoding","Deploying","Designing","Dispatching","Encoding","Engineering","Executing","Fabricating","Forging","Generating","Gridlining","Hashing","Indexing","Initializing","Integrating","Iterating","Launching","Loading","Machining","Manufacturing","Mapping","Materializing","Meshing","Modeling","Navigating","Networking","Optimizing","Orchestrating","Parsing","Patching","Pipelining","Processing","Profiling","Programming","Propagating","Prototyping","Quantizing","Querying","Reasoning","Refactoring","Rendering","Resolving","Routing","Scaffolding","Scanning","Sequencing","Serializing","Shaping","Solving","Sorting","Spawning","Spinning","Structuring","Synthesizing","Threading","Tokenizing","Tracing","Transforming","Traversing","Tuning","Vectorizing","Welding","Wiring","Zeroing"];function Bi(o){let e=te.find(s=>s.id===o||s.displayName.toLowerCase()===o.toLowerCase());if(e)return e.displayName;let t=["accounts/fireworks/models/","accounts/","models/"],n=o;for(let s of t)n.startsWith(s)&&(n=n.slice(s.length));return te.find(s=>s.id.endsWith("/"+n))?.displayName??n}function qr(o){let e=o.inputTokens+o.outputTokens;return e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}function Hi(o){return o<.001?"$0.00":`$${o.toFixed(2)}`}function qi(){try{return yo.userInfo().username}catch{return "user"}}function Fi(){let o=process.cwd(),e=yo.homedir();return o.startsWith(e)?"~"+o.slice(e.length).replace(/\\/g,"/"):o.replace(/\\/g,"/")}function Vo(){return process.stdout.columns||80}var Fr=[" \u2591\u2588\u2588\u2588\u2588\u2588\u2557\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591"," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2557\u2588\u2588\u2551"," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D"," \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D\u255A\u2550\u255D"],Wi=["\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591 \u2591\u2588\u2588\u2588\u2588\u2588\u2557\u2591","\u255A\u2550\u2550\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557"," \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2551"," \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D "],Ki=[" \u2584\u2580\u2588 \u2588\u2580\u2588 \u2588\u2580\u2588 \u2580\u2588 \u2588\u2580\u2580 \u2588\u2580\u2588 \u2588\u2580\u2588"," \u2588\u2580\u2588 \u2588\u2580\u2584 \u2580\u2580\u2588 \u2588\u2584 \u2588\u2588\u2584 \u2588\u2580\u2584 \u2588\u2584\u2588"];function zi(){let o=Vo();if(o>=80){let e=Fr.length;return jsxs(Box,{flexDirection:"column",children:[Array.from({length:e},(t,n)=>jsxs(Box,{children:[jsx(Text,{color:k.brand,bold:true,children:Fr[n]}),jsxs(Text,{color:"#8BBBD4",bold:true,children:[" ",Wi[n]??""]})]},n)),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:" \u2500\u2500\u2500\u2500\u2500\u2500\u2500 "}),jsxs(Text,{color:k.info,bold:true,children:["v",m.version]})]})]})}return o>=40?jsxs(Box,{flexDirection:"column",children:[Ki.map((e,t)=>jsx(Box,{children:jsx(Text,{color:k.brand,bold:true,children:e})},t)),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:"\u2500\u2500 "}),jsxs(Text,{color:k.info,bold:true,children:["v",m.version]})]})]}):jsxs(Box,{children:[jsx(Text,{color:k.brand,bold:true,children:"\u25C6 ArqZero"}),jsxs(Text,{color:k.info,children:[" v",m.version]})]})}function Jo({modelName:o,tokenUsage:e,costEstimate:t,contextPercent:n}){let[r,s]=useState(Vo());useEffect(()=>{let g=()=>s(Vo());return process.stdout.on("resize",g),()=>{process.stdout.off("resize",g);}},[]);let i=qi(),a=Bi(o),c=Fi(),l=Math.max(10,r-40),p=c.length>l?"..."+c.slice(c.length-l+3):c,u=Math.max(10,Math.min(r,120)),f=r<60;return jsxs(Box,{flexDirection:"column",marginBottom:0,children:[jsx(zi,{}),f?jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsx(Text,{color:k.username,children:i}),jsx(Text,{color:k.brand,children:" \u25C8 "}),jsx(Text,{color:m.text,children:p})]}),jsxs(Box,{children:[jsx(Text,{color:k.structural,children:"\u2590"}),jsxs(Text,{color:k.badgeBg,backgroundColor:k.brand,bold:true,children:[" ",a," "]}),jsx(Text,{color:k.structural,children:"\u258C"}),e&&jsxs(Text,{color:m.dim,children:[" ",qr(e),"t"]}),n>0&&jsxs(Text,{color:m.dim,children:[" ",n,"%"]})]})]}):jsxs(Box,{children:[jsxs(Box,{flexGrow:1,children:[jsx(Text,{color:k.username,children:i}),jsx(Text,{color:k.brand,children:" \u25C8 "}),jsx(Text,{color:m.text,children:p})]}),jsxs(Box,{children:[jsx(Text,{color:k.structural,children:"\u2590"}),jsxs(Text,{color:k.badgeBg,backgroundColor:k.brand,bold:true,children:[" ",a," "]}),jsx(Text,{color:k.structural,children:"\u258C"}),e&&jsxs(Text,{color:m.dim,children:[" ",qr(e)," tok"]}),t>0&&jsxs(Text,{color:m.dim,children:[" \u2502 ",Hi(t)]}),n>0&&jsxs(Text,{color:m.dim,children:[" \u2502 ctx ",n,"%"]})]})]}),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:"\u2500"}),jsx(Text,{color:k.structural,children:"\u2500".repeat(Math.max(0,u-1))})]})]})}var Kr=new Marked;Kr.use(markedTerminal({showSectionPrefix:false,reflowText:true,tab:2,codespan:o=>`\x1B[36m${o}\x1B[0m`,code(o,e){if(q.syntaxHighlightingDisabled)return o;try{return e&&Zo.getLanguage(e)?Zo.highlight(o,{language:e,ignoreIllegals:!0}).value:Zo.highlightAuto(o).value}catch{return o}},hr:()=>"\u2500".repeat(40)+`
|
|
46
|
+
`)}Ze();var te=[{id:"accounts/fireworks/models/glm-5p1",displayName:"Enso",tier:"default",description:"Default \u2014 200K context, balanced speed and reasoning",costPerMInput:.6,costPerMOutput:2.2,contextWindow:2e5},{id:"accounts/fireworks/models/deepseek-v4-pro",displayName:"PRIMUS",tier:"strong",description:"Advanced \u2014 auto-engaged for complex multi-step tasks",costPerMInput:1,costPerMOutput:3,contextWindow:2e5}];function _e(o){let e=o.toLowerCase();return te.find(t=>t.displayName.toLowerCase()===e||t.id===o||t.id.endsWith("/"+e))}function qt(o){return te.find(e=>e.tier===o)??te[0]}function Qe(o){let e=te.find(n=>n.id===o);if(e)return {costPerMInput:e.costPerMInput,costPerMOutput:e.costPerMOutput};let t=qt("default");return {costPerMInput:t.costPerMInput,costPerMOutput:t.costPerMOutput}}var ur=["planning","code-review","security-review","incident-response","migration","backend-patterns","microservices","database-design"];function dr(o,e,t){if(!t.startsWith("accounts/fireworks/models/"))return {model:t,reason:"default (cross-provider routing disabled)"};if(e.some(s=>ur.includes(s))){let s=qt("strong");if(s&&s.id!==t){let i=e.filter(a=>ur.includes(a));return {model:s.id,reason:`${i.join(", ")} task`}}}return {model:t,reason:"default"}}Z();function qo(){return Ce.join(I(),"auth.json")}var Pi=7;function D(){try{let o=qo();return z$1.existsSync(o)?JSON.parse(z$1.readFileSync(o,"utf-8")):null}catch{return null}}function xe(o){let e=qo();z$1.mkdirSync(Ce.dirname(e),{recursive:true}),z$1.writeFileSync(e,JSON.stringify(o,null,2),{mode:384});}function Ht(){try{z$1.unlinkSync(qo());}catch{}}function gr(o){return Date.now()>=o.expiresAt}function fr(o){let e=Pi*24*60*60*1e3;return Date.now()-o.lastValidated>e}var Ri="https://lxvdapryxafrreskdvny.functions.supabase.co/api",Ft=class extends Error{constructor(e,t){super(`Invalid ARQZERO_API_URL "${e}": ${t}`),this.name="InvalidApiUrlError";}};function B(){let o=process.env.ARQZERO_API_URL?.trim(),e=o&&o.length>0?o:Ri,t;try{t=new URL(e);}catch{throw new Ft(e,"not a valid URL")}if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Ft(e,`unsupported protocol ${t.protocol}`);return e.replace(/\/+$/,"")}var Ei="https://arqzero.pages.dev";function hr(){let o=process.env.ARQZERO_WEB_URL?.trim();return (o&&o.length>0?o:Ei).replace(/\/+$/,"")}async function yr(o,e){let t=await fetch(`${B()}/auth/device/authorize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:o,deviceLabel:e})});if(!t.ok){let n=await t.json().catch(()=>({}));throw new Error(n.error??`Device authorize failed: ${t.status}`)}return t.json()}async function xr(o){let e=await fetch(`${B()}/auth/device/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:o})}),t=await e.json().catch(()=>({}));if(e.ok)return {kind:"ok",...t};if(e.status===400&&t.error==="authorization_pending")return {kind:"pending"};if(e.status===400&&t.error==="slow_down")return {kind:"slow_down"};if(e.status===410&&t.error==="denied")return {kind:"denied"};if(e.status===410)return {kind:"expired"};throw new Error(t.error??`Poll failed: ${e.status}`)}async function Wt(o){let e=await fetch(`${B()}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})});if(!e.ok){let t=await e.json().catch(()=>({}));throw new Error(t.error??`Login request failed: ${e.status}`)}}async function Kt(o,e,t,n){let r=await fetch(`${B()}/auth/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,code:e,machineId:t,deviceLabel:n})});if(!r.ok){let s=await r.json().catch(()=>({}));throw new Error(s.error??`Verification failed: ${r.status}`)}return r.json()}async function Ho(o,e){let t=await fetch(`${B()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:o,machineId:e})});if(!t.ok)throw new Error(`Refresh failed: ${t.status}`);return t.json()}async function zt(o){await fetch(`${B()}/auth/logout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:o})}).catch(()=>{});}async function ke(o){let e=await fetch(`${B()}/license`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`License fetch failed: ${e.status}`);return e.json()}async function kr(o,e,t){let n=await fetch(`${B()}/usage/sync`,{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify({date:e,messageCount:t})});if(!n.ok)throw new Error(`Usage sync failed: ${n.status}`);return n.json()}async function br(o){let e=await fetch(`${B()}/users/me`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`User fetch failed: ${e.status}`);return e.json()}async function Gt(o){let e=await fetch(`${B()}/users/sessions`,{headers:{Authorization:`Bearer ${o}`}});if(!e.ok)throw new Error(`Sessions fetch failed: ${e.status}`);return (await e.json()).sessions??[]}async function wr(o,e){let t=await fetch(`${B()}/users/sessions/${e}`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}});if(!t.ok){let n=await t.json().catch(()=>({}));throw new Error(n.error??`Revoke failed: ${t.status}`)}}async function vr(o,e){let t=await fetch(`${B()}/checkout/session`,{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify({tier:e})});if(!t.ok)throw new Error(`Checkout failed: ${t.status}`);return (await t.json()).url}Z();function Cr(){return Ce.join(I(),"usage.json")}var Mi=10;function Vt(){return new Date().toISOString().slice(0,10)}function $i(){try{let o=Cr();if(!z$1.existsSync(o))return {date:Vt(),count:0,lastSyncedCount:0};let e=JSON.parse(z$1.readFileSync(o,"utf-8"));return e.date!==Vt()?{date:Vt(),count:0,lastSyncedCount:0}:e}catch{return {date:Vt(),count:0,lastSyncedCount:0}}}function Tr(o){let e=Cr();z$1.mkdirSync(Ce.dirname(e),{recursive:true}),z$1.writeFileSync(e,JSON.stringify(o),"utf-8");}function Ar(){let o=$i();if(o.count++,Tr(o),o.count-o.lastSyncedCount>=Mi){let e=o.count;o.lastSyncedCount=e,Tr(o);let t=D();t&&(async()=>{try{await kr(t.accessToken,o.date,e);}catch{}})();}}var Ye=null,Wo=0,Ii=3e4,Fo=new Set,Pr=new Map,Rr=[70,80,90,92,94,96,98,100];function Zt(o){return /deepseek-v4-pro|primus/i.test(o)?"primus":"enso"}async function Er(o=false){let e=D();if(!e)return null;if(!o&&Ye&&Date.now()-Wo<Ii)return Ye;try{let t=await fetch(`${B()}/usage/quota`,{headers:{Authorization:`Bearer ${e.accessToken}`}});return t.ok?(Ye=await t.json(),Wo=Date.now(),Ye):null}catch{return null}}async function Mr(o){let e=D();if(!e)return null;try{let t=await fetch(`${B()}/usage/track`,{method:"POST",headers:{Authorization:`Bearer ${e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(o)});return t.ok?(Ye=await t.json(),Wo=Date.now(),Ye):null}catch{return null}}function $r(o){let e=[],t=[{bucket:"enso",period:"5h",entry:o.enso["5h"]},{bucket:"enso",period:"week",entry:o.enso.week},{bucket:"primus",period:"5h",entry:o.primus["5h"]},{bucket:"primus",period:"week",entry:o.primus.week}];for(let{bucket:n,period:r,entry:s}of t){let i=`${n}-${r}`,a=`${i}-${s.resetsAt}`,c=Pr.get(i),l=new Date(s.resetsAt).getTime();if(c!==l){for(let p of Rr)Fo.delete(`${i}-${c}-${p}`);Pr.set(i,l);}for(let p of Rr)if(s.percent>=p){let u=`${a}-${p}`;Fo.has(u)||(Fo.add(u),e.push({bucket:n,period:r,percent:p,used:s.used,cap:s.cap,resetsAt:s.resetsAt}));}}return e}function Qt(o,e=Date.now()){let t=new Date(o).getTime()-e;if(t<=0)return "now";let n=Math.floor(t/6e4);if(n<60)return `in ${n}m`;let r=Math.floor(n/60),s=n%60;return r<24?`in ${r}h${s.toString().padStart(2,"0")}m`:`in ${Math.floor(r/24)}d${r%24}h`}function Ir(o){return o==="enso"?"Enso":"PRIMUS"}function _i(){return {inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,costMicrocents:0}}var me={startedAt:Date.now(),linesAdded:0,linesRemoved:0,perModel:{}};function _r(o,e){let t=me.perModel[o]??_i();t.inputTokens+=e.inputTokens??0,t.outputTokens+=e.outputTokens??0,t.cacheReadTokens+=e.cacheReadTokens??0,t.cacheWriteTokens+=e.cacheWriteTokens??0;let n=Qe(o),r=((e.inputTokens??0)*n.costPerMInput+(e.outputTokens??0)*n.costPerMOutput)/1e6;t.costMicrocents+=Math.round(r*1e6),me.perModel[o]=t;}function Yt(o,e){me.linesAdded+=Math.max(0,o),me.linesRemoved+=Math.max(0,e);}function Dr(){let o=Object.entries(me.perModel).map(([e,t])=>({modelId:e,displayName:e,bucket:Zt(e),...t}));return {startedAt:me.startedAt,durationMs:Date.now()-me.startedAt,linesAdded:me.linesAdded,linesRemoved:me.linesRemoved,perModel:o}}var be=class{messages=[];executor;options;activeCapabilityContext="";activeModel;turnAbort=new AbortController;constructor(e){this.options=e,this.activeModel=e.model,this.executor=new Nt(e.registry,e.permissions,e.checkpointStore);}buildHookPayload(e,t={}){let n=this.options.session?.id,r=n?Lo(n):void 0,s=this.options.toolContext?.cwd;return {event:e,hook_event_name:e,sessionId:n,session_id:n,cwd:s,transcript_path:r,timestamp:Date.now(),...t,tool_name:t.tool_name??t.toolName,toolName:t.toolName??t.tool_name,tool_input:t.tool_input??t.toolInput,toolInput:t.toolInput??t.tool_input,tool_response:t.tool_response??t.toolResult,toolResult:t.toolResult??t.tool_response}}getMessages(){return [...this.messages]}getActiveModel(){return this.activeModel}async handleUserMessage(e,t={}){if(this.options.session?.touch(),this.turnAbort=new AbortController,this.options.toolContext.abortSignal=this.turnAbort.signal,this.options.hooks){let l=await this.options.hooks.fire("UserPromptSubmit",this.buildHookPayload("UserPromptSubmit",{tool_input:e}));if(l.action==="deny"){t.onError?.(new Error(l.message??"Prompt blocked by hook"));return}typeof l.modifiedInput=="string"&&(e=l.modifiedInput);}let n=rr(e,Do),r=ir(n),s=sr(r,Do,8);this.activeCapabilityContext=ar(s),s.length>0&&t.onCapabilitiesMatched?.(s);let i=dr(e,s.map(l=>l.capability.name),this.options.model);this.activeModel=i.model,i.model!==this.options.model&&t.onModelRouted?.(i.model,i.reason),Ar();let a=Ot(e);this.messages.push(a),this.options.session&&xt(this.options.session.id,a),this.executor.setCurrentPrompt(e),await this.runConversationLoop(t),this.executor.setCurrentPrompt(void 0);let{contextWindow:c}=this.options;if(c){let l=c.getUsageSummary();if(c.isCritical()&&!c.needsCompaction()&&t.onContextWarning?.(l.percent,"warning"),c.needsCompaction()){t.onContextWarning?.(l.percent,"compacting"),await this.options.hooks?.fire("PreCompact",this.buildHookPayload("PreCompact"));let p=c.getPreserveCount(this.messages.length),u=await Vn(this.messages,p,this.options.provider,this.options.model);if(u.compactedMessageCount>0){let f=this.messages.slice(this.messages.length-u.preservedMessageCount);if(this.messages=Jn(u.summary,f),this.options.session?.recordCompaction(),this.options.session){let d={summary:u.summary,preservedMessages:f,compactedCount:u.compactedMessageCount};jo(this.options.session.id,d);}let g=c.getUsageSummary();t.onContextWarning?.(g.percent,"compacted"),t.onCompaction?.(u),await this.options.hooks?.fire("PostCompact",this.buildHookPayload("PostCompact",{tool_response:{compactedMessageCount:u.compactedMessageCount}}));}}}}async runConversationLoop(e,t=0){let n=this.options.maxToolRounds??25;if(t>=n){e.onError?.(new Error("Max tool execution rounds reached"));return}let r=this.options.registry.getDefinitions(),s={messages:this.messages,model:this.activeModel,tools:r.length>0?r:void 0,maxTokens:this.options.maxTokens,systemPrompt:this.options.systemPrompt?this.options.systemPrompt+this.activeCapabilityContext:this.activeCapabilityContext||void 0,intent:"chat"},i=[],a="",c="",l=new Map;try{for await(let g of this.options.provider.chat(s))switch(g.type){case "text_delta":a+=g.text,e.onTextDelta?.(g.text);break;case "thinking_delta":c+=g.text,e.onThinkingDelta?.(g.text);break;case "tool_use_start":a&&(i.push({type:"text",text:a}),a=""),c&&(i.push({type:"thinking",text:c}),c=""),l.set(g.id,{name:g.name,jsonParts:[]}),e.onToolStart?.(g.id,g.name);break;case "tool_use_delta":l.get(g.id)?.jsonParts.push(g.input);break;case "tool_use_end":{let d=l.get(g.id);if(d){let y=d.jsonParts.join(""),b={};try{b=y?JSON.parse(y):{};}catch{b={_raw:y};}i.push({type:"tool_use",id:g.id,name:d.name,input:b}),l.delete(g.id);}break}case "message_end":this.options.contextWindow?.trackUsage(g.usage),e.onMessageEnd?.(g.usage),_r(this.activeModel,{inputTokens:g.usage.inputTokens,outputTokens:g.usage.outputTokens,cacheReadTokens:g.usage.cacheReadTokens,cacheWriteTokens:g.usage.cacheWriteTokens}),(async()=>{let d=Zt(this.activeModel),y=Qe(this.activeModel),b=g.usage.inputTokens??0,R=g.usage.outputTokens??0,L=(b*y.costPerMInput+R*y.costPerMOutput)/1e6,q=Math.round(L*1e6),he=await Mr({modelBucket:d,inputTokens:b,outputTokens:R,costMicrocents:q});if(he&&e.onQuotaThreshold)for(let ze of $r(he))e.onQuotaThreshold(ze);})();break;case "error":e.onError?.(g.error);break}}catch(g){e.onError?.(g instanceof Error?g:new Error(String(g)));return}c&&i.push({type:"thinking",text:c}),a&&i.push({type:"text",text:a});let p=Kn(i);this.messages.push(p),this.options.session&&xt(this.options.session.id,p);let u=i.filter(g=>g.type==="tool_use");if(u.length===0){await this.options.hooks?.fire("Stop",this.buildHookPayload("Stop"));return}let f=await Promise.all(u.map(async g=>{if(this.options.hooks){let b=await this.options.hooks.fire("PreToolUse",this.buildHookPayload("PreToolUse",{tool_name:g.name,tool_input:g.input}));if(b.action==="deny")return {block:g,result:{content:b.message??"Blocked by hook",isError:true}};b.modifiedInput!==void 0&&(g.input=b.modifiedInput??void 0);}let d=await this.executor.execute(g.name,g.input,this.options.toolContext),y=d.isError?"PostToolUseFailure":"PostToolUse";return await this.options.hooks?.fire(y,this.buildHookPayload(y,{tool_name:g.name,tool_input:g.input,tool_response:d})),{block:g,result:d}}));for(let{block:g,result:d}of f){e.onToolEnd?.(g.id,g.name,d,g.input);let y=zn(g.id,g.name,d.content,d.isError);this.messages.push(y),this.options.session&&xt(this.options.session.id,y);}await this.runConversationLoop(e,t+1);}setMessages(e){this.messages=[...e];}abort(){this.options.provider.abort(),this.turnAbort.signal.aborted||this.turnAbort.abort();}};var Di=[/rm\s+(-rf|--recursive)/,/rm\s+-[a-zA-Z]*f[a-zA-Z]*\s/,/git\s+push\s+--force/,/git\s+push\s+-f\b/,/git\s+reset\s+--hard/,/git\s+clean\s+-[a-zA-Z]*f/,/DROP\s+(TABLE|DATABASE)/i,/TRUNCATE\s+TABLE/i,/DELETE\s+FROM\s+\w+\s*$/i,/mkfs\b/,/fdisk\b/,/dd\s+if=.*\s+of=(?!\/dev\/null)/,/chmod\s+777/,/curl\s+.*\|\s*(ba)?sh/,/wget\s+.*\|\s*(ba)?sh/,/>\s*\/etc\//,/npm\s+publish/,/npx\s+.*--yes/];function Lr(o,e,t){if(e==="safe")return "safe";if(e==="dangerous")return "dangerous";if(o!=="Bash")return e;let n=t?.command;if(!n)return e;for(let r of Di)if(r.test(n))return "dangerous";return e}var Li=new Set(["Write","Edit","MultiEdit","Bash"]),Xe=class{sessionAlwaysAllow=new Set;sessionTrustedPatterns=new Map;config;constructor(e){this.config=e;}async check(e,t,n,r){if(this.config.alwaysDeny.includes(e))return {allowed:false,denial:`Tool "${e}" is denied by configuration`};let s=Lr(e,t,n);if(s==="safe")return {allowed:true};if(this.sessionAlwaysAllow.has(e))return {allowed:true};if(Li.has(e)){if(this.config.defaultMode==="locked")return {allowed:false,denial:`Tool "${e}" denied: locked mode`};let c=await r({tool:e,input:n,level:s});return c.allowed?(c.remember==="session"&&this.sessionAlwaysAllow.add(e),{allowed:true}):{allowed:false,denial:`Tool "${e}" denied by user`}}if(this.config.alwaysAllow.includes(e))return {allowed:true};if(this.config.defaultMode==="trust")return {allowed:true};if(this.config.defaultMode==="locked")return {allowed:false,denial:`Tool "${e}" denied: locked mode`};if(this.matchesTrustedPattern(e,n,this.config.trustedPatterns))return {allowed:true};let i=this.sessionTrustedPatterns.get(e);if(i&&this.matchesPatternList(n,i))return {allowed:true};let a=await r({tool:e,input:n,level:s});return a.allowed?(a.remember==="session"&&this.sessionAlwaysAllow.add(e),{allowed:true}):{allowed:false,denial:`Tool "${e}" denied by user`}}matchesTrustedPattern(e,t,n){let r=n[e];return r?this.matchesPatternList(t,r):false}matchesPatternList(e,t){let n=e?.command;if(!n)return false;for(let r of t)if(this.globMatch(n,r))return true;return false}globMatch(e,t){let n=t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`).test(e)}getSessionAlwaysAllow(){return [...this.sessionAlwaysAllow]}resetSession(){this.sessionAlwaysAllow.clear(),this.sessionTrustedPatterns.clear();}};var wt=class{id;startedAt;lastActiveAt;messageCount=0;compactionCount=0;constructor(e){this.id=e??fs.randomUUID(),this.startedAt=new Date,this.lastActiveAt=new Date;}touch(){this.lastActiveAt=new Date,this.messageCount++;}recordCompaction(){this.compactionCount++;}getInfo(){return {id:this.id,startedAt:this.startedAt,lastActiveAt:this.lastActiveAt,messageCount:this.messageCount,compactionCount:this.compactionCount}}};var Oi={maxContextTokens:2e5,compactionThreshold:.95,preserveRatio:.2},Xt=class{config;totalInputTokens=0;totalOutputTokens=0;constructor(e){this.config={...Oi,...e};}trackUsage(e){this.totalInputTokens+=e.inputTokens,this.totalOutputTokens+=e.outputTokens;}getEstimatedTokens(){return this.totalInputTokens}needsCompaction(){let e=this.config.maxContextTokens*this.config.compactionThreshold;return this.totalInputTokens>=e}isCritical(){return this.totalInputTokens>=this.config.maxContextTokens*.9}getTokenBudgetRemaining(){return Math.max(0,this.config.maxContextTokens-this.totalInputTokens)}getPreserveCount(e){return Math.max(2,Math.ceil(e*this.config.preserveRatio))}getUsageSummary(){return {input:this.totalInputTokens,output:this.totalOutputTokens,max:this.config.maxContextTokens,percent:Math.round(this.totalInputTokens/this.config.maxContextTokens*100)}}reset(){this.totalInputTokens=0,this.totalOutputTokens=0;}};var et=class{checkpoints=[];nextId=1;capture(e,t,n,r,s){let i={id:this.nextId++,timestamp:Date.now(),toolName:e,filePath:t,beforeContent:n,afterContent:r,promptText:s};return this.checkpoints.push(i),i}getAll(){return [...this.checkpoints]}getById(e){return this.checkpoints.find(t=>t.id===e)}getAfter(e){let t=this.checkpoints.findIndex(n=>n.id===e);return t>=0?this.checkpoints.slice(t):[]}clear(){this.checkpoints=[],this.nextId=1;}};Z();var to=new Map,Ko=null;function Or(){return process.env.ARQZERO_TODOS_DIR??Ce.join(I(),"todos")}function Ur(o){return Ce.join(Or(),`${o}.json`)}function zo(){return to}function Nr(o){if(Ko=o,to.clear(),!o)return;let e=Ur(o);if(z$1.existsSync(e))try{let t=z$1.readFileSync(e,"utf-8"),n=JSON.parse(t);if(Array.isArray(n))for(let r of n)r&&typeof r.id=="string"&&typeof r.content=="string"&&typeof r.status=="string"&&to.set(r.id,r);}catch{}}function Br(){if(!Ko)return;let o=Or();z$1.mkdirSync(o,{recursive:true});let e=[...to.values()];z$1.writeFileSync(Ur(Ko),JSON.stringify(e,null,2));}function qr(o){let e=o.match(/^(\d+)([smh])$/);if(!e)return null;let t=parseInt(e[1],10);if(t<=0)return null;let n=e[2];return t*{s:1e3,m:6e4,h:36e5}[n]}var oo=class{jobs=[];nextId=1;add(e,t,n,r){let s=this.nextId++,i=setInterval(()=>{n().catch(a=>{r&&r(a);});},e);return this.jobs.push({id:s,intervalMs:e,prompt:t,timer:i}),s}list(){return this.jobs.map(({id:e,intervalMs:t,prompt:n})=>({id:e,intervalMs:t,prompt:n}))}stop(e){let t=this.jobs.findIndex(n=>n.id===e);return t===-1?false:(clearInterval(this.jobs[t].timer),this.jobs.splice(t,1),true)}stopAll(){for(let e of this.jobs)clearInterval(e.timer);this.jobs=[];}};var k={brand:"#00D4AA",brandLight:"#4EECD0",success:"#3AAF60",error:"#D04545",warning:"#C47F00",info:"#4A8FD4",toolFile:"#4A7CF0",toolBash:"#D42E8A",diffLineAdd:"#2E9E50",diffWordAdd:"#48BC66",diffLineRemove:"#B03A3A",diffWordRemove:"#D05858",username:"#6B7280",structural:"#374151",badgeBg:"#1f1f1f",textPrimary:"#D4D4D4",textSecondary:"#6B7280",permYes:"#3AAF60",permAlways:"#4A8FD4",permNo:"#D04545"},m={dot:process.platform==="darwin"?"\u23FA":"\u25CF",branch:"\u23BF",arrow:"\u25B8",successDot:"\u25CF",failureMark:"\xD7",primary:k.brand,primaryShimmer:k.brandLight,text:k.textPrimary,dim:k.textSecondary,success:k.success,error:k.error,warning:k.warning,info:k.info,toolBorder:k.toolFile,bashBorder:k.toolBash,diffAdded:k.diffLineAdd,diffRemoved:k.diffLineRemove,version:"2.0.0"},Go=["Architecting","Assembling","Blueprinting","Bootstrapping","Brewing","Building","Calibrating","Calculating","Cascading","Channeling","Churning","Compiling","Computing","Configuring","Constructing","Converging","Crafting","Crunching","Debugging","Decoding","Deploying","Designing","Dispatching","Encoding","Engineering","Executing","Fabricating","Forging","Generating","Gridlining","Hashing","Indexing","Initializing","Integrating","Iterating","Launching","Loading","Machining","Manufacturing","Mapping","Materializing","Meshing","Modeling","Navigating","Networking","Optimizing","Orchestrating","Parsing","Patching","Pipelining","Processing","Profiling","Programming","Propagating","Prototyping","Quantizing","Querying","Reasoning","Refactoring","Rendering","Resolving","Routing","Scaffolding","Scanning","Sequencing","Serializing","Shaping","Solving","Sorting","Spawning","Spinning","Structuring","Synthesizing","Threading","Tokenizing","Tracing","Transforming","Traversing","Tuning","Vectorizing","Welding","Wiring","Zeroing"];function Bi(o){let e=te.find(s=>s.id===o||s.displayName.toLowerCase()===o.toLowerCase());if(e)return e.displayName;let t=["accounts/fireworks/models/","accounts/","models/"],n=o;for(let s of t)n.startsWith(s)&&(n=n.slice(s.length));return te.find(s=>s.id.endsWith("/"+n))?.displayName??n}function Hr(o){let e=o.inputTokens+o.outputTokens;return e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}function qi(o){return o<.001?"$0.00":`$${o.toFixed(2)}`}function Hi(){try{return yo.userInfo().username}catch{return "user"}}function Fi(){let o=process.cwd(),e=yo.homedir();return o.startsWith(e)?"~"+o.slice(e.length).replace(/\\/g,"/"):o.replace(/\\/g,"/")}function Vo(){return process.stdout.columns||80}var Fr=[" \u2591\u2588\u2588\u2588\u2588\u2588\u2557\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591"," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557"," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2557\u2588\u2588\u2551"," \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D"," \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D\u255A\u2550\u255D"],Wi=["\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2591 \u2591\u2588\u2588\u2588\u2588\u2588\u2557\u2591","\u255A\u2550\u2550\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557"," \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2551"," \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D "],Ki=[" \u2584\u2580\u2588 \u2588\u2580\u2588 \u2588\u2580\u2588 \u2580\u2588 \u2588\u2580\u2580 \u2588\u2580\u2588 \u2588\u2580\u2588"," \u2588\u2580\u2588 \u2588\u2580\u2584 \u2580\u2580\u2588 \u2588\u2584 \u2588\u2588\u2584 \u2588\u2580\u2584 \u2588\u2584\u2588"];function zi(){let o=Vo();if(o>=80){let e=Fr.length;return jsxs(Box,{flexDirection:"column",children:[Array.from({length:e},(t,n)=>jsxs(Box,{children:[jsx(Text,{color:k.brand,bold:true,children:Fr[n]}),jsxs(Text,{color:"#8BBBD4",bold:true,children:[" ",Wi[n]??""]})]},n)),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:" \u2500\u2500\u2500\u2500\u2500\u2500\u2500 "}),jsxs(Text,{color:k.info,bold:true,children:["v",m.version]})]})]})}return o>=40?jsxs(Box,{flexDirection:"column",children:[Ki.map((e,t)=>jsx(Box,{children:jsx(Text,{color:k.brand,bold:true,children:e})},t)),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:"\u2500\u2500 "}),jsxs(Text,{color:k.info,bold:true,children:["v",m.version]})]})]}):jsxs(Box,{children:[jsx(Text,{color:k.brand,bold:true,children:"\u25C6 ArqZero"}),jsxs(Text,{color:k.info,children:[" v",m.version]})]})}function Jo({modelName:o,tokenUsage:e,costEstimate:t,contextPercent:n}){let[r,s]=useState(Vo());useEffect(()=>{let g=()=>s(Vo());return process.stdout.on("resize",g),()=>{process.stdout.off("resize",g);}},[]);let i=Hi(),a=Bi(o),c=Fi(),l=Math.max(10,r-40),p=c.length>l?"..."+c.slice(c.length-l+3):c,u=Math.max(10,Math.min(r,120)),f=r<60;return jsxs(Box,{flexDirection:"column",marginBottom:0,children:[jsx(zi,{}),f?jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsx(Text,{color:k.username,children:i}),jsx(Text,{color:k.brand,children:" \u25C8 "}),jsx(Text,{color:m.text,children:p})]}),jsxs(Box,{children:[jsx(Text,{color:k.structural,children:"\u2590"}),jsxs(Text,{color:k.badgeBg,backgroundColor:k.brand,bold:true,children:[" ",a," "]}),jsx(Text,{color:k.structural,children:"\u258C"}),e&&jsxs(Text,{color:m.dim,children:[" ",Hr(e),"t"]}),n>0&&jsxs(Text,{color:m.dim,children:[" ",n,"%"]})]})]}):jsxs(Box,{children:[jsxs(Box,{flexGrow:1,children:[jsx(Text,{color:k.username,children:i}),jsx(Text,{color:k.brand,children:" \u25C8 "}),jsx(Text,{color:m.text,children:p})]}),jsxs(Box,{children:[jsx(Text,{color:k.structural,children:"\u2590"}),jsxs(Text,{color:k.badgeBg,backgroundColor:k.brand,bold:true,children:[" ",a," "]}),jsx(Text,{color:k.structural,children:"\u258C"}),e&&jsxs(Text,{color:m.dim,children:[" ",Hr(e)," tok"]}),t>0&&jsxs(Text,{color:m.dim,children:[" \u2502 ",qi(t)]}),n>0&&jsxs(Text,{color:m.dim,children:[" \u2502 ctx ",n,"%"]})]})]}),jsxs(Box,{children:[jsx(Text,{color:k.brand,children:"\u2500"}),jsx(Text,{color:k.structural,children:"\u2500".repeat(Math.max(0,u-1))})]})]})}var Kr=new Marked;Kr.use(markedTerminal({showSectionPrefix:false,reflowText:true,tab:2,codespan:o=>`\x1B[36m${o}\x1B[0m`,code(o,e){if(H.syntaxHighlightingDisabled)return o;try{return e&&Zo.getLanguage(e)?Zo.highlight(o,{language:e,ignoreIllegals:!0}).value:Zo.highlightAuto(o).value}catch{return o}},hr:()=>"\u2500".repeat(40)+`
|
|
47
47
|
`}));function no(o){if(!o||o.length<3||!/[#*`_~\[\]|>-]/.test(o))return o;try{let e=Kr.parse(o,{async:!1});return e=e.replace(/\n{3,}/g,`
|
|
48
48
|
|
|
49
49
|
`).replace(/\n+$/,""),e=e.replace(/\*\*([^*]+)\*\*/g,"\x1B[1m$1\x1B[22m"),e=e.replace(/(?<!\*)\*([^*\n]+)\*(?!\*)/g,"\x1B[3m$1\x1B[23m"),e=e.replace(/^(\s*)\* /gm,"$1\u2022 "),e}catch{return o}}function zr(o,e,t){let n=o.length,r=e.length,s=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let i=1;i<=n;i++)for(let a=1;a<=r;a++)t(o[i-1],e[a-1])?s[i][a]=s[i-1][a-1]+1:s[i][a]=Math.max(s[i-1][a],s[i][a-1]);return s}function Gr(o,e,t,n){let r=[],s=e.length,i=t.length;for(;s>0&&i>0;)n(e[s-1],t[i-1])?(r.push({type:"same",value:e[s-1]}),s--,i--):o[s-1][i]>o[s][i-1]?(r.push({type:"removed",value:e[s-1]}),s--):o[s][i-1]>o[s-1][i]?(r.push({type:"added",value:t[i-1]}),i--):(r.push({type:"added",value:t[i-1]}),i--);for(;s>0;)r.push({type:"removed",value:e[s-1]}),s--;for(;i>0;)r.push({type:"added",value:t[i-1]}),i--;return r.reverse()}function Ji(o,e){let t=o.split(/(\s+)/).filter(a=>a.length>0),n=e.split(/(\s+)/).filter(a=>a.length>0),r=zr(t,n,(a,c)=>a===c),s=Gr(r,t,n,(a,c)=>a===c),i=[];for(let a of s){let c=i[i.length-1];c&&c.type===a.type?c.text+=a.value:i.push({text:a.value,type:a.type});}return i}function Vr(o,e,t=3){let n=o.split(`
|
|
50
50
|
`),r=e.split(`
|
|
51
|
-
`),s=zr(n,r,(d,y)=>d===y),i=Gr(s,n,r,(d,y)=>d===y),a=[],c=0,l=0;for(let d of i)d.type==="same"?(c++,l++,a.push({...d,oldNum:c,newNum:l})):d.type==="removed"?(c++,a.push({...d,oldNum:c})):(l++,a.push({...d,newNum:l}));let p=[];for(let d=0;d<a.length;d++){let y=a[d];if(y.type==="same")p.push({type:"context",content:y.value,oldLineNumber:y.oldNum,newLineNumber:y.newNum});else if(y.type==="removed"){let b=a[d+1];if(b&&b.type==="added"){let R=Ji(y.value,b.value);p.push({type:"removed",content:y.value,lineNumber:y.oldNum,segments:R.filter(D=>D.type!=="added")}),p.push({type:"added",content:b.value,lineNumber:b.newNum,segments:R.filter(D=>D.type!=="removed")}),d++;}else p.push({type:"removed",content:y.value,lineNumber:y.oldNum});}else p.push({type:"added",content:y.value,lineNumber:y.newNum});}if(t<0)return p;let u=d=>d.type!=="context",f=new Set;for(let d=0;d<p.length;d++)if(u(p[d]))for(let y=Math.max(0,d-t);y<=Math.min(p.length-1,d+t);y++)f.add(y);let g=[];for(let d=0;d<p.length;d++)f.has(d)&&g.push(p[d]);return g}var Zi=k.diffWordAdd,Qi=k.diffWordRemove;function Jr({num:o,width:e}){let t=o!=null?String(o).padStart(e," "):" ".repeat(e);return jsxs(Text,{color:m.dim,children:[t," "]})}function Yi(o,e){let t=e==="added"?m.diffAdded:m.diffRemoved,n=e==="added"?Zi:Qi,r=e==="added"?"#0a2e1a":"#2e0a0a";return o.map((s,i)=>s.type==="same"?jsx(Text,{color:t,backgroundColor:r,children:s.text},i):jsx(Text,{color:n,backgroundColor:r,bold:true,children:s.text},i))}function Xi({line:o,lineNumWidth:e}){if(o.type==="context")return jsxs(Box,{children:[jsx(Jr,{num:o.oldLineNumber,width:e}),jsxs(Text,{color:m.dim,children:[" ",o.content]})]});let t=o.type==="added"?"+":"-",n=o.type==="added"?m.diffAdded:m.diffRemoved,r=o.type==="added"?"#0a2e1a":"#2e0a0a";return jsxs(Box,{children:[jsx(Jr,{num:o.lineNumber,width:e}),jsxs(Text,{color:n,backgroundColor:r,children:[t," "]}),o.segments?jsx(Fragment,{children:Yi(o.segments,o.type)}):jsx(Text,{color:n,backgroundColor:r,children:o.content})]})}function Qo({filePath:o,oldContent:e,newContent:t,operation:n}){let r=Vr(e,t);if(r.length===0)return null;let s=r.reduce((p,u)=>{let f=[u.lineNumber,u.oldLineNumber,u.newLineNumber].filter(g=>g!=null);return Math.max(p,...f)},0),i=Math.max(String(s).length,3),a=r.filter(p=>p.type==="added").length,c=r.filter(p=>p.type==="removed").length;return jsxs(Box,{flexDirection:"column",marginLeft:2,children:[jsxs(Box,{children:[jsxs(Text,{color:m.dim,children:[m.branch," "]}),jsx(Text,{color:m.dim,dimColor:true,children:o}),a>0&&jsxs(Text,{color:m.diffAdded,children:[" +",a]}),c>0&&jsxs(Text,{color:m.diffRemoved,children:[" -",c]})]}),jsx(Box,{flexDirection:"column",marginLeft:2,children:r.map((p,u)=>jsx(Xi,{line:p,lineNumWidth:i},u))})]})}function ta(o){return `${(o/1e3).toFixed(1)}s`}function Yo({entry:o}){switch(o.type){case "user":return jsxs(Box,{marginBottom:1,children:[jsx(Text,{color:m.primary,bold:true,children:"you: "}),jsx(Text,{color:m.primary,children:o.content})]});case "text":return jsx(Box,{marginBottom:1,flexDirection:"column",children:jsx(Text,{color:m.text,children:no(o.content)})});case "tool":{let e=o.content,t=o.elapsed!=null?ta(o.elapsed):"",n=o.success!==false,r=o.toolName==="Dispatch",s=n?m.success:m.error,i=r?n?"\u25C9":"\u25D0":n?m.successDot:m.failureMark,a=o.toolName==="Bash",c=r?k.info:a?m.bashBorder:m.toolBorder;return jsxs(Box,{flexDirection:"column",marginBottom:1,children:[jsxs(Box,{children:[jsxs(Text,{color:s,children:[i," "]}),jsx(Text,{color:c,bold:true,italic:true,children:(o.toolName??"tool").toLowerCase()}),jsxs(Text,{color:m.dim,children:[" ",e]}),t&&jsxs(Text,{color:m.dim,children:[" ",t]})]}),o.filePath&&o.oldContent!=null&&o.newContent!=null&&jsx(Qo,{filePath:o.filePath,oldContent:o.oldContent,newContent:o.newContent,operation:o.diffOperation??"edit"}),o.diffLines&&o.diffLines.length>0&&!o.filePath&&jsx(Box,{flexDirection:"column",marginLeft:2,children:o.diffLines.map((l,p)=>{let u=l.startsWith("+")?m.diffAdded:l.startsWith("-")?m.diffRemoved:m.dim;return jsxs(Text,{color:u,children:[m.branch," ",l]},p)})})]})}case "error":return jsx(Box,{marginBottom:1,children:jsxs(Text,{color:m.error,children:[m.failureMark," Error: ",o.content]})});case "system":return jsx(Box,{marginBottom:1,children:jsx(Text,{color:m.dim,children:o.content})})}}function Zr(o){return `${(o/1e3).toFixed(1)}s`}var Qr=5;function en({group:o,expanded:e=false}){let{toolName:t,entries:n,totalElapsed:r}=o,s=n.length,a=t==="Bash"?m.bashBorder:m.toolBorder,c=r>0?Zr(r):"",l=t==="Read"?`${s} files`:t==="Glob"?`${s} patterns`:t==="Grep"?`${s} searches`:t==="WebSearch"?`${s} queries`:`${s} calls`,p=e?n:n.slice(0,Qr),u=e?0:Math.max(0,n.length-Qr);return jsxs(Box,{flexDirection:"column",marginBottom:1,children:[jsxs(Box,{children:[jsxs(Text,{color:m.success,children:[m.successDot," "]}),jsx(Text,{color:a,bold:true,italic:true,children:t.toLowerCase()}),jsxs(Text,{color:m.dim,children:[" (",l,")"]}),c&&jsxs(Text,{color:m.dim,children:[" ",c]})]}),p.map((f,g)=>jsxs(Box,{marginLeft:2,children:[jsxs(Text,{color:m.dim,children:[m.branch," ",f.content]}),f.elapsed!=null&&jsxs(Text,{color:m.dim,children:[" ",Zr(f.elapsed)]})]},g)),u>0&&jsxs(Box,{marginLeft:2,children:[jsxs(Text,{color:m.dim,children:[m.branch," +",u," more "]}),jsx(Text,{color:m.primary,children:"Ctrl+O"}),jsx(Text,{color:m.dim,children:" to expand"})]})]})}var on=["Tip: Use /clear to start fresh when switching topics","Tip: Use /compress to free up context space","Tip: Use /undo to restore files to a checkpoint","Tip: Use /think to adjust reasoning depth","Tip: Use /export to save this conversation"],Yr=10,so=30;function nn({isActive:o=true}){let[e]=useState(()=>Go[Math.floor(Math.random()*Go.length)]),[t,n]=useState(0),[r,s]=useState(true),[i,a]=useState(0),c=useRef(Date.now()),[l]=useState(()=>on[Math.floor(Math.random()*on.length)]);if(useEffect(()=>{if(!o)return;let d=setInterval(()=>{n(y=>(y+1)%(e.length+6));},50);return ()=>clearInterval(d)},[o,e]),useEffect(()=>{if(!o)return;let d=setInterval(()=>{s(y=>!y);},600);return ()=>clearInterval(d)},[o]),useEffect(()=>{if(!o)return;let d=setInterval(()=>{a(Math.floor((Date.now()-c.current)/1e3));},1e3);return ()=>clearInterval(d)},[o]),!o)return null;let p=`${e}...`,u=i>=so?p.length:i>=Yr?6:3;if(q.reducedMotion){let d=i>0?` ${i}s`:"";return jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsxs(Text,{color:m.primary,children:[m.dot," ",p]}),jsx(Text,{color:m.dim,children:d})]}),i>=so&&jsx(Box,{marginLeft:2,children:jsx(Text,{color:m.dim,children:l})})]})}let f=p.split("").map((d,y)=>{let R=Math.abs(y-t)<u;return jsx(Text,{color:R?m.primaryShimmer:m.primary,children:d},y)}),g=i>0?` ${i}s`:"";return jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsxs(Text,{color:m.primary,children:[r?m.dot:" "," "]}),f,jsx(Text,{color:m.dim,children:g})]}),i>=so&&jsx(Box,{marginLeft:2,children:jsx(Text,{color:m.dim,children:l})})]})}function ts(o){let e=[],t=0;for(;t<o.length;){let n=o[t];if(n.type==="tool"&&n.toolName){let r=t+1;for(;r<o.length&&o[r].type==="tool"&&o[r].toolName===n.toolName;)r++;if(r-t>=2){let i=o.slice(t,r),a=i.reduce((c,l)=>c+(l.elapsed??0),0);e.push({type:"grouped",toolName:n.toolName,entries:i,totalElapsed:a}),t=r;continue}}e.push(n),t++;}return e}function sn({entries:o,activeOperation:e,streamingText:t,expanded:n=false}){let r=ts(o);return jsxs(Box,{flexDirection:"column",children:[r.map((s,i)=>s.type==="grouped"?jsx(en,{group:s,expanded:n},i):jsx(Yo,{entry:s},i)),t&&jsxs(Box,{marginBottom:1,flexDirection:"column",children:[jsx(Text,{color:m.text,children:no(t)}),jsx(Text,{color:m.dim,children:"\u258C"})]}),e&&jsx(Box,{marginBottom:1,children:jsx(nn,{isActive:true})})]})}function cn({value:o,onChange:e,onSubmit:t,disabled:n}){let r=useCallback(s=>{t(o);},[o,t]);return n?jsxs(Box,{flexDirection:"column",children:[jsx(Box,{children:jsx(Text,{color:m.dim,children:"> "})}),jsx(Box,{children:jsx(Text,{color:m.dim,children:"\u2500".repeat(Math.max(10,Math.min(process.stdout.columns||80,120)))})})]}):jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsx(Text,{color:m.primary,bold:true,children:"> "}),jsx(ra,{value:o,onChange:e,onSubmit:r,placeholder:""})]}),jsx(Box,{children:jsx(Text,{color:m.dim,children:"\u2500".repeat(Math.max(10,Math.min(process.stdout.columns||80,120)))})})]})}function aa(o){let e=o.tool;if(e==="Bash"||e==="bash"){let t=typeof o.input=="object"&&o.input!==null&&"command"in o.input?String(o.input.command).split(" ")[0]:"";return [{label:"Yes, allow this command",value:{allowed:true},hotkey:"y"},{label:`Yes, always allow "${t}" commands this session`,value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}if(e==="Edit"||e==="MultiEdit"||e==="Write"){let t=typeof o.input=="object"&&o.input!==null&&"file_path"in o.input?String(o.input.file_path):"",n=t?t.split("/").slice(0,-1).join("/")+"/":"";return [{label:"Yes, allow this edit",value:{allowed:true},hotkey:"y"},{label:`Yes, allow all edits${n?` in ${n}`:""} this session`,value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}return [{label:"Yes",value:{allowed:true},hotkey:"y"},{label:"Yes, always this session",value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}function ca(o){switch(o){case "Bash":case "bash":return "Bash command";case "Edit":return "Edit file";case "MultiEdit":return "Edit file";case "Write":return "Write file";default:return `${o} operation`}}function la(o){if(o==null)return "";if(typeof o=="string")return o.length>100?o.slice(0,100)+"...":o;if(typeof o=="object"){let e=o;if("command"in e&&typeof e.command=="string"){let n=e.command;return n.length>100?n.slice(0,100)+"...":n}if("path"in e&&typeof e.path=="string")return e.path;if("file_path"in e&&typeof e.file_path=="string")return e.file_path;let t=JSON.stringify(o);return t.length>100?t.slice(0,100)+"...":t}return String(o)}function pa(o){let e=o.input;if(!e||typeof e!="object")return null;if(o.tool==="Edit"||o.tool==="MultiEdit"){let t=String(e.old_string??""),n=String(e.new_string??""),r=String(e.file_path??""),s=t.split(`
|
|
51
|
+
`),s=zr(n,r,(d,y)=>d===y),i=Gr(s,n,r,(d,y)=>d===y),a=[],c=0,l=0;for(let d of i)d.type==="same"?(c++,l++,a.push({...d,oldNum:c,newNum:l})):d.type==="removed"?(c++,a.push({...d,oldNum:c})):(l++,a.push({...d,newNum:l}));let p=[];for(let d=0;d<a.length;d++){let y=a[d];if(y.type==="same")p.push({type:"context",content:y.value,oldLineNumber:y.oldNum,newLineNumber:y.newNum});else if(y.type==="removed"){let b=a[d+1];if(b&&b.type==="added"){let R=Ji(y.value,b.value);p.push({type:"removed",content:y.value,lineNumber:y.oldNum,segments:R.filter(L=>L.type!=="added")}),p.push({type:"added",content:b.value,lineNumber:b.newNum,segments:R.filter(L=>L.type!=="removed")}),d++;}else p.push({type:"removed",content:y.value,lineNumber:y.oldNum});}else p.push({type:"added",content:y.value,lineNumber:y.newNum});}if(t<0)return p;let u=d=>d.type!=="context",f=new Set;for(let d=0;d<p.length;d++)if(u(p[d]))for(let y=Math.max(0,d-t);y<=Math.min(p.length-1,d+t);y++)f.add(y);let g=[];for(let d=0;d<p.length;d++)f.has(d)&&g.push(p[d]);return g}var Zi=k.diffWordAdd,Qi=k.diffWordRemove;function Jr({num:o,width:e}){let t=o!=null?String(o).padStart(e," "):" ".repeat(e);return jsxs(Text,{color:m.dim,children:[t," "]})}function Yi(o,e){let t=e==="added"?m.diffAdded:m.diffRemoved,n=e==="added"?Zi:Qi,r=e==="added"?"#0a2e1a":"#2e0a0a";return o.map((s,i)=>s.type==="same"?jsx(Text,{color:t,backgroundColor:r,children:s.text},i):jsx(Text,{color:n,backgroundColor:r,bold:true,children:s.text},i))}function Xi({line:o,lineNumWidth:e}){if(o.type==="context")return jsxs(Box,{children:[jsx(Jr,{num:o.oldLineNumber,width:e}),jsxs(Text,{color:m.dim,children:[" ",o.content]})]});let t=o.type==="added"?"+":"-",n=o.type==="added"?m.diffAdded:m.diffRemoved,r=o.type==="added"?"#0a2e1a":"#2e0a0a";return jsxs(Box,{children:[jsx(Jr,{num:o.lineNumber,width:e}),jsxs(Text,{color:n,backgroundColor:r,children:[t," "]}),o.segments?jsx(Fragment,{children:Yi(o.segments,o.type)}):jsx(Text,{color:n,backgroundColor:r,children:o.content})]})}function Qo({filePath:o,oldContent:e,newContent:t,operation:n}){let r=Vr(e,t);if(r.length===0)return null;let s=r.reduce((p,u)=>{let f=[u.lineNumber,u.oldLineNumber,u.newLineNumber].filter(g=>g!=null);return Math.max(p,...f)},0),i=Math.max(String(s).length,3),a=r.filter(p=>p.type==="added").length,c=r.filter(p=>p.type==="removed").length;return jsxs(Box,{flexDirection:"column",marginLeft:2,children:[jsxs(Box,{children:[jsxs(Text,{color:m.dim,children:[m.branch," "]}),jsx(Text,{color:m.dim,dimColor:true,children:o}),a>0&&jsxs(Text,{color:m.diffAdded,children:[" +",a]}),c>0&&jsxs(Text,{color:m.diffRemoved,children:[" -",c]})]}),jsx(Box,{flexDirection:"column",marginLeft:2,children:r.map((p,u)=>jsx(Xi,{line:p,lineNumWidth:i},u))})]})}function ta(o){return `${(o/1e3).toFixed(1)}s`}function Yo({entry:o}){switch(o.type){case "user":return jsxs(Box,{marginBottom:1,children:[jsx(Text,{color:m.primary,bold:true,children:"you: "}),jsx(Text,{color:m.primary,children:o.content})]});case "text":return jsx(Box,{marginBottom:1,flexDirection:"column",children:jsx(Text,{color:m.text,children:no(o.content)})});case "tool":{let e=o.content,t=o.elapsed!=null?ta(o.elapsed):"",n=o.success!==false,r=o.toolName==="Dispatch",s=n?m.success:m.error,i=r?n?"\u25C9":"\u25D0":n?m.successDot:m.failureMark,a=o.toolName==="Bash",c=r?k.info:a?m.bashBorder:m.toolBorder;return jsxs(Box,{flexDirection:"column",marginBottom:1,children:[jsxs(Box,{children:[jsxs(Text,{color:s,children:[i," "]}),jsx(Text,{color:c,bold:true,italic:true,children:(o.toolName??"tool").toLowerCase()}),jsxs(Text,{color:m.dim,children:[" ",e]}),t&&jsxs(Text,{color:m.dim,children:[" ",t]})]}),o.filePath&&o.oldContent!=null&&o.newContent!=null&&jsx(Qo,{filePath:o.filePath,oldContent:o.oldContent,newContent:o.newContent,operation:o.diffOperation??"edit"}),o.diffLines&&o.diffLines.length>0&&!o.filePath&&jsx(Box,{flexDirection:"column",marginLeft:2,children:o.diffLines.map((l,p)=>{let u=l.startsWith("+")?m.diffAdded:l.startsWith("-")?m.diffRemoved:m.dim;return jsxs(Text,{color:u,children:[m.branch," ",l]},p)})})]})}case "error":return jsx(Box,{marginBottom:1,children:jsxs(Text,{color:m.error,children:[m.failureMark," Error: ",o.content]})});case "system":return jsx(Box,{marginBottom:1,children:jsx(Text,{color:m.dim,children:o.content})})}}function Zr(o){return `${(o/1e3).toFixed(1)}s`}var Qr=5;function en({group:o,expanded:e=false}){let{toolName:t,entries:n,totalElapsed:r}=o,s=n.length,a=t==="Bash"?m.bashBorder:m.toolBorder,c=r>0?Zr(r):"",l=t==="Read"?`${s} files`:t==="Glob"?`${s} patterns`:t==="Grep"?`${s} searches`:t==="WebSearch"?`${s} queries`:`${s} calls`,p=e?n:n.slice(0,Qr),u=e?0:Math.max(0,n.length-Qr);return jsxs(Box,{flexDirection:"column",marginBottom:1,children:[jsxs(Box,{children:[jsxs(Text,{color:m.success,children:[m.successDot," "]}),jsx(Text,{color:a,bold:true,italic:true,children:t.toLowerCase()}),jsxs(Text,{color:m.dim,children:[" (",l,")"]}),c&&jsxs(Text,{color:m.dim,children:[" ",c]})]}),p.map((f,g)=>jsxs(Box,{marginLeft:2,children:[jsxs(Text,{color:m.dim,children:[m.branch," ",f.content]}),f.elapsed!=null&&jsxs(Text,{color:m.dim,children:[" ",Zr(f.elapsed)]})]},g)),u>0&&jsxs(Box,{marginLeft:2,children:[jsxs(Text,{color:m.dim,children:[m.branch," +",u," more "]}),jsx(Text,{color:m.primary,children:"Ctrl+O"}),jsx(Text,{color:m.dim,children:" to expand"})]})]})}var on=["Tip: Use /clear to start fresh when switching topics","Tip: Use /compress to free up context space","Tip: Use /undo to restore files to a checkpoint","Tip: Use /think to adjust reasoning depth","Tip: Use /export to save this conversation"],Yr=10,so=30;function nn({isActive:o=true}){let[e]=useState(()=>Go[Math.floor(Math.random()*Go.length)]),[t,n]=useState(0),[r,s]=useState(true),[i,a]=useState(0),c=useRef(Date.now()),[l]=useState(()=>on[Math.floor(Math.random()*on.length)]);if(useEffect(()=>{if(!o)return;let d=setInterval(()=>{n(y=>(y+1)%(e.length+6));},50);return ()=>clearInterval(d)},[o,e]),useEffect(()=>{if(!o)return;let d=setInterval(()=>{s(y=>!y);},600);return ()=>clearInterval(d)},[o]),useEffect(()=>{if(!o)return;let d=setInterval(()=>{a(Math.floor((Date.now()-c.current)/1e3));},1e3);return ()=>clearInterval(d)},[o]),!o)return null;let p=`${e}...`,u=i>=so?p.length:i>=Yr?6:3;if(H.reducedMotion){let d=i>0?` ${i}s`:"";return jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsxs(Text,{color:m.primary,children:[m.dot," ",p]}),jsx(Text,{color:m.dim,children:d})]}),i>=so&&jsx(Box,{marginLeft:2,children:jsx(Text,{color:m.dim,children:l})})]})}let f=p.split("").map((d,y)=>{let R=Math.abs(y-t)<u;return jsx(Text,{color:R?m.primaryShimmer:m.primary,children:d},y)}),g=i>0?` ${i}s`:"";return jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsxs(Text,{color:m.primary,children:[r?m.dot:" "," "]}),f,jsx(Text,{color:m.dim,children:g})]}),i>=so&&jsx(Box,{marginLeft:2,children:jsx(Text,{color:m.dim,children:l})})]})}function ts(o){let e=[],t=0;for(;t<o.length;){let n=o[t];if(n.type==="tool"&&n.toolName){let r=t+1;for(;r<o.length&&o[r].type==="tool"&&o[r].toolName===n.toolName;)r++;if(r-t>=2){let i=o.slice(t,r),a=i.reduce((c,l)=>c+(l.elapsed??0),0);e.push({type:"grouped",toolName:n.toolName,entries:i,totalElapsed:a}),t=r;continue}}e.push(n),t++;}return e}function sn({entries:o,activeOperation:e,streamingText:t,expanded:n=false}){let r=ts(o);return jsxs(Box,{flexDirection:"column",children:[r.map((s,i)=>s.type==="grouped"?jsx(en,{group:s,expanded:n},i):jsx(Yo,{entry:s},i)),t&&jsxs(Box,{marginBottom:1,flexDirection:"column",children:[jsx(Text,{color:m.text,children:no(t)}),jsx(Text,{color:m.dim,children:"\u258C"})]}),e&&jsx(Box,{marginBottom:1,children:jsx(nn,{isActive:true})})]})}function cn({value:o,onChange:e,onSubmit:t,disabled:n}){let r=useCallback(s=>{t(o);},[o,t]);return n?jsxs(Box,{flexDirection:"column",children:[jsx(Box,{children:jsx(Text,{color:m.dim,children:"> "})}),jsx(Box,{children:jsx(Text,{color:m.dim,children:"\u2500".repeat(Math.max(10,Math.min(process.stdout.columns||80,120)))})})]}):jsxs(Box,{flexDirection:"column",children:[jsxs(Box,{children:[jsx(Text,{color:m.primary,bold:true,children:"> "}),jsx(ra,{value:o,onChange:e,onSubmit:r,placeholder:""})]}),jsx(Box,{children:jsx(Text,{color:m.dim,children:"\u2500".repeat(Math.max(10,Math.min(process.stdout.columns||80,120)))})})]})}function aa(o){let e=o.tool;if(e==="Bash"||e==="bash"){let t=typeof o.input=="object"&&o.input!==null&&"command"in o.input?String(o.input.command).split(" ")[0]:"";return [{label:"Yes, allow this command",value:{allowed:true},hotkey:"y"},{label:`Yes, always allow "${t}" commands this session`,value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}if(e==="Edit"||e==="MultiEdit"||e==="Write"){let t=typeof o.input=="object"&&o.input!==null&&"file_path"in o.input?String(o.input.file_path):"",n=t?t.split("/").slice(0,-1).join("/")+"/":"";return [{label:"Yes, allow this edit",value:{allowed:true},hotkey:"y"},{label:`Yes, allow all edits${n?` in ${n}`:""} this session`,value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}return [{label:"Yes",value:{allowed:true},hotkey:"y"},{label:"Yes, always this session",value:{allowed:true,remember:"session"},hotkey:"a"},{label:"No",value:{allowed:false},hotkey:"n"}]}function ca(o){switch(o){case "Bash":case "bash":return "Bash command";case "Edit":return "Edit file";case "MultiEdit":return "Edit file";case "Write":return "Write file";default:return `${o} operation`}}function la(o){if(o==null)return "";if(typeof o=="string")return o.length>100?o.slice(0,100)+"...":o;if(typeof o=="object"){let e=o;if("command"in e&&typeof e.command=="string"){let n=e.command;return n.length>100?n.slice(0,100)+"...":n}if("path"in e&&typeof e.path=="string")return e.path;if("file_path"in e&&typeof e.file_path=="string")return e.file_path;let t=JSON.stringify(o);return t.length>100?t.slice(0,100)+"...":t}return String(o)}function pa(o){let e=o.input;if(!e||typeof e!="object")return null;if(o.tool==="Edit"||o.tool==="MultiEdit"){let t=String(e.old_string??""),n=String(e.new_string??""),r=String(e.file_path??""),s=t.split(`
|
|
52
52
|
`).slice(0,5),i=n.split(`
|
|
53
53
|
`).slice(0,5),a=t.split(`
|
|
54
54
|
`).length>5||n.split(`
|
|
55
55
|
`).length>5;return jsxs(Box,{flexDirection:"column",marginTop:1,children:[r&&jsx(Text,{color:m.dim,children:r}),s.map((c,l)=>jsxs(Text,{color:m.diffRemoved,children:[" - ",c]},`o${l}`)),i.map((c,l)=>jsxs(Text,{color:m.diffAdded,children:[" + ",c]},`n${l}`)),a&&jsx(Text,{color:m.dim,children:" ..."})]})}if(o.tool==="Write"){let t=String(e.content??""),n=String(e.file_path??""),r=t.split(`
|
|
56
56
|
`).slice(0,5),s=t.split(`
|
|
57
57
|
`).length>5;return jsxs(Box,{flexDirection:"column",marginTop:1,children:[n&&jsx(Text,{color:m.dim,children:n}),r.map((i,a)=>jsxs(Text,{color:m.diffAdded,children:[" + ",i]},a)),s&&jsx(Text,{color:m.dim,children:" ..."})]})}return null}function ua(o){switch(o){case "safe":return m.success;case "ask":return m.warning;case "dangerous":return m.error}}function ln({request:o,onRespond:e}){let[t,n]=useState(0),[r,s]=useState(false),i=aa(o),a=useCallback(f=>{r||(s(true),e(f));},[r,e]);if(useInput((f,g)=>{if(!r){if(g.upArrow){n(d=>Math.max(0,d-1));return}if(g.downArrow){n(d=>Math.min(i.length-1,d+1));return}if(g.return){a(i[t].value);return}switch(f.toLowerCase()){case "y":a({allowed:true});break;case "n":a({allowed:false});break;case "a":a({allowed:true,remember:"session"});break}}}),r)return null;let c=la(o.input),l=o.tool==="Bash"||o.tool==="bash",p=ua(o.level),u=ca(o.tool);return jsxs(Box,{flexDirection:"column",marginBottom:1,borderStyle:"round",borderColor:p,paddingLeft:1,paddingRight:1,children:[jsxs(Text,{color:p,bold:true,children:[jsx(Text,{italic:true,children:o.tool.toLowerCase()})," ",u.split(" ").slice(1).join(" ")]}),c&&jsxs(Box,{marginTop:1,children:[l&&jsx(Text,{color:m.bashBorder,bold:true,children:"! "}),jsx(Text,{color:m.dim,children:c})]}),pa(o),jsx(Box,{flexDirection:"column",marginTop:1,children:i.map((f,g)=>{let d=f.hotkey==="y"?k.permYes:f.hotkey==="a"?k.permAlways:k.permNo;return jsxs(Box,{children:[jsx(Text,{color:g===t?d:m.dim,children:g===t?"\u203A ":" "}),jsx(Text,{color:g===t?m.text:m.dim,bold:g===t,children:f.label}),f.hotkey&&jsxs(Text,{color:m.dim,children:[" (",f.hotkey,")"]})]},g)})})]})}function da(o){return typeof o=="string"?o:o.filter(e=>e.type==="text"&&!!e.text||e.type==="tool_result"&&!!e.content).map(e=>e.text??e.content??"").join(`
|
|
58
|
-
`)}function ma(o){let e=da(o.content);switch(o.role){case "user":return `you: ${e}`;case "assistant":return e;case "tool":return `[tool: *${(o.toolName??"unknown").toLowerCase()}*] ${e}`;case "system":return e;default:return e}}function un({messages:o}){return jsxs(Box,{flexDirection:"column",children:[jsx(Box,{marginBottom:1,children:jsx(Text,{color:m.primary,bold:true,children:"Transcript (Ctrl+O to exit)"})}),o.map((e,t)=>{let n=ma(e),r=e.role==="system"?m.dim:e.role==="user"?m.primary:e.role==="tool"?m.success:m.text;return jsx(Box,{marginBottom:0,children:jsx(Text,{color:r,children:n})},t)})]})}function rs(o){return o.replace("accounts/fireworks/models/","")}function St(o,e){return o+" ".repeat(Math.max(0,e-o.length))}function dn(o){let n=`\u256D\u2500 ArqZero Settings ${"\u2500".repeat(26)}\u256E`,r=`\u2570${"\u2500".repeat(46)}\u256F`,s=`\u2502${" ".repeat(46)}\u2502`,i=(p,u)=>{let f=` ${p} ${St(u,30-p.length-2)}`;return `\u2502${St(f,46)}\u2502`},a=o.permissions.alwaysAllow.length>0?o.permissions.alwaysAllow.join(", "):"(none)",c=o.permissions.alwaysDeny.length>0?o.permissions.alwaysDeny.join(", "):"(none)";return [n,s,i("Provider",o.provider),i("Model",rs(o.model)),i("Max Tokens",String(o.maxTokens)),i("Mode",o.permissions.defaultMode),s,i("Always Allow",a),i("Always Deny",c),s,`\u2502 Accessibility${" ".repeat(30)}\u2502`,`\u2502 \u251C Reduced Motion ${St(
|
|
59
|
-
`)}var co=8;function fn({suggestions:o,selectedIndex:e,visible:t}){if(!t||o.length===0)return null;let n=0;o.length>co&&(n=Math.max(0,Math.min(e-Math.floor(co/2),o.length-co)));let r=Math.min(n+co,o.length),s=o.slice(n,r),i=n>0,a=r<o.length;return jsxs(Box,{flexDirection:"column",marginLeft:2,marginBottom:1,children:[jsx(Box,{marginBottom:0,children:jsx(Text,{color:m.dim,children:"\u2500".repeat(40)})}),i&&jsxs(Text,{color:m.dim,children:[" \u2191 ",n," more"]}),s.map((c,l)=>{let u=n+l===e;return jsxs(Box,{children:[jsxs(Text,{color:u?m.primary:m.dim,children:[u?m.arrow:" "," "]}),jsx(Text,{color:u?m.primary:m.info,bold:u,children:c.name}),jsxs(Text,{color:m.dim,children:[" ",c.description]})]},c.name)}),a&&jsxs(Text,{color:m.dim,children:[" \u2193 ",o.length-r," more"]})]})}function hn(o,e){if(!o.startsWith("/"))return [];let t=o.toLowerCase();return e.filter(n=>n.name.toLowerCase().startsWith(t))}function kn({isStreaming:o,transcriptMode:e,expandedView:t,sessionId:n}){let r=e?"grid":t?"transcript":"expand";return jsxs(Box,{children:[jsx(Box,{flexGrow:1,children:(o?[{key:"Esc",label:"interrupt"},{key:"Ctrl+O",label:r}]:[{key:"/",label:"commands"},{key:"Ctrl+J",label:"newline"},{key:"Ctrl+L",label:"clear"},{key:"Ctrl+O",label:r},{key:"Esc",label:t?"collapse":e?"back":"clear"},{key:"\u2191\u2193",label:"history"}]).map((i,a)=>jsxs(Box,{marginRight:2,children:[jsx(Text,{color:m.primary,bold:true,children:i.key}),jsxs(Text,{color:m.dim,children:[" ",i.label]})]},i.key))}),n&&jsx(Box,{children:jsxs(Text,{color:m.dim,children:["\u25C8 ",n.slice(0,8)]})})]})}function ss(){let[o,e]=useState([]),[t,n]=useState(-1),[r,s]=useState(""),i=useCallback(l=>{l.trim()&&e(p=>[...p,l]),n(-1),s("");},[]),a=useCallback(l=>{if(o.length===0)return l;let p=t===-1?o.length-1:Math.max(0,t-1);return t===-1&&s(l),n(p),o[p]},[o,t]),c=useCallback(()=>{if(t===-1)return "";let l=t+1;return l>=o.length?(n(-1),r):(n(l),o[l])},[o,t,r]);return {push:i,navigateUp:a,navigateDown:c,history:o}}function xa(o,e){let t=
|
|
58
|
+
`)}function ma(o){let e=da(o.content);switch(o.role){case "user":return `you: ${e}`;case "assistant":return e;case "tool":return `[tool: *${(o.toolName??"unknown").toLowerCase()}*] ${e}`;case "system":return e;default:return e}}function un({messages:o}){return jsxs(Box,{flexDirection:"column",children:[jsx(Box,{marginBottom:1,children:jsx(Text,{color:m.primary,bold:true,children:"Transcript (Ctrl+O to exit)"})}),o.map((e,t)=>{let n=ma(e),r=e.role==="system"?m.dim:e.role==="user"?m.primary:e.role==="tool"?m.success:m.text;return jsx(Box,{marginBottom:0,children:jsx(Text,{color:r,children:n})},t)})]})}function rs(o){return o.replace("accounts/fireworks/models/","")}function St(o,e){return o+" ".repeat(Math.max(0,e-o.length))}function dn(o){let n=`\u256D\u2500 ArqZero Settings ${"\u2500".repeat(26)}\u256E`,r=`\u2570${"\u2500".repeat(46)}\u256F`,s=`\u2502${" ".repeat(46)}\u2502`,i=(p,u)=>{let f=` ${p} ${St(u,30-p.length-2)}`;return `\u2502${St(f,46)}\u2502`},a=o.permissions.alwaysAllow.length>0?o.permissions.alwaysAllow.join(", "):"(none)",c=o.permissions.alwaysDeny.length>0?o.permissions.alwaysDeny.join(", "):"(none)";return [n,s,i("Provider",o.provider),i("Model",rs(o.model)),i("Max Tokens",String(o.maxTokens)),i("Mode",o.permissions.defaultMode),s,i("Always Allow",a),i("Always Deny",c),s,`\u2502 Accessibility${" ".repeat(30)}\u2502`,`\u2502 \u251C Reduced Motion ${St(H.reducedMotion?"on":"off",22)}\u2502`,`\u2502 \u2514 Syntax Highlight ${St(H.syntaxHighlightingDisabled?"off":"on",22)}\u2502`,s,r].join(`
|
|
59
|
+
`)}var co=8;function fn({suggestions:o,selectedIndex:e,visible:t}){if(!t||o.length===0)return null;let n=0;o.length>co&&(n=Math.max(0,Math.min(e-Math.floor(co/2),o.length-co)));let r=Math.min(n+co,o.length),s=o.slice(n,r),i=n>0,a=r<o.length;return jsxs(Box,{flexDirection:"column",marginLeft:2,marginBottom:1,children:[jsx(Box,{marginBottom:0,children:jsx(Text,{color:m.dim,children:"\u2500".repeat(40)})}),i&&jsxs(Text,{color:m.dim,children:[" \u2191 ",n," more"]}),s.map((c,l)=>{let u=n+l===e;return jsxs(Box,{children:[jsxs(Text,{color:u?m.primary:m.dim,children:[u?m.arrow:" "," "]}),jsx(Text,{color:u?m.primary:m.info,bold:u,children:c.name}),jsxs(Text,{color:m.dim,children:[" ",c.description]})]},c.name)}),a&&jsxs(Text,{color:m.dim,children:[" \u2193 ",o.length-r," more"]})]})}function hn(o,e){if(!o.startsWith("/"))return [];let t=o.toLowerCase();return e.filter(n=>n.name.toLowerCase().startsWith(t))}function kn({isStreaming:o,transcriptMode:e,expandedView:t,sessionId:n}){let r=e?"grid":t?"transcript":"expand";return jsxs(Box,{children:[jsx(Box,{flexGrow:1,children:(o?[{key:"Esc",label:"interrupt"},{key:"Ctrl+O",label:r}]:[{key:"/",label:"commands"},{key:"Ctrl+J",label:"newline"},{key:"Ctrl+L",label:"clear"},{key:"Ctrl+O",label:r},{key:"Esc",label:t?"collapse":e?"back":"clear"},{key:"\u2191\u2193",label:"history"}]).map((i,a)=>jsxs(Box,{marginRight:2,children:[jsx(Text,{color:m.primary,bold:true,children:i.key}),jsxs(Text,{color:m.dim,children:[" ",i.label]})]},i.key))}),n&&jsx(Box,{children:jsxs(Text,{color:m.dim,children:["\u25C8 ",n.slice(0,8)]})})]})}function ss(){let[o,e]=useState([]),[t,n]=useState(-1),[r,s]=useState(""),i=useCallback(l=>{l.trim()&&e(p=>[...p,l]),n(-1),s("");},[]),a=useCallback(l=>{if(o.length===0)return l;let p=t===-1?o.length-1:Math.max(0,t-1);return t===-1&&s(l),n(p),o[p]},[o,t]),c=useCallback(()=>{if(t===-1)return "";let l=t+1;return l>=o.length?(n(-1),r):(n(l),o[l])},[o,t,r]);return {push:i,navigateUp:a,navigateDown:c,history:o}}function xa(o,e){let t=Qe(e??"");return o.inputTokens*(t.costPerMInput/1e6)+o.outputTokens*(t.costPerMOutput/1e6)}function ka(o){if(!o)return "";let e=o.file_path??o.path??o.notebook_path??"",t=e.replace(/\\/g,"/").split("/");return t.length>2?t.slice(-2).join("/"):e}function ba(o,e,t){let n=e.content,r=ka(t);switch(o){case "Read":{let s=n.split(`
|
|
60
60
|
`).length;return r?`${r} (${s} lines)`:`${s} lines`}case "Write":return r?`${r}`:"file written";case "Edit":case "MultiEdit":return r?`${r}`:"file edited";case "Bash":{let s=t?.command?.toLowerCase()??"",i=s.length>60?s.slice(0,57)+"...":s;return i?`\x1B[3m${i}\x1B[23m`:"\x1B[3m(command)\x1B[23m"}case "Glob":{let s=t?.pattern??"",i=n.trim().split(`
|
|
61
61
|
`).filter(Boolean);return s?`${s} \u2192 ${i.length} files`:`${i.length} files`}case "Grep":{let s=t?.pattern??"",i=n.trim().split(`
|
|
62
62
|
`).filter(Boolean);return s?`"${s}" \u2192 ${i.length} matches`:`${i.length} matches`}case "LS":{let s=n.trim().split(`
|
|
63
|
-
`).filter(Boolean);return r?`${r} (${s.length} entries)`:`${s.length} entries`}case "WebSearch":return t?.query??"search";case "WebFetch":return t?.url?.slice(0,50)??"fetch";case "Dispatch":return t?.description??"sub-agent";case "NotebookRead":return r||"notebook";case "NotebookEdit":return r||"notebook edited";case "TodoWrite":return "tasks updated";case "TodoRead":return "tasks";default:return n.length>60?n.slice(0,57)+"...":n}}function vn({provider:o,config:e,registry:t,systemPrompt:n,commandRegistry:r,initialMessages:s,resumedSessionId:i,hooks:a,skillRegistry:c,pluginManager:l,pluginLoader:p}){let[u,f]=useState(""),[g,d]=useState([]),[y,b]=useState(e.model),[R,
|
|
63
|
+
`).filter(Boolean);return r?`${r} (${s.length} entries)`:`${s.length} entries`}case "WebSearch":return t?.query??"search";case "WebFetch":return t?.url?.slice(0,50)??"fetch";case "Dispatch":return t?.description??"sub-agent";case "NotebookRead":return r||"notebook";case "NotebookEdit":return r||"notebook edited";case "TodoWrite":return "tasks updated";case "TodoRead":return "tasks";default:return n.length>60?n.slice(0,57)+"...":n}}function vn({provider:o,config:e,registry:t,systemPrompt:n,commandRegistry:r,initialMessages:s,resumedSessionId:i,hooks:a,skillRegistry:c,pluginManager:l,pluginLoader:p}){let[u,f]=useState(""),[g,d]=useState([]),[y,b]=useState(e.model),[R,L]=useState(""),[q,he]=useState(false),[ze,le]=useState(null),[pe,Re]=useState(null),[Ge,x]=useState(0),[$,O]=useState(0),[v,U]=useState(null),[j,W]=useState(false),[ee,ye]=useState(false),[ht,yt]=useState(0),{exit:Bn}=useApp(),Eo=ss(),qn=is.useMemo(()=>r?r.getAll().map(A=>({name:A.name,description:A.description})):[],[r]),Ve=is.useMemo(()=>!u.startsWith("/")||q||v?[]:hn(u,qn),[u,qn,q,v]),Mo=Ve.length>0&&u.startsWith("/")&&!q,ue=useRef(null),Lt=useRef(null),$o=useRef(new Map),Hn=useRef(null),jt=useRef(null),Je=useRef(null);if(!ue.current){let A=new Xe(e.permissions),M=i?new wt(i):new wt;Je.current=M,Nr(M.id);let h=new Xt;Lt.current=h;let S=Zn("checkpoints",H.tier??"free")?new et:null;Hn.current=S;let T=new oo;jt.current=T;let K={cwd:process.cwd(),config:e,promptUser:async P=>new Promise(de=>{U({request:P,resolve:de});})};ue.current=new be({provider:o,registry:t,model:e.model,systemPrompt:n,maxTokens:e.maxTokens,toolContext:K,permissions:A,session:M,contextWindow:h,checkpointStore:S??void 0,hooks:a}),s&&s.length>0&&ue.current.setMessages(s);}useEffect(()=>(a?.fire("SessionStart",{event:"SessionStart",sessionId:Je.current?.id,timestamp:Date.now()}).catch(()=>{}),()=>{a?.fire("SessionEnd",{event:"SessionEnd",sessionId:Je.current?.id,timestamp:Date.now()}).catch(()=>{});}),[]),useEffect(()=>{if(s&&s.length>0)d(A=>[...A,{type:"system",content:`Resumed session ${Je.current.id} (${s.length} messages)`}]);else {let A=D(),M;A?M=`ArqZero v2.0.0 (${A.tier.charAt(0).toUpperCase()+A.tier.slice(1)})
|
|
64
64
|
Type a message to start. Use /help for commands.`:M=`ArqZero v2.0.0 (Free)
|
|
65
65
|
Log in for Pro features: /login
|
|
66
|
-
Type a message to start.`,d(h=>[...h,{type:"system",content:M}]);}},[]);let ui=useCallback(A=>{v&&(v.resolve(A),U(null));},[v]);useInput((A,M)=>{if(M.ctrl&&A==="c"&&(ue.current?.abort(),jt.current?.stopAll(),Bn()),M.ctrl&&A==="l"){d([]);return}if(M.ctrl&&A==="o"){!
|
|
67
|
-
`);return}if(M.escape){H?(ue.current?.abort(),he(false),le(null),D(""),d(h=>[...h,{type:"system",content:"(interrupted)"}])):ee?ye(false):L?W(false):f("");return}if(Mo){if(M.upArrow){yt(h=>Math.max(0,h-1));return}if(M.downArrow){yt(h=>Math.min(Ge.length-1,h+1));return}if(M.tab){let h=Ge[ht];h&&(f(h.name+" "),yt(0));return}}else {if(M.upArrow&&!H&&!v){let h=Eo.navigateUp(u);f(h);return}if(M.downArrow&&!H&&!v){let h=Eo.navigateDown();f(h);return}}});let Fn=async A=>{if(Mo&&Ge.length>0){let h=Ge[ht];h&&(A=h.name,f(""),yt(0));}if(!A.trim())return;if(Eo.push(A),r&&r.isSlashCommand(A)){let{name:h,args:S}=r.parse(A),T=r.get(h);if(T){let K={config:e,commandRegistry:r,skillRegistry:c,checkpointStore:qn.current??void 0,contextWindow:Lt.current??void 0,toolRegistry:t,tokenUsage:pe?{inputTokens:pe.inputTokens,outputTokens:pe.outputTokens}:void 0,costEstimate:ze,sessionId:Ve.current?.id,messages:ue.current?.getMessages(),cronManager:jt.current??void 0,pluginManager:l,pluginLoader:p,onModelChange:P=>{e.model=P,b(P);},onClear:()=>d([]),onCompact:()=>{d(P=>[...P,{type:"system",content:"Manual compaction triggered."}]);},onQuit:()=>{jt.current?.stopAll(),Bn();},onSubmit:async P=>{await Io.current(P);}};if(f(""),d(P=>[...P,{type:"user",content:A}]),!Yn(h,q.tier??"free"));try{let P=await T.execute(S,K);P&&d(de=>[...de,{type:"system",content:P}]);}catch(P){let de=P instanceof Error?P.message:String(P);d(Re=>[...Re,{type:"error",content:de}]);}return}}f(""),d(h=>[...h,{type:"user",content:A}]),he(true),D(""),le(null);let M="";try{await ue.current.handleUserMessage(A,{onTextDelta:h=>{M+=h,D(M);},onThinkingDelta:h=>{},onToolStart:(h,S)=>{if(M.trim()){let T=M;d(K=>[...K,{type:"text",content:T}]),M="",D("");}$o.current.set(h,Date.now()),le({name:S,startTime:Date.now()}),S==="Dispatch"&&d(T=>[...T,{type:"system",content:"Dispatching sub-agent..."}]);},onToolEnd:(h,S,T,K)=>{le(null);let P=$o.current.get(h),de=P?Date.now()-P:void 0;$o.current.delete(h);let Re=ba(S,T,K),Ee={type:"tool",content:S==="Dispatch"?`Agent complete: ${Re}`:Re,toolName:S,elapsed:de};T.metadata&&(Ee.filePath=T.metadata.filePath,Ee.oldContent=T.metadata.oldContent,Ee.newContent=T.metadata.newContent,Ee.diffOperation=T.metadata.diffOperation),d(_o=>[..._o,Ee]);},onMessageEnd:h=>{Pe(h);let S=ue.current?.getActiveModel();x(T=>T+xa(h,S)),Lt.current&&j(Lt.current.getUsageSummary().percent);},onModelRouted:(h,S)=>{let T=Ie(h)?.displayName??h;b(h),d(K=>[...K,{type:"system",content:`Routing to ${T} for ${S}`}]);},onCapabilitiesMatched:h=>{if(h.length===0)return;let S=h.map(P=>P.capability.name),T=["Spinning up","Activating","Loading","Engaging","Deploying","Channeling","Tuning into","Wiring up","Locking onto","Dialing in"],K=T[Math.floor(Math.random()*T.length)];d(P=>[...P,{type:"system",content:`${K} ${S.join(" + ")}`}]);},onContextWarning:(h,S)=>{S==="warning"?d(T=>[...T,{type:"system",content:`Context at ${h}% -- approaching limit`}]):S==="compacting"?d(T=>[...T,{type:"system",content:"Context full -- saving session and compacting..."}]):S==="compacted"&&d(T=>[...T,{type:"system",content:`Context compacted to ${h}%. Session preserved.`}]);},onCompaction:h=>{d(S=>[...S,{type:"system",content:`[compaction] Summarized ${h.compactedMessageCount} messages, preserved ${h.preservedMessageCount}`}]);},onError:h=>{d(S=>[...S,{type:"error",content:h.message}]);},onQuotaThreshold:h=>{let S=(h.used/1e3).toFixed(0),T=(h.cap/1e3).toFixed(0),K=h.bucket==="enso"?"Enso":"PRIMUS",P=h.period==="5h"?"5h":"week",de=h.resetsAt,Re=new Date(de).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),Ee=h.percent>=100?`${K} ${P} cap reached (${S}K / ${T}K). Resets at ${Re}.`:`${K} ${P} at ${h.percent}% (${S}K / ${T}K) \u2014 resets at ${Re}.`;d(_o=>[..._o,{type:h.percent>=100?"error":"system",content:Ee}]);}});}catch(h){let S=h instanceof Error?h.message:String(h);d(T=>[...T,{type:"error",content:S}]);}if(M.trim()){let h=M;d(S=>[...S,{type:"text",content:h}]);}D(""),he(false);},Io=useRef(Fn);Io.current=Fn;let di=useCallback(A=>Io.current(A),[]);return jsxs(Box,{flexDirection:"column",padding:1,children:[jsx(Jo,{modelName:y,tokenUsage:pe,costEstimate:ze,contextPercent:$}),L?jsx(un,{messages:ue.current?.getMessages()??[]}):jsx(sn,{entries:g,activeOperation:Ke,streamingText:H?R:void 0,expanded:ee}),v&&jsx(ln,{request:v.request,onRespond:ui}),jsx(cn,{value:u,onChange:A=>{f(A),yt(0);},onSubmit:di,disabled:H||!!v}),jsx(fn,{suggestions:Ge,selectedIndex:ht,visible:Mo}),jsx(kn,{isStreaming:H,transcriptMode:L,expandedView:ee,sessionId:Ve.current?.id})]})}var Ct=class{name="mock";response;aborted=false;constructor(e="This is a mock response from ArqZero."){this.response=e;}async*chat(e){this.aborted=false;let t=this.response.split(" ");for(let n=0;n<t.length;n++){if(this.aborted)return;yield {type:"text_delta",text:n===0?t[n]:" "+t[n]},await new Promise(s=>setTimeout(s,10));}yield {type:"message_end",usage:{inputTokens:e.messages.reduce((n,r)=>n+(typeof r.content=="string"?r.content.length:0),0),outputTokens:this.response.length}};}abort(){this.aborted=true;}async isAvailable(){return true}};var Ue={fireworks:{id:"fireworks",displayName:"ArqZero AI (default)",baseURL:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/glm-5p1",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"FIREWORKS_API_KEY",keyUrl:"https://arqzero.pages.dev/docs/inference-key",description:"High-throughput hosted inference. Recommended for new users."},openai:{id:"openai",displayName:"OpenAI",baseURL:"https://api.openai.com/v1",defaultModel:"gpt-4o",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"OPENAI_API_KEY",keyUrl:"https://platform.openai.com/api-keys",description:"GPT-4o, GPT-4 Turbo, o1 reasoning models."},anthropic:{id:"anthropic",displayName:"Anthropic",baseURL:"https://api.anthropic.com/v1",defaultModel:"claude-sonnet-4-6",isOpenAICompat:false,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"ANTHROPIC_API_KEY",keyUrl:"https://console.anthropic.com/settings/keys",description:"Claude Opus, Sonnet, Haiku \u2014 native Messages API."},groq:{id:"groq",displayName:"Groq",baseURL:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"GROQ_API_KEY",keyUrl:"https://console.groq.com/keys",description:"Ultra-fast LPU inference for Llama, Mixtral, Gemma."},together:{id:"together",displayName:"Together AI",baseURL:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"TOGETHER_API_KEY",keyUrl:"https://api.together.xyz/settings/api-keys",description:"Hosted open-source models with broad selection."},deepseek:{id:"deepseek",displayName:"DeepSeek",baseURL:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"DEEPSEEK_API_KEY",keyUrl:"https://platform.deepseek.com/api_keys",description:"DeepSeek-V3 chat and DeepSeek-R1 reasoning."},xai:{id:"xai",displayName:"xAI",baseURL:"https://api.x.ai/v1",defaultModel:"grok-2-latest",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"XAI_API_KEY",keyUrl:"https://console.x.ai",description:"Grok models from xAI."},google:{id:"google",displayName:"Google Gemini",baseURL:"https://generativelanguage.googleapis.com/v1beta/openai",defaultModel:"gemini-2.0-flash",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"GEMINI_API_KEY",keyUrl:"https://aistudio.google.com/apikey",description:"Gemini 2.0/1.5 via OpenAI-compatible endpoint."},mistral:{id:"mistral",displayName:"Mistral AI",baseURL:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"MISTRAL_API_KEY",keyUrl:"https://console.mistral.ai/api-keys",description:"Mistral Large, Codestral, Mixtral."},ollama:{id:"ollama",displayName:"Ollama (local)",baseURL:"http://localhost:11434/v1",defaultModel:"llama3.3",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:false,keyEnvVar:"OLLAMA_API_KEY",keyUrl:"https://ollama.com",description:"Local models via Ollama. No API key required."},openrouter:{id:"openrouter",displayName:"OpenRouter",baseURL:"https://openrouter.ai/api/v1",defaultModel:"google/gemini-2.0-flash-exp:free",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:true,requiresKey:true,keyEnvVar:"OPENROUTER_API_KEY",keyUrl:"https://openrouter.ai/keys",description:"Unified gateway to 100+ models. Multi-key fallback for rate-limit/credit/auth rotation."},custom:{id:"custom",displayName:"Custom (OpenAI-compatible)",baseURL:"",defaultModel:"",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"CUSTOM_API_KEY",description:"Any OpenAI-compatible endpoint. Specify baseURL and model in config."}};function Y(o){let e=Ue[o];if(!e)throw new Error(`Unknown provider: ${o}`);return e}function at(){return Object.keys(Ue)}function Ne(o){return o in Ue}var va=z.object({command:z.string(),args:z.array(z.string()).default([]),env:z.record(z.string(),z.string()).default({})}),Ta=z.object({defaultMode:z.enum(["ask","trust","locked"]).default("ask"),alwaysAllow:z.array(z.string()).default(["Read","Glob","Grep"]),alwaysDeny:z.array(z.string()).default([]),trustedPatterns:z.record(z.string(),z.array(z.string())).default({})}),Sa=at(),V=1,Ca=z.record(z.string(),z.union([z.string(),z.array(z.string()).min(1)])),Aa=z.object({configVersion:z.number().int().min(0).default(V),provider:z.enum(Sa).default("fireworks"),model:z.string().default("accounts/fireworks/models/glm-5p1"),apiKeys:Ca.default({}),baseURLs:z.record(z.string(),z.string()).default({}),fireworksApiKey:z.string().optional(),tavilyApiKey:z.string().optional(),maxTokens:z.number().default(4096),permissions:Ta.default({defaultMode:"ask",alwaysAllow:["Read","Glob","Grep"],alwaysDeny:[],trustedPatterns:{}}),mcpServers:z.record(z.string(),va).default({}),bash:z.object({defaultTimeout:z.number().default(3e4),maxTimeout:z.number().default(6e5)}).default({defaultTimeout:3e4,maxTimeout:6e5})});function Pa(o){let e={...o.apiKeys??{}};o.fireworksApiKey&&!e.fireworks&&(e.fireworks=o.fireworksApiKey);let t=e.fireworks,n=typeof t=="string"?t:Array.isArray(t)?t[0]:void 0;return {configVersion:o.configVersion,provider:o.provider,model:o.model,apiKeys:e,baseURLs:o.baseURLs??{},fireworksApiKey:n,tavilyApiKey:o.tavilyApiKey,maxTokens:o.maxTokens,permissions:o.permissions,mcpServers:o.mcpServers,bash:o.bash}}var ls=Aa.transform(Pa);function Be(o,e){let t=o.apiKeys?.[e];return t?Array.isArray(t)?t:[t]:[]}var Ea=8192,ct=class{name;client;abortController=null;opts;constructor(e){this.opts=e,this.name=e.providerName,this.client=new Ra({apiKey:e.apiKey||"no-key",baseURL:e.baseURL,defaultHeaders:e.defaultHeaders});}async*chat(e){this.abortController=new AbortController;let t=this.convertMessages(e),n=e.tools?this.convertTools(e.tools):void 0;try{let r=await this.client.chat.completions.create({model:e.model||this.opts.defaultModel,messages:t,tools:n&&n.length>0?n:void 0,max_tokens:e.maxTokens??this.opts.defaultMaxTokens??Ea,stream:!0,stream_options:{include_usage:!0}},{signal:this.abortController.signal}),s=new Map;for await(let i of r){let a=i.choices?.[0];if(a?.delta?.content&&(yield {type:"text_delta",text:a.delta.content}),a?.delta?.tool_calls)for(let c of a.delta.tool_calls){let l=c.index;if(c.function?.name){let p=c.id||`call_${l}_${Date.now()}`;s.set(l,p),yield {type:"tool_use_start",id:p,name:c.function.name};}c.function?.arguments&&(yield {type:"tool_use_delta",id:s.get(l)||`call_${l}`,input:c.function.arguments});}if(a?.finish_reason){for(let[,c]of s)yield {type:"tool_use_end",id:c};s.clear();}i.usage&&(yield {type:"message_end",usage:{inputTokens:i.usage.prompt_tokens??0,outputTokens:i.usage.completion_tokens??0}});}}catch(r){if(r instanceof Error&&r.name==="AbortError")return;yield {type:"error",error:r instanceof Error?r:new Error(String(r))};}}abort(){this.abortController?.abort(),this.abortController=null;}async isAvailable(){return this.opts.apiKey?true:this.opts.apiKey===""&&this.opts.baseURL.startsWith("http://localhost")}convertMessages(e){let t=[];e.systemPrompt&&t.push({role:"system",content:e.systemPrompt});for(let n of e.messages){let r=this.convertMessage(n);r&&t.push(r);}return t}convertMessage(e){if(e.role==="system")return {role:"system",content:typeof e.content=="string"?e.content:e.content.map(n=>n.text||"").join("")};if(e.role==="user")return {role:"user",content:typeof e.content=="string"?e.content:e.content.map(n=>n.text||"").join("")};if(e.role==="tool"){let t=typeof e.content=="string"?e.content:e.content.map(n=>n.content||n.text||"").join("");return {role:"tool",tool_call_id:e.toolCallId||"",content:t}}return e.role==="assistant"?this.convertAssistantMessage(e):null}convertAssistantMessage(e){if(typeof e.content=="string")return {role:"assistant",content:e.content};let t=e.content,n=[],r=[];for(let i of t)i.type==="text"&&i.text?n.push(i.text):i.type==="tool_use"&&r.push({id:i.id||"",type:"function",function:{name:i.name||"",arguments:JSON.stringify(i.input??{})}});let s=n.length>0?n.join(""):null;return r.length>0?{role:"assistant",content:s,tool_calls:r}:{role:"assistant",content:s}}convertTools(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:t.input_schema}}))}};var Ma="2023-06-01",$a=8192,uo=class{name="anthropic";apiKey;baseURL;defaultModel;abortController=null;constructor(e,t){let n=Y("anthropic");this.apiKey=e,this.baseURL=t||n.baseURL,this.defaultModel=n.defaultModel;}async*chat(e){this.abortController=new AbortController;let t={model:e.model||this.defaultModel,max_tokens:e.maxTokens??$a,messages:this.convertMessages(e.messages),system:e.systemPrompt,tools:e.tools?this.convertTools(e.tools):void 0,stream:true},n;try{n=await fetch(`${this.baseURL}/messages`,{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey,"anthropic-version":Ma},body:JSON.stringify(t),signal:this.abortController.signal});}catch(r){if(r instanceof Error&&r.name==="AbortError")return;yield {type:"error",error:r instanceof Error?r:new Error(String(r))};return}if(!n.ok){let r=await n.text().catch(()=>"");yield {type:"error",error:new Tn(`Anthropic API error ${n.status}: ${r||n.statusText}`,n.status)};return}if(!n.body){yield {type:"error",error:new Error("Anthropic API returned no body")};return}yield*this.parseStream(n.body);}abort(){this.abortController?.abort(),this.abortController=null;}async isAvailable(){return !!this.apiKey}convertMessages(e){let t=[];for(let n of e)if(n.role!=="system"){if(n.role==="user"){t.push({role:"user",content:typeof n.content=="string"?n.content:n.content.map(this.userBlockToAnthropic).filter(Boolean)});continue}if(n.role==="tool"){let r=typeof n.content=="string"?n.content:n.content.map(s=>s.content||s.text||"").join("");t.push({role:"user",content:[{type:"tool_result",tool_use_id:n.toolCallId||"",content:r}]});continue}if(n.role==="assistant")if(typeof n.content=="string")t.push({role:"assistant",content:n.content});else {let r=[];for(let s of n.content)s.type==="text"&&s.text?r.push({type:"text",text:s.text}):s.type==="tool_use"&&r.push({type:"tool_use",id:s.id||"",name:s.name||"",input:s.input??{}});t.push({role:"assistant",content:r});}}return t}userBlockToAnthropic=e=>e.type==="text"&&e.text?{type:"text",text:e.text}:e.type==="tool_result"?{type:"tool_result",tool_use_id:e.id||"",content:e.content||e.text||"",is_error:e.isError}:null;convertTools(e){return e.map(t=>({name:t.name,description:t.description,input_schema:t.input_schema}))}async*parseStream(e){let t=e.getReader(),n=new TextDecoder,r="",s=new Map,i=0,a=0;try{for(;;){let{done:c,value:l}=await t.read();if(c)break;r+=n.decode(l,{stream:!0});let p;for(;(p=r.indexOf(`
|
|
66
|
+
Type a message to start.`,d(h=>[...h,{type:"system",content:M}]);}},[]);let ui=useCallback(A=>{v&&(v.resolve(A),U(null));},[v]);useInput((A,M)=>{if(M.ctrl&&A==="c"&&(ue.current?.abort(),jt.current?.stopAll(),Bn()),M.ctrl&&A==="l"){d([]);return}if(M.ctrl&&A==="o"){!j&&!ee?ye(true):ee&&!j?(ye(false),W(true)):(W(false),ye(false));return}if(M.ctrl&&A==="j"&&!q&&!v){f(h=>h+`
|
|
67
|
+
`);return}if(M.escape){q?(ue.current?.abort(),he(false),le(null),L(""),d(h=>[...h,{type:"system",content:"(interrupted)"}])):ee?ye(false):j?W(false):f("");return}if(Mo){if(M.upArrow){yt(h=>Math.max(0,h-1));return}if(M.downArrow){yt(h=>Math.min(Ve.length-1,h+1));return}if(M.tab){let h=Ve[ht];h&&(f(h.name+" "),yt(0));return}}else {if(M.upArrow&&!q&&!v){let h=Eo.navigateUp(u);f(h);return}if(M.downArrow&&!q&&!v){let h=Eo.navigateDown();f(h);return}}});let Fn=async A=>{if(Mo&&Ve.length>0){let h=Ve[ht];h&&(A=h.name,f(""),yt(0));}if(!A.trim())return;if(Eo.push(A),r&&r.isSlashCommand(A)){let{name:h,args:S}=r.parse(A),T=r.get(h);if(T){let K={config:e,commandRegistry:r,skillRegistry:c,checkpointStore:Hn.current??void 0,contextWindow:Lt.current??void 0,toolRegistry:t,tokenUsage:pe?{inputTokens:pe.inputTokens,outputTokens:pe.outputTokens}:void 0,costEstimate:Ge,sessionId:Je.current?.id,messages:ue.current?.getMessages(),cronManager:jt.current??void 0,pluginManager:l,pluginLoader:p,onModelChange:P=>{e.model=P,b(P);},onClear:()=>d([]),onCompact:()=>{d(P=>[...P,{type:"system",content:"Manual compaction triggered."}]);},onQuit:()=>{jt.current?.stopAll(),Bn();},onSubmit:async P=>{await Io.current(P);}};if(f(""),d(P=>[...P,{type:"user",content:A}]),!Yn(h,H.tier??"free"));try{let P=await T.execute(S,K);P&&d(de=>[...de,{type:"system",content:P}]);}catch(P){let de=P instanceof Error?P.message:String(P);d(Ee=>[...Ee,{type:"error",content:de}]);}return}}f(""),d(h=>[...h,{type:"user",content:A}]),he(true),L(""),le(null);let M="";try{await ue.current.handleUserMessage(A,{onTextDelta:h=>{M+=h,L(M);},onThinkingDelta:h=>{},onToolStart:(h,S)=>{if(M.trim()){let T=M;d(K=>[...K,{type:"text",content:T}]),M="",L("");}$o.current.set(h,Date.now()),le({name:S,startTime:Date.now()}),S==="Dispatch"&&d(T=>[...T,{type:"system",content:"Dispatching sub-agent..."}]);},onToolEnd:(h,S,T,K)=>{le(null);let P=$o.current.get(h),de=P?Date.now()-P:void 0;$o.current.delete(h);let Ee=ba(S,T,K),Me={type:"tool",content:S==="Dispatch"?`Agent complete: ${Ee}`:Ee,toolName:S,elapsed:de};T.metadata&&(Me.filePath=T.metadata.filePath,Me.oldContent=T.metadata.oldContent,Me.newContent=T.metadata.newContent,Me.diffOperation=T.metadata.diffOperation),d(_o=>[..._o,Me]);},onMessageEnd:h=>{Re(h);let S=ue.current?.getActiveModel();x(T=>T+xa(h,S)),Lt.current&&O(Lt.current.getUsageSummary().percent);},onModelRouted:(h,S)=>{let T=_e(h)?.displayName??h;b(h),d(K=>[...K,{type:"system",content:`Routing to ${T} for ${S}`}]);},onCapabilitiesMatched:h=>{if(h.length===0)return;let S=h.map(P=>P.capability.name),T=["Spinning up","Activating","Loading","Engaging","Deploying","Channeling","Tuning into","Wiring up","Locking onto","Dialing in"],K=T[Math.floor(Math.random()*T.length)];d(P=>[...P,{type:"system",content:`${K} ${S.join(" + ")}`}]);},onContextWarning:(h,S)=>{S==="warning"?d(T=>[...T,{type:"system",content:`Context at ${h}% -- approaching limit`}]):S==="compacting"?d(T=>[...T,{type:"system",content:"Context full -- saving session and compacting..."}]):S==="compacted"&&d(T=>[...T,{type:"system",content:`Context compacted to ${h}%. Session preserved.`}]);},onCompaction:h=>{d(S=>[...S,{type:"system",content:`[compaction] Summarized ${h.compactedMessageCount} messages, preserved ${h.preservedMessageCount}`}]);},onError:h=>{d(S=>[...S,{type:"error",content:h.message}]);},onQuotaThreshold:h=>{let S=(h.used/1e3).toFixed(0),T=(h.cap/1e3).toFixed(0),K=h.bucket==="enso"?"Enso":"PRIMUS",P=h.period==="5h"?"5h":"week",de=h.resetsAt,Ee=new Date(de).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),Me=h.percent>=100?`${K} ${P} cap reached (${S}K / ${T}K). Resets at ${Ee}.`:`${K} ${P} at ${h.percent}% (${S}K / ${T}K) \u2014 resets at ${Ee}.`;d(_o=>[..._o,{type:h.percent>=100?"error":"system",content:Me}]);}});}catch(h){let S=h instanceof Error?h.message:String(h);d(T=>[...T,{type:"error",content:S}]);}if(M.trim()){let h=M;d(S=>[...S,{type:"text",content:h}]);}L(""),he(false);},Io=useRef(Fn);Io.current=Fn;let di=useCallback(A=>Io.current(A),[]);return jsxs(Box,{flexDirection:"column",padding:1,children:[jsx(Jo,{modelName:y,tokenUsage:pe,costEstimate:Ge,contextPercent:$}),j?jsx(un,{messages:ue.current?.getMessages()??[]}):jsx(sn,{entries:g,activeOperation:ze,streamingText:q?R:void 0,expanded:ee}),v&&jsx(ln,{request:v.request,onRespond:ui}),jsx(cn,{value:u,onChange:A=>{f(A),yt(0);},onSubmit:di,disabled:q||!!v}),jsx(fn,{suggestions:Ve,selectedIndex:ht,visible:Mo}),jsx(kn,{isStreaming:q,transcriptMode:j,expandedView:ee,sessionId:Je.current?.id})]})}var Ct=class{name="mock";response;aborted=false;constructor(e="This is a mock response from ArqZero."){this.response=e;}async*chat(e){this.aborted=false;let t=this.response.split(" ");for(let n=0;n<t.length;n++){if(this.aborted)return;yield {type:"text_delta",text:n===0?t[n]:" "+t[n]},await new Promise(s=>setTimeout(s,10));}yield {type:"message_end",usage:{inputTokens:e.messages.reduce((n,r)=>n+(typeof r.content=="string"?r.content.length:0),0),outputTokens:this.response.length}};}abort(){this.aborted=true;}async isAvailable(){return true}};var Ne={arqzero:{id:"arqzero",displayName:"ArqZero AI (managed, recommended)",baseURL:"__ARQZERO_API__/llm",defaultModel:"enso",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:false,keyEnvVar:"",description:"Managed by ArqZero. Sign in with `arqzero login` \u2014 no API key needed. Free tier included."},fireworks:{id:"fireworks",displayName:"Fireworks (BYOK)",baseURL:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/glm-5p1",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"FIREWORKS_API_KEY",keyUrl:"https://fireworks.ai/account/api-keys",description:"Bring-your-own Fireworks API key. Power-user option \u2014 unlimited via your own billing."},openai:{id:"openai",displayName:"OpenAI",baseURL:"https://api.openai.com/v1",defaultModel:"gpt-4o",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"OPENAI_API_KEY",keyUrl:"https://platform.openai.com/api-keys",description:"GPT-4o, GPT-4 Turbo, o1 reasoning models."},anthropic:{id:"anthropic",displayName:"Anthropic",baseURL:"https://api.anthropic.com/v1",defaultModel:"claude-sonnet-4-6",isOpenAICompat:false,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"ANTHROPIC_API_KEY",keyUrl:"https://console.anthropic.com/settings/keys",description:"Claude Opus, Sonnet, Haiku \u2014 native Messages API."},groq:{id:"groq",displayName:"Groq",baseURL:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"GROQ_API_KEY",keyUrl:"https://console.groq.com/keys",description:"Ultra-fast LPU inference for Llama, Mixtral, Gemma."},together:{id:"together",displayName:"Together AI",baseURL:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"TOGETHER_API_KEY",keyUrl:"https://api.together.xyz/settings/api-keys",description:"Hosted open-source models with broad selection."},deepseek:{id:"deepseek",displayName:"DeepSeek",baseURL:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"DEEPSEEK_API_KEY",keyUrl:"https://platform.deepseek.com/api_keys",description:"DeepSeek-V3 chat and DeepSeek-R1 reasoning."},xai:{id:"xai",displayName:"xAI",baseURL:"https://api.x.ai/v1",defaultModel:"grok-2-latest",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"XAI_API_KEY",keyUrl:"https://console.x.ai",description:"Grok models from xAI."},google:{id:"google",displayName:"Google Gemini",baseURL:"https://generativelanguage.googleapis.com/v1beta/openai",defaultModel:"gemini-2.0-flash",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"GEMINI_API_KEY",keyUrl:"https://aistudio.google.com/apikey",description:"Gemini 2.0/1.5 via OpenAI-compatible endpoint."},mistral:{id:"mistral",displayName:"Mistral AI",baseURL:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"MISTRAL_API_KEY",keyUrl:"https://console.mistral.ai/api-keys",description:"Mistral Large, Codestral, Mixtral."},ollama:{id:"ollama",displayName:"Ollama (local)",baseURL:"http://localhost:11434/v1",defaultModel:"llama3.3",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:false,keyEnvVar:"OLLAMA_API_KEY",keyUrl:"https://ollama.com",description:"Local models via Ollama. No API key required."},openrouter:{id:"openrouter",displayName:"OpenRouter",baseURL:"https://openrouter.ai/api/v1",defaultModel:"google/gemini-2.0-flash-exp:free",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:true,requiresKey:true,keyEnvVar:"OPENROUTER_API_KEY",keyUrl:"https://openrouter.ai/keys",description:"Unified gateway to 100+ models. Multi-key fallback for rate-limit/credit/auth rotation."},custom:{id:"custom",displayName:"Custom (OpenAI-compatible)",baseURL:"",defaultModel:"",isOpenAICompat:true,supportsToolUse:true,supportsKeyFallback:false,requiresKey:true,keyEnvVar:"CUSTOM_API_KEY",description:"Any OpenAI-compatible endpoint. Specify baseURL and model in config."}};function Y(o){let e=Ne[o];if(!e)throw new Error(`Unknown provider: ${o}`);return e}function ct(){return Object.keys(Ne)}function Be(o){return o in Ne}var va=z.object({command:z.string(),args:z.array(z.string()).default([]),env:z.record(z.string(),z.string()).default({})}),Ta=z.object({defaultMode:z.enum(["ask","trust","locked"]).default("ask"),alwaysAllow:z.array(z.string()).default(["Read","Glob","Grep"]),alwaysDeny:z.array(z.string()).default([]),trustedPatterns:z.record(z.string(),z.array(z.string())).default({})}),Sa=ct(),V=1,Ca=z.record(z.string(),z.union([z.string(),z.array(z.string()).min(1)])),Aa=z.object({configVersion:z.number().int().min(0).default(V),provider:z.enum(Sa).default("fireworks"),model:z.string().default("accounts/fireworks/models/glm-5p1"),apiKeys:Ca.default({}),baseURLs:z.record(z.string(),z.string()).default({}),fireworksApiKey:z.string().optional(),tavilyApiKey:z.string().optional(),maxTokens:z.number().default(4096),permissions:Ta.default({defaultMode:"ask",alwaysAllow:["Read","Glob","Grep"],alwaysDeny:[],trustedPatterns:{}}),mcpServers:z.record(z.string(),va).default({}),bash:z.object({defaultTimeout:z.number().default(3e4),maxTimeout:z.number().default(6e5)}).default({defaultTimeout:3e4,maxTimeout:6e5})});function Pa(o){let e={...o.apiKeys??{}};o.fireworksApiKey&&!e.fireworks&&(e.fireworks=o.fireworksApiKey);let t=e.fireworks,n=typeof t=="string"?t:Array.isArray(t)?t[0]:void 0;return {configVersion:o.configVersion,provider:o.provider,model:o.model,apiKeys:e,baseURLs:o.baseURLs??{},fireworksApiKey:n,tavilyApiKey:o.tavilyApiKey,maxTokens:o.maxTokens,permissions:o.permissions,mcpServers:o.mcpServers,bash:o.bash}}var ls=Aa.transform(Pa);function qe(o,e){let t=o.apiKeys?.[e];return t?Array.isArray(t)?t:[t]:[]}var Ea=8192,He=class{name;client;abortController=null;opts;constructor(e){this.opts=e,this.name=e.providerName,this.client=new Ra({apiKey:e.apiKey||"no-key",baseURL:e.baseURL,defaultHeaders:e.defaultHeaders});}async*chat(e){this.abortController=new AbortController;let t=this.convertMessages(e),n=e.tools?this.convertTools(e.tools):void 0;try{let r=await this.client.chat.completions.create({model:e.model||this.opts.defaultModel,messages:t,tools:n&&n.length>0?n:void 0,max_tokens:e.maxTokens??this.opts.defaultMaxTokens??Ea,stream:!0,stream_options:{include_usage:!0}},{signal:this.abortController.signal}),s=new Map;for await(let i of r){let a=i.choices?.[0];if(a?.delta?.content&&(yield {type:"text_delta",text:a.delta.content}),a?.delta?.tool_calls)for(let c of a.delta.tool_calls){let l=c.index;if(c.function?.name){let p=c.id||`call_${l}_${Date.now()}`;s.set(l,p),yield {type:"tool_use_start",id:p,name:c.function.name};}c.function?.arguments&&(yield {type:"tool_use_delta",id:s.get(l)||`call_${l}`,input:c.function.arguments});}if(a?.finish_reason){for(let[,c]of s)yield {type:"tool_use_end",id:c};s.clear();}i.usage&&(yield {type:"message_end",usage:{inputTokens:i.usage.prompt_tokens??0,outputTokens:i.usage.completion_tokens??0}});}}catch(r){if(r instanceof Error&&r.name==="AbortError")return;yield {type:"error",error:r instanceof Error?r:new Error(String(r))};}}abort(){this.abortController?.abort(),this.abortController=null;}async isAvailable(){return this.opts.apiKey?true:this.opts.apiKey===""&&this.opts.baseURL.startsWith("http://localhost")}convertMessages(e){let t=[];e.systemPrompt&&t.push({role:"system",content:e.systemPrompt});for(let n of e.messages){let r=this.convertMessage(n);r&&t.push(r);}return t}convertMessage(e){if(e.role==="system")return {role:"system",content:typeof e.content=="string"?e.content:e.content.map(n=>n.text||"").join("")};if(e.role==="user")return {role:"user",content:typeof e.content=="string"?e.content:e.content.map(n=>n.text||"").join("")};if(e.role==="tool"){let t=typeof e.content=="string"?e.content:e.content.map(n=>n.content||n.text||"").join("");return {role:"tool",tool_call_id:e.toolCallId||"",content:t}}return e.role==="assistant"?this.convertAssistantMessage(e):null}convertAssistantMessage(e){if(typeof e.content=="string")return {role:"assistant",content:e.content};let t=e.content,n=[],r=[];for(let i of t)i.type==="text"&&i.text?n.push(i.text):i.type==="tool_use"&&r.push({id:i.id||"",type:"function",function:{name:i.name||"",arguments:JSON.stringify(i.input??{})}});let s=n.length>0?n.join(""):null;return r.length>0?{role:"assistant",content:s,tool_calls:r}:{role:"assistant",content:s}}convertTools(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:t.input_schema}}))}};var Ma="2023-06-01",$a=8192,uo=class{name="anthropic";apiKey;baseURL;defaultModel;abortController=null;constructor(e,t){let n=Y("anthropic");this.apiKey=e,this.baseURL=t||n.baseURL,this.defaultModel=n.defaultModel;}async*chat(e){this.abortController=new AbortController;let t={model:e.model||this.defaultModel,max_tokens:e.maxTokens??$a,messages:this.convertMessages(e.messages),system:e.systemPrompt,tools:e.tools?this.convertTools(e.tools):void 0,stream:true},n;try{n=await fetch(`${this.baseURL}/messages`,{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey,"anthropic-version":Ma},body:JSON.stringify(t),signal:this.abortController.signal});}catch(r){if(r instanceof Error&&r.name==="AbortError")return;yield {type:"error",error:r instanceof Error?r:new Error(String(r))};return}if(!n.ok){let r=await n.text().catch(()=>"");yield {type:"error",error:new Tn(`Anthropic API error ${n.status}: ${r||n.statusText}`,n.status)};return}if(!n.body){yield {type:"error",error:new Error("Anthropic API returned no body")};return}yield*this.parseStream(n.body);}abort(){this.abortController?.abort(),this.abortController=null;}async isAvailable(){return !!this.apiKey}convertMessages(e){let t=[];for(let n of e)if(n.role!=="system"){if(n.role==="user"){t.push({role:"user",content:typeof n.content=="string"?n.content:n.content.map(this.userBlockToAnthropic).filter(Boolean)});continue}if(n.role==="tool"){let r=typeof n.content=="string"?n.content:n.content.map(s=>s.content||s.text||"").join("");t.push({role:"user",content:[{type:"tool_result",tool_use_id:n.toolCallId||"",content:r}]});continue}if(n.role==="assistant")if(typeof n.content=="string")t.push({role:"assistant",content:n.content});else {let r=[];for(let s of n.content)s.type==="text"&&s.text?r.push({type:"text",text:s.text}):s.type==="tool_use"&&r.push({type:"tool_use",id:s.id||"",name:s.name||"",input:s.input??{}});t.push({role:"assistant",content:r});}}return t}userBlockToAnthropic=e=>e.type==="text"&&e.text?{type:"text",text:e.text}:e.type==="tool_result"?{type:"tool_result",tool_use_id:e.id||"",content:e.content||e.text||"",is_error:e.isError}:null;convertTools(e){return e.map(t=>({name:t.name,description:t.description,input_schema:t.input_schema}))}async*parseStream(e){let t=e.getReader(),n=new TextDecoder,r="",s=new Map,i=0,a=0;try{for(;;){let{done:c,value:l}=await t.read();if(c)break;r+=n.decode(l,{stream:!0});let p;for(;(p=r.indexOf(`
|
|
68
68
|
|
|
69
69
|
`))!==-1;){let u=r.slice(0,p);r=r.slice(p+2);let f=Ia(u);f&&(yield*this.handleAnthropicEvent(f,s,(g,d)=>{i+=g,a+=d;}));}}}catch(c){if(c instanceof Error&&c.name==="AbortError")return;yield {type:"error",error:c instanceof Error?c:new Error(String(c))};return}yield {type:"message_end",usage:{inputTokens:i,outputTokens:a}};}*handleAnthropicEvent(e,t,n){let r=e.data;if(e.type==="message_start"){let s=r.message?.usage;s&&n(s.input_tokens??0,0);return}if(e.type==="content_block_start"){let s=r.content_block,i=r.index??0;s?.type==="tool_use"&&(t.set(i,s.id||`block_${i}`),yield {type:"tool_use_start",id:s.id||`block_${i}`,name:s.name||""});return}if(e.type==="content_block_delta"){let s=r.delta,i=r.index??0;if(s?.type==="text_delta"&&s.text)yield {type:"text_delta",text:s.text};else if(s?.type==="thinking_delta"&&s.thinking)yield {type:"thinking_delta",text:s.thinking};else if(s?.type==="input_json_delta"&&s.partial_json!==void 0){let a=t.get(i);a&&(yield {type:"tool_use_delta",id:a,input:s.partial_json});}return}if(e.type==="content_block_stop"){let s=r.index??0,i=t.get(s);i&&(yield {type:"tool_use_end",id:i},t.delete(s));return}if(e.type==="message_delta"){let s=r.usage;s&&n(0,s.output_tokens??0);return}if(e.type==="error"){let s=r.error?.message||"Anthropic stream error";yield {type:"error",error:new Error(s)};}}},Tn=class extends Error{status;constructor(e,t){super(e),this.name="AnthropicError",this.status=t;}};function Ia(o){let e="message",t="";for(let n of o.split(`
|
|
70
|
-
`))n.startsWith("event:")?e=n.slice(6).trim():n.startsWith("data:")&&(t+=n.slice(5).trim());if(!t||t==="[DONE]")return null;try{return {type:e,data:JSON.parse(t)}}catch{return null}}var _a=new Set([401,402,403,429,500,502,503,504]),mo=class{name="openrouter";apiKeys;baseURL;defaultModel;headers;currentIndex=0;currentDelegate=null;onRotate;constructor(e){if(!e.apiKeys||e.apiKeys.length===0)throw new Error("OpenRouterAdapter requires at least one API key");let t=Y("openrouter");this.apiKeys=[...e.apiKeys],this.baseURL=e.baseURL||t.baseURL,this.defaultModel=e.defaultModel||t.defaultModel,this.onRotate=e.onRotate,this.headers={},e.referer&&(this.headers["HTTP-Referer"]=e.referer),e.appTitle&&(this.headers["X-Title"]=e.appTitle);}buildDelegate(e){return new
|
|
70
|
+
`))n.startsWith("event:")?e=n.slice(6).trim():n.startsWith("data:")&&(t+=n.slice(5).trim());if(!t||t==="[DONE]")return null;try{return {type:e,data:JSON.parse(t)}}catch{return null}}var _a=new Set([401,402,403,429,500,502,503,504]),mo=class{name="openrouter";apiKeys;baseURL;defaultModel;headers;currentIndex=0;currentDelegate=null;onRotate;constructor(e){if(!e.apiKeys||e.apiKeys.length===0)throw new Error("OpenRouterAdapter requires at least one API key");let t=Y("openrouter");this.apiKeys=[...e.apiKeys],this.baseURL=e.baseURL||t.baseURL,this.defaultModel=e.defaultModel||t.defaultModel,this.onRotate=e.onRotate,this.headers={},e.referer&&(this.headers["HTTP-Referer"]=e.referer),e.appTitle&&(this.headers["X-Title"]=e.appTitle);}buildDelegate(e){return new He({providerName:"openrouter",apiKey:this.apiKeys[e],baseURL:this.baseURL,defaultModel:this.defaultModel,defaultHeaders:this.headers})}async*chat(e){let t=this.currentIndex,n=false;for(;t<this.apiKeys.length;){this.currentIndex=t,this.currentDelegate=this.buildDelegate(t);let r=null;for await(let c of this.currentDelegate.chat(e)){if(c.type==="error"){r={event:c,status:La(c.error)};break}n=true,yield c;}if(!r)return;let{event:s,status:i}=r;if(n||!Da(i)){yield s;return}let a=t+1;if(a>=this.apiKeys.length){yield s;return}this.onRotate?.({fromIndex:t,toIndex:a,reason:s.error.message,status:i}),t=a;}}abort(){this.currentDelegate?.abort();}async isAvailable(){return this.apiKeys.some(e=>e.length>0)}getCurrentIndex(){return this.currentIndex}getKeyCount(){return this.apiKeys.length}};function Da(o){return o===void 0?true:_a.has(o)}function La(o){let e=o;if(typeof e.status=="number")return e.status;if(typeof e.statusCode=="number")return e.statusCode;let t=o.message.match(/\b(4\d{2}|5\d{2})\b/);if(t)return Number(t[1])}var Te=class extends Error{constructor(e){super(e),this.name="ProviderConfigError";}};function ja(o,e){let t=qe(o,e);if(t.length>0&&t.some(s=>s.length>0))return t.filter(s=>s.length>0);if(!Be(e))return [];let n=Y(e),r=process.env[n.keyEnvVar];return r?n.supportsKeyFallback&&r.includes(",")?r.split(",").map(s=>s.trim()).filter(Boolean):[r]:[]}function ps(o,e={}){let t=e.providerOverride||o.provider||"fireworks";if(!Be(t))throw new Te(`Unknown provider "${t}". Run /provider to switch, or edit ~/.arqzero/config.json.`);let n=Y(t),r=ja(o,t),s=o.baseURLs?.[t]||n.baseURL;if(n.requiresKey&&r.length===0)throw new Te(`No API key found for ${n.displayName}. Set ${n.keyEnvVar} or run /provider to configure one.`);if(t==="arqzero"){let i=D();if(!i)throw new Te("Managed inference requires sign-in. Run `arqzero login`, then start a session.");return new He({providerName:"arqzero",apiKey:i.accessToken,baseURL:`${B()}/llm`,defaultModel:o.model||n.defaultModel,defaultMaxTokens:o.maxTokens})}if(t==="openrouter")return new mo({apiKeys:r,baseURL:s,defaultModel:o.model||n.defaultModel,appTitle:"ArqZero"});if(t==="anthropic")return new uo(r[0]||"",s);if(t==="custom"&&!s)throw new Te("Custom provider requires baseURLs.custom in config. Run /provider or edit ~/.arqzero/config.json.");return new He({providerName:t,apiKey:r[0]||"",baseURL:s,defaultModel:o.model||n.defaultModel,defaultMaxTokens:o.maxTokens})}Z();function go(){return I()}function At(){return Ce.join(go(),"config.json")}function Pt(){return z$1.existsSync(At())}function fo(){let o=At();if(!z$1.existsSync(o))throw new Error(`Config not found at ${o}. Run 'arqzero' to initialize.`);let e=z$1.readFileSync(o,"utf-8"),t;try{t=JSON.parse(e);}catch{throw new Error(`Invalid JSON in ${o}`)}let n=ls.safeParse(t);if(!n.success){let s=n.error.issues.map(i=>` ${i.path.join(".")}: ${i.message}`).join(`
|
|
71
71
|
`);throw new Error(`Config validation failed:
|
|
72
|
-
${s}`)}let r=n.data;return process.env.FIREWORKS_API_KEY&&!r.apiKeys.fireworks&&(r.apiKeys.fireworks=process.env.FIREWORKS_API_KEY,r.fireworksApiKey||(r.fireworksApiKey=process.env.FIREWORKS_API_KEY)),r}function
|
|
72
|
+
${s}`)}let r=n.data;return process.env.FIREWORKS_API_KEY&&!r.apiKeys.fireworks&&(r.apiKeys.fireworks=process.env.FIREWORKS_API_KEY,r.fireworksApiKey||(r.fireworksApiKey=process.env.FIREWORKS_API_KEY)),r}function Se(o){let e=go();z$1.mkdirSync(e,{recursive:true}),z$1.mkdirSync(Ce.join(e,"sessions"),{recursive:true}),z$1.mkdirSync(Ce.join(e,"skills"),{recursive:true}),z$1.writeFileSync(At(),JSON.stringify(o,null,2),"utf-8");}var ds={0:o=>({...o,configVersion:1})};function Oa(o){if(!z$1.existsSync(o))return null;let e=z$1.readFileSync(o,"utf-8");try{let t=JSON.parse(e);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{}return null}function Ua(o){let e=o.configVersion;return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:0}function Na(o,e){let t=Ce.join(go(),"backups");z$1.mkdirSync(t,{recursive:true});let n=new Date().toISOString().replace(/[:.]/g,"-"),r=Ce.join(t,`config-v${e}-${n}.json`);return z$1.copyFileSync(o,r),r}function ms(o={}){let e=At(),t=Oa(e);if(t===null)return {upgraded:false,fromVersion:V,toVersion:V,notes:["No existing config \u2014 nothing to upgrade"]};let n=Ua(t),r=[];if(n===V)return {upgraded:false,fromVersion:n,toVersion:n,notes:[`Config already at v${n} \u2014 no upgrade needed`]};if(n>V)return r.push(`Config is v${n} but this binary only supports v${V}. Refusing to silently downgrade. Upgrade your CLI: npm i -g arqzero@latest`),{upgraded:false,fromVersion:n,toVersion:n,notes:r};let s=[];for(let c=n;c<V;c++){if(!ds[c])return r.push(`No migration registered for v${c} \u2192 v${c+1}; aborting.`),{upgraded:false,fromVersion:n,toVersion:n,notes:r};s.push(c);}if(r.push(`Config upgrade needed: v${n} \u2192 v${V} (${s.length} step${s.length===1?"":"s"})`),o.dryRun)return {upgraded:false,fromVersion:n,toVersion:V,notes:r};let i=Na(e,n);r.push(`Backup written to ${i}`);let a=t;for(let c of s)try{a=ds[c](a);}catch(l){return r.push(`Migration v${c} \u2192 v${c+1} failed: ${l.message}`),r.push(`Original config left untouched at ${e}`),{upgraded:false,fromVersion:n,toVersion:c,backupPath:i,notes:r}}return z$1.writeFileSync(e,JSON.stringify(a,null,2),"utf-8"),r.push(`Config rewritten at ${e}`),{upgraded:true,fromVersion:n,toVersion:V,backupPath:i,notes:r}}function Ba(o,e,t,n){let r=Y(o),s=Array.isArray(e)?e:[e],i={};s.length>0&&s.some(l=>l.length>0)&&(i[o]=r.supportsKeyFallback?s:s[0]);let a={};t&&(a[o]=t);let c=o==="fireworks"?s[0]:void 0;return {configVersion:V,provider:o,model:n||r.defaultModel,apiKeys:i,baseURLs:a,fireworksApiKey:c,maxTokens:4096,permissions:{defaultMode:"ask",alwaysAllow:["Read","Glob","Grep"],alwaysDeny:[],trustedPatterns:{Bash:["npm test","npm run *","git status","git diff","git log"]}},mcpServers:{},bash:{defaultTimeout:3e4,maxTimeout:6e5}}}async function ho(o,e={}){if(Pt()&&!e.overwrite)throw new Error("Config already exists");console.log(`
|
|
73
73
|
Choose a provider:
|
|
74
|
-
`);let t=
|
|
75
|
-
Selected: ${r.displayName}`),r.keyUrl&&console.log(` Get a key: ${r.keyUrl}`);let s;if(n==="custom"&&(s=(await o(" Base URL (e.g. https://api.example.com/v1): ")).trim(),!s))throw new Error("Custom provider requires a base URL");let i=[];if(
|
|
76
|
-
|
|
74
|
+
`);let t=ct();t.forEach((l,p)=>{let u=Ne[l];console.log(` ${(p+1).toString().padStart(2," ")}. ${u.displayName.padEnd(28)} ${u.description}`);}),console.log("");let n="fireworks";for(;;){let p=(await o(` Provider (1-${t.length}, default 1): `)).trim();if(!p){n=t[0];break}let u=parseInt(p,10);if(Number.isFinite(u)&&u>=1&&u<=t.length){n=t[u-1];break}console.log(" Invalid selection. Try again.");}let r=Y(n);console.log(`
|
|
75
|
+
Selected: ${r.displayName}`),r.keyUrl&&console.log(` Get a key: ${r.keyUrl}`);let s;if(n==="custom"&&(s=(await o(" Base URL (e.g. https://api.example.com/v1): ")).trim(),!s))throw new Error("Custom provider requires a base URL");let i=[];if(n==="arqzero"){let l=D();if(!l)throw console.log(`
|
|
76
|
+
ArqZero AI requires sign-in (no API key needed).`),console.log(" Exit this setup, run `arqzero login`, then re-run `arqzero` to continue."),new Error("Not signed in \u2014 run `arqzero login` first.");console.log(`
|
|
77
|
+
Signed in as ${l.email} (tier: ${l.tier}). No key needed.`),i=[""];}else if(r.requiresKey){let l=(await o(` ${r.displayName} API key: `)).trim();if(!l)throw new Error(`${r.displayName} API key is required`);if(i.push(l),r.supportsKeyFallback)for(console.log(`
|
|
78
|
+
OpenRouter supports a fallback key chain. Add backup keys for auto-rotation on rate-limit/credit/auth errors.`);;){let p=(await o(" Add another key? (paste key or empty to finish): ")).trim();if(!p)break;i.push(p);}}else i=[""];let a;if(n==="custom"&&(a=(await o(" Default model (required for custom): ")).trim(),!a))throw new Error("Custom provider requires a default model");let c=Ba(n,i,s,a);return Se(c),c}async function gs(o){if(!Pt())return ho(o);let e=fo();console.log(`
|
|
77
79
|
Reconfiguring ArqZero. Existing sessions, memory, and`),console.log(` permission settings are preserved.
|
|
78
|
-
`);let t=await ho(o,{overwrite:true}),n={...e,provider:t.provider,model:t.model,apiKeys:t.apiKeys,baseURLs:t.baseURLs,fireworksApiKey:t.fireworksApiKey,configVersion:V};return
|
|
79
|
-
`).map(t=>t.trim()).filter(t=>t&&t!=="UUID")[0]||"";else if(o==="darwin"){let n=execFileSync("ioreg",["-rd1","-c","IOPlatformExpertDevice"],{encoding:"utf-8"}).match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/);e=n?n[1]:"";}else e=execFileSync("cat",["/etc/machine-id"],{encoding:"utf-8"}).trim();Et=e||fs.randomUUID();}catch{let o=process.env.COMPUTERNAME||process.env.HOSTNAME||"unknown",e=process.env.USERNAME||process.env.USER||"unknown";Et=fs.createHash("sha256").update(`${o}-${e}`).digest("hex");}return Et}function
|
|
80
|
-
Sign in to ArqZero`),console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),console.log(` Open: ${r}`),console.log(` Code: ${t.userCode}`),console.log(""),console.log(` (Opening browser to ${s} ...)`),Fa(s),console.log("");let a=Date.now()+t.expiresIn*1e3,c=t.interval*1e3,l=["\u25D0","\u25D3","\u25D1","\u25D2"],p=0;for(;Date.now()<a;){process.stdout.write(`\r ${l[p++%l.length]} waiting for activation...`),await new Promise(f=>setTimeout(f,c));let u;try{u=await xr(t.deviceCode);}catch(f){throw process.stdout.write("\r"),new Error(`Poll failed: ${f instanceof Error?f.message:String(f)}`)}if(u.kind==="ok"){process.stdout.write("\r"+" ".repeat(48)+"\r");let f={accessToken:u.accessToken,refreshToken:u.refreshToken,tier:u.tier,email:u.user.email,expiresAt:Date.now()+u.expiresIn*1e3,lastValidated:Date.now()};return xe(f),console.log(` \u2713 Signed in as ${f.email} (tier: ${f.tier})`),console.log(" Run `arqzero` to start a session.\n"),{tier:f.tier,email:f.email}}if(u.kind!=="pending"){if(u.kind==="slow_down"){c+=5e3;continue}if(u.kind==="denied")throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Activation denied. Login aborted.");if(u.kind==="expired")throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Code expired before activation. Run `arqzero login` again.")}}throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Login timed out. Run `arqzero login` again.")}async function hs(o,e={}){let t=
|
|
80
|
+
`);let t=await ho(o,{overwrite:true}),n={...e,provider:t.provider,model:t.model,apiKeys:t.apiKeys,baseURLs:t.baseURLs,fireworksApiKey:t.fireworksApiKey,configVersion:V};return Se(n),console.log("\n Settings updated. Run `arqzero` to start with your new config.\n"),n}var Et=null;async function Mt(){if(Et)return Et;try{let o=process.platform,e;if(o==="win32")e=execFileSync("wmic",["csproduct","get","UUID"],{encoding:"utf-8"}).split(`
|
|
81
|
+
`).map(t=>t.trim()).filter(t=>t&&t!=="UUID")[0]||"";else if(o==="darwin"){let n=execFileSync("ioreg",["-rd1","-c","IOPlatformExpertDevice"],{encoding:"utf-8"}).match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/);e=n?n[1]:"";}else e=execFileSync("cat",["/etc/machine-id"],{encoding:"utf-8"}).trim();Et=e||fs.randomUUID();}catch{let o=process.env.COMPUTERNAME||process.env.HOSTNAME||"unknown",e=process.env.USERNAME||process.env.USER||"unknown";Et=fs.createHash("sha256").update(`${o}-${e}`).digest("hex");}return Et}function Ha(o){return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o)}function Fa(o){try{let e=process.platform==="win32",t=process.platform==="darwin",s=spawn(e?"cmd":t?"open":"xdg-open",e?["/c","start","",o]:[o],{detached:!0,stdio:"ignore"});s.on("error",()=>{}),s.unref();}catch{}}async function Wa(){let o=await Mt(),e=`${yo.userInfo().username}@${yo.hostname()}`,t=await yr(o,e),n=hr(),r=t.verificationUri.startsWith("http")?t.verificationUri:`${n}${t.verificationUri}`,s=`${r}?code=${encodeURIComponent(t.userCode)}`;console.log(`
|
|
82
|
+
Sign in to ArqZero`),console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),console.log(` Open: ${r}`),console.log(` Code: ${t.userCode}`),console.log(""),console.log(` (Opening browser to ${s} ...)`),Fa(s),console.log("");let a=Date.now()+t.expiresIn*1e3,c=t.interval*1e3,l=["\u25D0","\u25D3","\u25D1","\u25D2"],p=0;for(;Date.now()<a;){process.stdout.write(`\r ${l[p++%l.length]} waiting for activation...`),await new Promise(f=>setTimeout(f,c));let u;try{u=await xr(t.deviceCode);}catch(f){throw process.stdout.write("\r"),new Error(`Poll failed: ${f instanceof Error?f.message:String(f)}`)}if(u.kind==="ok"){process.stdout.write("\r"+" ".repeat(48)+"\r");let f={accessToken:u.accessToken,refreshToken:u.refreshToken,tier:u.tier,email:u.user.email,expiresAt:Date.now()+u.expiresIn*1e3,lastValidated:Date.now()};return xe(f),console.log(` \u2713 Signed in as ${f.email} (tier: ${f.tier})`),console.log(" Run `arqzero` to start a session.\n"),{tier:f.tier,email:f.email}}if(u.kind!=="pending"){if(u.kind==="slow_down"){c+=5e3;continue}if(u.kind==="denied")throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Activation denied. Login aborted.");if(u.kind==="expired")throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Code expired before activation. Run `arqzero login` again.")}}throw process.stdout.write("\r"+" ".repeat(48)+"\r"),new Error("Login timed out. Run `arqzero login` again.")}async function hs(o,e={}){let t=D();if(t){console.log(`
|
|
81
83
|
Already logged in as ${t.email} (tier: ${t.tier}).`);let r=(await o(" Log in again with a different account? (y/N): ")).trim().toLowerCase();if(r!=="y"&&r!=="yes")return {tier:t.tier,email:t.email}}if(!(e.useOtp||process.env.ARQZERO_LOGIN_MODE==="otp"))try{return await Wa()}catch(r){console.log(`
|
|
82
84
|
Device flow failed: ${r instanceof Error?r.message:String(r)}`),console.log(` Falling back to email code flow.
|
|
83
85
|
`);}return Ka(o)}async function Ka(o){console.log(`
|
|
84
86
|
Sign in to ArqZero \u2014 one-time code by email. No password.`),console.log(` Free tier is the default; logging in unlocks usage tracking and Pro upgrades.
|
|
85
|
-
`);let e="";for(let r=0;r<3&&(e=(await o(" Email: ")).trim(),!
|
|
87
|
+
`);let e="";for(let r=0;r<3&&(e=(await o(" Email: ")).trim(),!Ha(e));r+=1)console.log(" Not a valid email. Try again."),e="";if(!e)throw new Error("Login aborted: invalid email after 3 attempts");try{await Wt(e);}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`Could not send login code: ${s}`)}console.log(`
|
|
86
88
|
We sent a 6-digit code to ${e}. Check your inbox (and spam).
|
|
87
89
|
`);let t=await Mt(),n=`${yo.userInfo().username}@${yo.hostname()}`;for(let r=0;r<3;r+=1){let s=(await o(" Code: ")).trim();if(!s){console.log(" Empty code \u2014 try again.");continue}try{let i=await Kt(e,s,t,n),a=Date.now()+i.expiresIn*1e3,c=i.tier??"free";try{c=(await ke(i.accessToken)).tier;}catch{}let l={accessToken:i.accessToken,refreshToken:i.refreshToken,tier:c,email:i.user.email,expiresAt:a,lastValidated:Date.now()};return xe(l),console.log(`
|
|
88
|
-
Signed in as ${l.email} \u2014 tier: ${l.tier}.`),console.log(" Run `arqzero` to start a session.\n"),{tier:l.tier,email:l.email}}catch(i){let a=i instanceof Error?i.message:String(i);console.log(` ${a}. Try again.`);}}throw new Error("Login aborted: verification failed after 3 attempts")}async function ys(){let o=
|
|
90
|
+
Signed in as ${l.email} \u2014 tier: ${l.tier}.`),console.log(" Run `arqzero` to start a session.\n"),{tier:l.tier,email:l.email}}catch(i){let a=i instanceof Error?i.message:String(i);console.log(` ${a}. Try again.`);}}throw new Error("Login aborted: verification failed after 3 attempts")}async function ys(){let o=D();if(!o){console.log(`
|
|
89
91
|
Not currently logged in.
|
|
90
|
-
`);return}try{await zt(o.refreshToken);}catch{}
|
|
92
|
+
`);return}try{await zt(o.refreshToken);}catch{}Ht(),console.log(`
|
|
91
93
|
Logged out ${o.email}. Local auth cleared.
|
|
92
|
-
`);}var lt=class{tools=new Map;register(e){if(this.tools.has(e.name))throw new Error(`Tool "${e.name}" is already registered`);this.tools.set(e.name,e);}get(e){return this.tools.get(e)}has(e){return this.tools.has(e)}getAll(){return [...this.tools.values()]}getDefinitions(){return this.getAll().map(e=>({name:e.name,description:e.description,input_schema:e.inputSchema}))}};var za=[".ssh",".gnupg",".aws",".gpg-keys"],Ga=[".env",".env.local",".env.production"];function Va(o){let t=o.replace(/\\/g,"/").split("/");for(let r of za)if(t.includes(r))return true;let n=t[t.length-1];for(let r of Ga)if(n===r)return true;return false}function J(o,e){let t=
|
|
94
|
+
`);}var lt=class{tools=new Map;register(e){if(this.tools.has(e.name))throw new Error(`Tool "${e.name}" is already registered`);this.tools.set(e.name,e);}get(e){return this.tools.get(e)}has(e){return this.tools.has(e)}getAll(){return [...this.tools.values()]}getDefinitions(){return this.getAll().map(e=>({name:e.name,description:e.description,input_schema:e.inputSchema}))}};var za=[".ssh",".gnupg",".aws",".gpg-keys"],Ga=[".env",".env.local",".env.production"];function Va(o){let t=o.replace(/\\/g,"/").split("/");for(let r of za)if(t.includes(r))return true;let n=t[t.length-1];for(let r of Ga)if(n===r)return true;return false}function J(o,e){let t=Ce.resolve(e,o),n=yo.homedir();if(Va(t))throw new Error(`Access denied: ${o} is in a sensitive location`);let r=Ce.normalize(t),s=Ce.normalize(e),i=Ce.normalize(n);if(r.startsWith(s+Ce.sep)||r===s||r.startsWith(i+Ce.sep)||r===i)return t;let a=Ce.normalize(yo.tmpdir());if(r.startsWith(a+Ce.sep)||r===a)return t;throw new Error(`Path traversal blocked: ${o} resolves outside allowed directories`)}var Qa={".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".json":"json",".py":"python",".md":"markdown",".css":"css",".html":"html",".yaml":"yaml",".yml":"yaml",".sh":"bash",".rs":"rust",".go":"go",".java":"java",".c":"c",".cpp":"cpp",".h":"c",".hpp":"cpp",".rb":"ruby",".sql":"sql",".xml":"xml",".toml":"toml"};function Ya(o){return String(o).padStart(6," ")}var ks={name:"Read",description:"Reads a file from the filesystem and returns its content with line numbers.",inputSchema:{type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to read"},offset:{type:"number",description:"Line number to start reading from (1-based)"},limit:{type:"number",description:"Maximum number of lines to read"}},required:["file_path"]},permissionLevel:"safe",async execute(o,e){let{file_path:t,offset:n,limit:r}=o,s;try{s=J(t,e.cwd);}catch(b){return {content:b.message,isError:true}}let i;try{i=readFileSync(s,"utf-8");}catch(b){return {content:`Error reading file: ${b.message}`,isError:true}}let a=i.endsWith(`
|
|
93
95
|
`)?i.slice(0,-1).split(`
|
|
94
96
|
`):i.split(`
|
|
95
|
-
`),c=a.length,l=extname(t),p=Qa[l],u=n?n-1:0,f=r!==void 0?u+r:c,g=a.slice(u,f),d=n!==void 0||r!==void 0?g.length<c:false;return {content:g.map((b,R)=>{let
|
|
97
|
+
`),c=a.length,l=extname(t),p=Qa[l],u=n?n-1:0,f=r!==void 0?u+r:c,g=a.slice(u,f),d=n!==void 0||r!==void 0?g.length<c:false;return {content:g.map((b,R)=>{let L=u+R+1;return `${Ya(L)} ${b}`}).join(`
|
|
96
98
|
`),display:{language:p,truncated:d||void 0,lineCount:d?c:void 0}}}};var bs={name:"Write",description:"Creates or overwrites a file at the given path with the provided content.",inputSchema:{type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to write"},content:{type:"string",description:"Content to write to the file"}},required:["file_path","content"]},permissionLevel:"ask",async execute(o,e){let{file_path:t,content:n}=o,r;try{r=J(t,e.cwd);}catch(c){return {content:c.message,isError:true}}let s="";if(existsSync(r))try{s=readFileSync(r,"utf-8");}catch{}mkdirSync(dirname(r),{recursive:true}),writeFileSync(r,n,"utf-8");let i=s===""?0:s.split(`
|
|
97
99
|
`).length,a=n===""?0:n.split(`
|
|
98
100
|
`).length;return Yt(a,i),{content:`Wrote ${n.length} characters to ${r}`,metadata:{filePath:r,oldContent:s,newContent:n,diffOperation:"write"}}}};var ws={name:"Edit",description:"Performs exact string replacements in a file.",inputSchema:{type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to edit"},old_string:{type:"string",description:"The exact string to replace"},new_string:{type:"string",description:"The replacement string"},replace_all:{type:"boolean",description:"Replace all occurrences (default: false)"}},required:["file_path","old_string","new_string"]},permissionLevel:"ask",async execute(o,e){let{file_path:t,old_string:n,new_string:r,replace_all:s}=o,i;try{i=J(t,e.cwd);}catch(f){return {content:f.message,isError:true}}let a=readFileSync(i,"utf-8");if(!a.includes(n))return {content:"old_string not found in file",isError:true};if(!s&&a.indexOf(n)!==a.lastIndexOf(n))return {content:"old_string is not unique in file. Use replace_all to replace all occurrences.",isError:true};let c,l;s?(l=a.split(n).length-1,c=a.replaceAll(n,r)):(l=1,c=a.replace(n,r)),writeFileSync(i,c,"utf-8");let p=n===""?0:n.split(`
|
|
@@ -101,14 +103,14 @@ ${s}`)}let r=n.data;return process.env.FIREWORKS_API_KEY&&!r.apiKeys.fireworks&&
|
|
|
101
103
|
`).filter(a=>i.test(a)).join(`
|
|
102
104
|
`),s=s.split(`
|
|
103
105
|
`).filter(a=>i.test(a)).join(`
|
|
104
|
-
`);}catch{}return {stdout:r,stderr:s}}clear(){for(let e of this.processes.values())if(e.status==="running")try{e.child.kill("SIGTERM");}catch{}this.processes.clear(),this.nextId=1;}},
|
|
106
|
+
`);}catch{}return {stdout:r,stderr:s}}clear(){for(let e of this.processes.values())if(e.status==="running")try{e.child.kill("SIGTERM");}catch{}this.processes.clear(),this.nextId=1;}},Ae=new An;var ic=[/^vim\b/,/^vi\b/,/^nano\b/,/^emacs\b/,/^ssh\b(?!.*\s-[A-Za-z]*[Tt])/,/^python3?\s*$/,/^node\s*$/,/^irb\b/,/^pry\b/,/^mysql\s*$/,/^psql\s*$/];function ac(o){let e=o.trim();return ic.some(t=>t.test(e))}function cc(o,e){let{defaultTimeout:t,maxTimeout:n}=e.config.bash;return o.timeout!==void 0?Math.min(o.timeout,n):t}function lc(o,e,t){let n=o.length>0,r=e.length>0,s;return n&&r?s=`stdout:
|
|
105
107
|
${o}
|
|
106
108
|
|
|
107
109
|
stderr:
|
|
108
110
|
${e}`:n?s=o:r?s=`stderr:
|
|
109
111
|
${e}`:s="(no output)",t!==null&&t!==0&&(s+=`
|
|
110
112
|
|
|
111
|
-
Exit code: ${t}`),{content:s,isError:t!==null&&t!==0?true:void 0}}var Ts={name:"Bash",description:"Executes a shell command and returns the output.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The shell command to execute"},timeout:{type:"number",description:"Timeout in milliseconds (foreground only)"},cwd:{type:"string",description:"Working directory override"},run_in_background:{type:"boolean",description:"Spawn detached and return a process_id immediately. Use BashOutput to read output and KillShell to terminate."}},required:["command"]},permissionLevel:"ask",async execute(o,e){let{command:t,cwd:n,run_in_background:r}=o;if(ac(t))return {content:"Interactive processes are not supported. Use non-interactive alternatives.",isError:true};let s=n??e.cwd;if(r)try{let a=spawn(t,[],{cwd:s,shell:!0,stdio:["ignore","pipe","pipe"]}),c=
|
|
113
|
+
Exit code: ${t}`),{content:s,isError:t!==null&&t!==0?true:void 0}}var Ts={name:"Bash",description:"Executes a shell command and returns the output.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The shell command to execute"},timeout:{type:"number",description:"Timeout in milliseconds (foreground only)"},cwd:{type:"string",description:"Working directory override"},run_in_background:{type:"boolean",description:"Spawn detached and return a process_id immediately. Use BashOutput to read output and KillShell to terminate."}},required:["command"]},permissionLevel:"ask",async execute(o,e){let{command:t,cwd:n,run_in_background:r}=o;if(ac(t))return {content:"Interactive processes are not supported. Use non-interactive alternatives.",isError:true};let s=n??e.cwd;if(r)try{let a=spawn(t,[],{cwd:s,shell:!0,stdio:["ignore","pipe","pipe"]}),c=Ae.register(t,a);return {content:`Started background process ${c.id} (pid: ${c.pid??"unknown"}). Use BashOutput with process_id="${c.id}" to read output, KillShell to terminate.`}}catch(a){return {content:`Error spawning background process: ${a.message}`,isError:true}}let i=cc(o,e);return e.abortSignal?.aborted?{content:"Aborted before execution.",isError:true}:new Promise(a=>{let c="",l="",p=false,u=spawn(t,[],{cwd:s,shell:true,stdio:["pipe","pipe","pipe"]}),f=setTimeout(()=>{if(!p){try{u.kill("SIGTERM");}catch{}setTimeout(()=>{try{u.kill("SIGKILL");}catch{}},2e3).unref();}},i).unref(),g=()=>{if(!p){try{u.kill("SIGTERM");}catch{}setTimeout(()=>{try{u.kill("SIGKILL");}catch{}},1e3).unref();}};e.abortSignal?.addEventListener("abort",g,{once:true}),u.stdout?.on("data",d=>{c+=d.toString("utf-8");}),u.stderr?.on("data",d=>{l+=d.toString("utf-8");}),u.on("error",d=>{p||(p=true,clearTimeout(f),e.abortSignal?.removeEventListener("abort",g),a({content:`Error: ${d.message}`,isError:true}));}),u.on("close",(d,y)=>{if(!p){if(p=true,clearTimeout(f),e.abortSignal?.removeEventListener("abort",g),e.abortSignal?.aborted){a({content:"Aborted (Ctrl-C).",isError:true});return}if(y==="SIGTERM"||y==="SIGKILL"){a({content:`Killed (signal: ${y}).`,isError:true});return}a(lc(c.trimEnd(),l.trimEnd(),d));}});})}};var Ss={name:"Glob",description:"Finds files matching a glob pattern.",inputSchema:{type:"object",properties:{pattern:{type:"string",description:"Glob pattern to match files (e.g., '**/*.ts')"},path:{type:"string",description:"Directory to search in"}},required:["pattern"]},permissionLevel:"safe",async execute(o,e){let{pattern:t,path:n}=o,r=n??e.cwd,s=["**/node_modules/**","**/.git/**"],i=pc.sync(t,{cwd:r,ignore:s,dot:true,onlyFiles:true});return i.length===0?{content:"(no matches)"}:{content:i.join(`
|
|
112
114
|
`)}}};var Cs={name:"Grep",description:"Searches file contents using a regex pattern.",inputSchema:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for"},path:{type:"string",description:"File or directory to search in"},glob:{type:"string",description:"Glob pattern to filter files"},output_mode:{type:"string",enum:["content","files_with_matches","count"],description:"Output format"}},required:["pattern"]},permissionLevel:"safe",async execute(o,e){let{pattern:t,path:n,glob:r,output_mode:s}=o;if(t.length>500)return {content:"Error: Pattern too long (max 500 chars)",isError:true};let i;try{i=new RegExp(t,"gm");}catch{return {content:`Error: Invalid regex pattern: ${t}`,isError:true}}let a=s??"files_with_matches",c=["**/node_modules/**","**/.git/**"],l,p=n??e.cwd,u=false;try{u=statSync(p).isFile();}catch{}if(u)l=[p];else {let g=r??"**/*";l=pc.sync(g,{cwd:p,ignore:c,dot:true,onlyFiles:true}).map(d=>`${p}/${d}`);}let f=[];for(let g of l){let d;try{d=readFileSync(g,"utf-8");}catch{continue}let y=d.split(`
|
|
113
115
|
`),b=[];for(let R=0;R<y.length;R++)i.lastIndex=0,i.test(y[R])&&b.push({lineNum:R+1,text:y[R]});if(b.length!==0)switch(a){case "files_with_matches":f.push(g);break;case "content":for(let R of b)f.push(`${g}:${R.lineNum}:${R.text}`);break;case "count":f.push(`${g}:${b.length}`);break}}return f.length===0?{content:"(no matches)"}:{content:f.join(`
|
|
114
116
|
`)}}};var As={name:"Prompt",description:"Asks the user a question and returns their response.",inputSchema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user"}},required:["question"]},permissionLevel:"safe",async execute(o,e){let{question:t}=o;return (await e.promptUser({tool:"Prompt",input:{question:t},level:"safe"})).allowed?{content:`User responded to: ${t}`}:{content:"User declined to answer",isError:true}}};var Rs="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";function pt(o){return o.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/'/g,"'")}function xo(o){return o.replace(/<[^>]*>/g,"")}function gc(o){if(o.includes("bing.com/ck/a")){let e=o.match(/[?&]u=a1([^&]+)/);if(e)try{let t=e[1].replace(/-/g,"+").replace(/_/g,"/");return Buffer.from(t,"base64").toString("utf-8")}catch{}}return o}async function fc(o){let e=`https://www.bing.com/search?q=${encodeURIComponent(o)}&count=10`,t=await fetch(e,{headers:{"User-Agent":Rs,Accept:"text/html","Accept-Language":"en-US,en;q=0.9"},signal:AbortSignal.timeout(1e4)});if(!t.ok)throw new Error(`Bing returned ${t.status}`);let n=await t.text();return hc(n)}function hc(o){let e=[],t=/<li class="b_algo"[^>]*>([\s\S]*?)(?=<li class="b_algo"|<\/ol>|$)/gi,n;for(;(n=t.exec(o))!==null&&e.length<10;){let r=n[1],s=r.match(/<h2[^>]*>\s*<a\s+[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/i);if(!s)continue;let i=pt(s[1]),a=pt(xo(s[2]).trim()),c=gc(i),l=r.match(/<div class="b_caption"[^>]*>[\s\S]*?<p[^>]*>([\s\S]*?)<\/p>/i)||r.match(/<p[^>]*>([\s\S]*?)<\/p>/i),p=l?pt(xo(l[1]).trim()).slice(0,200):"";a&&c&&e.push({title:a,url:c,snippet:p});}return e}async function yc(o){let e=await fetch(`https://html.duckduckgo.com/html/?q=${encodeURIComponent(o)}`,{signal:AbortSignal.timeout(1e4),headers:{"User-Agent":Rs}});if(!e.ok||e.status===202)throw new Error(`DuckDuckGo returned ${e.status}`);let t=await e.text();return xc(t)}function xc(o){let e=[],t=/<div\s+class="result results_links results_links_deep web-result\s*"[^>]*>([\s\S]*?)(?=<div\s+class="result |$)/gi,n;for(;(n=t.exec(o))!==null&&e.length<10;){let r=n[1],s=r.match(/<a\s+[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/i)||r.match(/<a\s+[^>]*href="([^"]*)"[^>]*class="result__a"[^>]*>([\s\S]*?)<\/a>/i);if(!s)continue;let i=pt(s[1]),a=pt(xo(s[2]).trim());if(i.includes("duckduckgo.com/l/")){let p=i.match(/[?&]uddg=([^&]+)/);if(p)try{i=decodeURIComponent(p[1]);}catch{}}let c=r.match(/<a\s+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/i),l=c?pt(xo(c[1]).trim()):"";a&&i&&e.push({title:a,url:i,snippet:l});}return e}function Ps(o,e){return o.length===0?"No search results found.":`Search results (${e}):
|
|
@@ -121,30 +123,30 @@ Exit code: ${t}`),{content:s,isError:t!==null&&t!==0?true:void 0}}var Ts={name:"
|
|
|
121
123
|
|
|
122
124
|
${c}`),{content:c}}catch(s){return clearTimeout(r),{content:s.name==="AbortError"?"Error: Fetch request timed out after 15 seconds.":`Error: Failed to fetch URL: ${s.message}`,isError:true}}}};var $s={name:"MultiEdit",description:"Applies multiple sequential edits to a single file. Each edit validates that old_string exists and is unique.",inputSchema:{type:"object",properties:{file_path:{type:"string",description:"Absolute path to the file to edit"},edits:{type:"array",description:"Array of edits to apply sequentially",items:{type:"object",properties:{old_string:{type:"string",description:"The exact string to replace"},new_string:{type:"string",description:"The replacement string"}},required:["old_string","new_string"]}}},required:["file_path","edits"]},permissionLevel:"ask",async execute(o,e){let{file_path:t,edits:n}=o;if(!n||n.length===0)return {content:"No edits provided",isError:true};let r;try{r=J(t,e.cwd);}catch(a){return {content:a.message,isError:true}}let s=readFileSync(r,"utf-8"),i=s;for(let a=0;a<n.length;a++){let{old_string:c,new_string:l}=n[a];if(!i.includes(c))return {content:`Edit ${a+1}: old_string not found in file`,isError:true};if(i.indexOf(c)!==i.lastIndexOf(c))return {content:`Edit ${a+1}: old_string is not unique in file`,isError:true};i=i.replace(c,l);}return writeFileSync(r,i,"utf-8"),{content:`Applied ${n.length} edit(s) to ${r}`,metadata:{filePath:r,oldContent:s,newContent:i,diffOperation:"edit"}}}};var Is={name:"LS",description:"Lists directory contents showing name, type (file/dir), and size.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Directory path to list (defaults to cwd)"}},required:[]},permissionLevel:"safe",async execute(o,e){let{path:t}=o,n;try{n=t?J(t,e.cwd):e.cwd;}catch(i){return {content:i.message,isError:true}}let r;try{r=readdirSync(n);}catch(i){return {content:`Failed to list directory: ${i.message}`,isError:true}}if(r.length===0)return {content:"(empty directory)"};let s=[];for(let i of r.sort())try{let a=join(n,i),c=statSync(a);c.isDirectory()?s.push(`${i}/`):s.push(`${i} (${Rc(c.size)})`);}catch{s.push(`${i} (unreadable)`);}return {content:s.join(`
|
|
123
125
|
`)}}};function Rc(o){return o<1024?`${o} B`:o<1024*1024?`${(o/1024).toFixed(1)} KB`:`${(o/(1024*1024)).toFixed(1)} MB`}function Pn(){let o=zo();if(o.size===0)return "No tasks";let e=[];for(let[,t]of o){let n=t.priority?` [${t.priority}]`:"";e.push(`- [${t.status}] ${t.content}${n} (id: ${t.id})`);}return e.join(`
|
|
124
|
-
`)}var _s={name:"TodoWrite",description:"Stores or updates a task list in the current session.",inputSchema:{type:"object",properties:{todos:{type:"array",description:"Array of todo items to store/update",items:{type:"object",properties:{id:{type:"string"},content:{type:"string"},status:{type:"string",enum:["pending","in_progress","completed"]},priority:{type:"string",enum:["high","medium","low"]}},required:["id","content","status"]}}},required:["todos"]},permissionLevel:"safe",async execute(o,e){let{todos:t}=o,n=zo();for(let r of t)n.set(r.id,r);return Br(),{content:Pn()}}};var Ds={name:"TodoRead",description:"Reads the current task list from the session.",inputSchema:{type:"object",properties:{},required:[]},permissionLevel:"safe",async execute(o,e){return {content:Pn()}}};var Ls={name:"BashOutput",description:"Reads accumulated stdout/stderr from a tracked background bash process.",inputSchema:{type:"object",properties:{process_id:{type:"string",description:'The ID of the tracked process (e.g. "bash_1")'},filter:{type:"string",description:"Optional regex; only matching lines are returned"}},required:["process_id"]},permissionLevel:"safe",async execute(o,e){let{process_id:t,filter:n}=o,r=
|
|
126
|
+
`)}var _s={name:"TodoWrite",description:"Stores or updates a task list in the current session.",inputSchema:{type:"object",properties:{todos:{type:"array",description:"Array of todo items to store/update",items:{type:"object",properties:{id:{type:"string"},content:{type:"string"},status:{type:"string",enum:["pending","in_progress","completed"]},priority:{type:"string",enum:["high","medium","low"]}},required:["id","content","status"]}}},required:["todos"]},permissionLevel:"safe",async execute(o,e){let{todos:t}=o,n=zo();for(let r of t)n.set(r.id,r);return Br(),{content:Pn()}}};var Ds={name:"TodoRead",description:"Reads the current task list from the session.",inputSchema:{type:"object",properties:{},required:[]},permissionLevel:"safe",async execute(o,e){return {content:Pn()}}};var Ls={name:"BashOutput",description:"Reads accumulated stdout/stderr from a tracked background bash process.",inputSchema:{type:"object",properties:{process_id:{type:"string",description:'The ID of the tracked process (e.g. "bash_1")'},filter:{type:"string",description:"Optional regex; only matching lines are returned"}},required:["process_id"]},permissionLevel:"safe",async execute(o,e){let{process_id:t,filter:n}=o,r=Ae.get(t);if(!r)return {content:`No tracked process with id "${t}". Use Bash with run_in_background:true to start one.`,isError:true};let s=Ae.drainOutput(t,n),i=s?.stdout??"",a=s?.stderr??"",c=[];return c.push(`Status: ${r.status}${r.exitCode!=null?` (exit ${r.exitCode})`:""}`),i&&c.push(`stdout:
|
|
125
127
|
${i}`),a&&c.push(`stderr:
|
|
126
128
|
${a}`),!i&&!a&&c.push("(no new output)"),{content:c.join(`
|
|
127
129
|
|
|
128
|
-
`)}}};var js={name:"KillShell",description:"Sends SIGTERM to a tracked background bash process.",inputSchema:{type:"object",properties:{process_id:{type:"string",description:'The ID of the process to kill (e.g. "bash_1")'}},required:["process_id"]},permissionLevel:"ask",async execute(o,e){let{process_id:t}=o,n=
|
|
130
|
+
`)}}};var js={name:"KillShell",description:"Sends SIGTERM to a tracked background bash process.",inputSchema:{type:"object",properties:{process_id:{type:"string",description:'The ID of the process to kill (e.g. "bash_1")'}},required:["process_id"]},permissionLevel:"ask",async execute(o,e){let{process_id:t}=o,n=Ae.get(t);return n?n.status!=="running"?{content:`Process ${t} already ${n.status}${n.exitCode!=null?` (exit ${n.exitCode})`:""}.`}:Ae.kill(t)?{content:`Killed process ${t} (pid: ${n.pid??"unknown"}).`}:{content:`Failed to kill process ${t}.`,isError:true}:{content:`No tracked process with id "${t}".`,isError:true}}};function Os(o,e){let t=[];if(t.push(`[Cell ${e}] (${o.cell_type})`),t.push(o.source.join("")),o.cell_type==="code"&&o.outputs&&o.outputs.length>0){t.push("--- Output ---");for(let n of o.outputs)if(n.text&&t.push(n.text.join("")),n.data)for(let[r,s]of Object.entries(n.data))t.push(`[${r}]`),t.push(s.join(""));}return t.join(`
|
|
129
131
|
`)}var Us={name:"NotebookRead",description:"Reads a Jupyter notebook (.ipynb) file and returns its cells with source and outputs.",inputSchema:{type:"object",properties:{notebook_path:{type:"string",description:"Absolute path to the .ipynb file"},cell_index:{type:"number",description:"Optional index of a specific cell to read"}},required:["notebook_path"]},permissionLevel:"safe",async execute(o,e){let{notebook_path:t,cell_index:n}=o,r;try{r=J(t,e.cwd);}catch(c){return {content:c.message,isError:true}}let s;try{s=readFileSync(r,"utf-8");}catch(c){return {content:`Error reading notebook: ${c.message}`,isError:true}}let i;try{i=JSON.parse(s);}catch(c){return {content:`Error parsing notebook JSON: ${c.message}`,isError:true}}return !i.cells||!Array.isArray(i.cells)?{content:"Invalid notebook: missing cells array",isError:true}:n!==void 0?n<0||n>=i.cells.length?{content:`Cell index ${n} out of range (0-${i.cells.length-1})`,isError:true}:{content:Os(i.cells[n],n)}:{content:i.cells.map((c,l)=>Os(c,l)).join(`
|
|
130
132
|
|
|
131
133
|
`)}}};function Ic(o,e){let t={cell_type:o,source:[e],metadata:{}};return o==="code"&&(t.outputs=[],t.execution_count=null),t}var Ns={name:"NotebookEdit",description:"Edits a Jupyter notebook (.ipynb) file by modifying, inserting, or deleting cells.",inputSchema:{type:"object",properties:{notebook_path:{type:"string",description:"Absolute path to the .ipynb file"},cell_index:{type:"number",description:"Index of the cell to edit, insert before, or delete"},new_source:{type:"string",description:"New source content for the cell (required for edit/insert)"},cell_type:{type:"string",description:"Cell type for insert (code, markdown, raw). Defaults to code."},action:{type:"string",enum:["edit","insert","delete"],description:"Action to perform (default: edit)"}},required:["notebook_path","cell_index"]},permissionLevel:"ask",async execute(o,e){let{notebook_path:t,cell_index:n,new_source:r,cell_type:s,action:i="edit"}=o,a;try{a=J(t,e.cwd);}catch(f){return {content:f.message,isError:true}}let c;try{c=readFileSync(a,"utf-8");}catch(f){return {content:`Error reading notebook: ${f.message}`,isError:true}}let l;try{l=JSON.parse(c);}catch(f){return {content:`Error parsing notebook JSON: ${f.message}`,isError:true}}if(!l.cells||!Array.isArray(l.cells))return {content:"Invalid notebook: missing cells array",isError:true};let p=l.cells.length;switch(i){case "edit":{if(n<0||n>=p)return {content:`Cell index ${n} out of range (0-${p-1})`,isError:true};if(r===void 0)return {content:"new_source is required for edit action",isError:true};l.cells[n].source=[r];break}case "insert":{if(n<0||n>p)return {content:`Cell index ${n} out of range for insert (0-${p})`,isError:true};if(r===void 0)return {content:"new_source is required for insert action",isError:true};let f=Ic(s||"code",r);l.cells.splice(n,0,f);break}case "delete":{if(n<0||n>=p)return {content:`Cell index ${n} out of range (0-${p-1})`,isError:true};l.cells.splice(n,1);break}default:return {content:`Unknown action: ${i}`,isError:true}}try{writeFileSync(a,JSON.stringify(l,null,2)+`
|
|
132
|
-
`,"utf-8");}catch(f){return {content:`Error writing notebook: ${f.message}`,isError:true}}return {content:`Cell ${n} ${i==="edit"?"edited":i==="insert"?"inserted":"deleted"} successfully (${l.cells.length} cells total)`}}};var Bs=null;function
|
|
134
|
+
`,"utf-8");}catch(f){return {content:`Error writing notebook: ${f.message}`,isError:true}}return {content:`Cell ${n} ${i==="edit"?"edited":i==="insert"?"inserted":"deleted"} successfully (${l.cells.length} cells total)`}}};var Bs=null;function qs(o){Bs=o;}var Hs={name:"Dispatch",description:"Launch a sub-agent to handle a complex task autonomously. The agent gets its own conversation context and can use tools.",inputSchema:{type:"object",properties:{prompt:{type:"string",description:"The task for the agent to perform"},description:{type:"string",description:"Short description of what the agent will do"},model:{type:"string",description:"Optional model override"},allowedTools:{type:"string",description:"Comma-separated list of allowed tools"},subagent_type:{type:"string",description:"Name of a registered named agent (from .arqzero/agents or plugin manifests)"}},required:["prompt"]},permissionLevel:"ask",async execute(o,e){let t=e.agentRunner??Bs;if(!t)return {content:"Agent runner is not configured. Cannot launch sub-agent.",isError:true};let{prompt:n,description:r,model:s,allowedTools:i,subagent_type:a}=o,c;if(a){let l=t.getAgent(a);if(!l)return {content:`Unknown subagent_type "${a}". Registered agents: ${t.listAgents().map(p=>p.name).join(", ")||"(none)"}`,isError:true};c=l;}else (i||r)&&(c={name:r??"task",description:r??"Ad-hoc task agent",allowedTools:i?i.split(",").map(l=>l.trim()).filter(Boolean):void 0});try{return {content:await t.run({prompt:n,definition:c,model:s})}}catch(l){return {content:`Sub-agent error: ${l instanceof Error?l.message:String(l)}`,isError:true}}}};var Fs=[ks,bs,ws,Ts,Ss,Cs,As,Es,Ms,$s,Is,_s,Ds,Ls,js,Us,Ns,Hs];var ko=class{connections=new Map;async connect(e,t){let n=new StdioClientTransport({command:t.command,args:t.args,env:{...process.env,...t.env}}),r=new Client({name:"arqzero",version:"0.1.0"});await r.connect(n);let{tools:s}=await r.listTools(),i=(s??[]).map(a=>({serverName:e,name:a.name,description:a.description??"",inputSchema:a.inputSchema??{}}));return this.connections.set(e,{serverName:e,client:r,tools:i}),i}async callTool(e,t,n){let r=this.connections.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);let s=await r.client.callTool({name:t,arguments:n}),i=[];if(Array.isArray(s.content))for(let a of s.content)typeof a=="object"&&a!==null&&"type"in a&&a.type==="text"&&"text"in a&&typeof a.text=="string"?i.push(a.text):i.push(JSON.stringify(a));else typeof s.content=="string"&&i.push(s.content);return {content:i.join(`
|
|
133
135
|
`)||"(no output)",isError:s.isError===true?true:void 0}}getAllTools(){let e=[];for(let t of this.connections.values())e.push(...t.tools);return e}async disconnect(e){let t=this.connections.get(e);if(t){try{await t.client.close();}catch{}this.connections.delete(e);}}async disconnectAll(){for(let e of [...this.connections.keys()])await this.disconnect(e);}isConnected(e){return this.connections.has(e)}};function Lc(o,e){return {name:`mcp__${o.serverName}__${o.name}`,description:`[MCP: ${o.serverName}] ${o.description}`,inputSchema:o.inputSchema,permissionLevel:"ask",async execute(n,r){try{let s=n??{},i=await e.callTool(o.serverName,o.name,s);return {content:i.content,isError:i.isError}}catch(s){return {content:`MCP tool error: ${s instanceof Error?s.message:String(s)}`,isError:true}}}}}function Ws(o,e){let t=o.getAllTools(),n=0;for(let r of t){let s=Lc(r,o);try{e.register(s),n++;}catch{}}return n}function Ks(o,e,t){let n=e.getIndex();if(!n)return o;let r=(2e3)*4,s=`
|
|
134
136
|
|
|
135
137
|
## Persistent Memory
|
|
136
138
|
|
|
137
|
-
${n}`;return s.length>r&&(s=s.slice(0,r)),o+s}function zs(o,e){let t=[];t.push("You are ArqZero, an AI engineering agent running in the terminal. You follow structured engineering methodologies -- not ad-hoc coding. When a methodology capability is active (TDD, debugging, code review, planning), follow its steps precisely."),t.push("You have access to tools for reading, writing, editing files, running commands, searching, and more."),t.push(`Current working directory: ${o}`),t.push(`Platform: ${process.platform}`),t.push(`Date: ${new Date().toISOString().split("T")[0]}`),t.push(""),t.push("Do not use emojis in your responses. Use plain text formatting only. Communicate clearly and directly without decorative characters."),t.push(""),t.push("You operate with an active capability system. Before each response, capabilities matching your current task have been identified and injected below. Follow them in order: methodology (how to work) > architecture (structural constraints) > domain (technology specifics) > guardrails (quality checks you must pass)."),t.push(""),t.push("When a Verification Gate section appears, you MUST complete those steps before telling the user the task is done. Skipping verification is never acceptable."),t.push(""),t.push("When a Parallelization section appears, evaluate whether using the Dispatch tool would improve throughput. Use it when sub-tasks are independent."),t.push(""),t.push("## Subagent Dispatch"),t.push(""),t.push("You can spawn autonomous sub-agents using the Dispatch tool for parallel work. Use it when:"),t.push("- The task involves 3+ independent files or modules"),t.push("- The user asks you to work on multiple things simultaneously"),t.push("- An orchestration capability's Parallelization section recommends it"),t.push("- You need to research and implement at the same time"),t.push(""),t.push("When dispatching, create detailed task-specific prompts for each agent. Include:"),t.push("- The specific files to read/modify"),t.push("- The exact changes to make"),t.push("- Test commands to verify the work"),t.push("- Context from the current conversation that the sub-agent needs"),t.push(""),t.push("Show each agent's purpose briefly before dispatching. After all agents complete, verify the combined result.");let n=
|
|
138
|
-
`);return e&&(s=Ks(s,e)),s}Z();var dt=class{baseDir;constructor(e){this.baseDir=e??
|
|
139
|
+
${n}`;return s.length>r&&(s=s.slice(0,r)),o+s}function zs(o,e){let t=[];t.push("You are ArqZero, an AI engineering agent running in the terminal. You follow structured engineering methodologies -- not ad-hoc coding. When a methodology capability is active (TDD, debugging, code review, planning), follow its steps precisely."),t.push("You have access to tools for reading, writing, editing files, running commands, searching, and more."),t.push(`Current working directory: ${o}`),t.push(`Platform: ${process.platform}`),t.push(`Date: ${new Date().toISOString().split("T")[0]}`),t.push(""),t.push("Do not use emojis in your responses. Use plain text formatting only. Communicate clearly and directly without decorative characters."),t.push(""),t.push("You operate with an active capability system. Before each response, capabilities matching your current task have been identified and injected below. Follow them in order: methodology (how to work) > architecture (structural constraints) > domain (technology specifics) > guardrails (quality checks you must pass)."),t.push(""),t.push("When a Verification Gate section appears, you MUST complete those steps before telling the user the task is done. Skipping verification is never acceptable."),t.push(""),t.push("When a Parallelization section appears, evaluate whether using the Dispatch tool would improve throughput. Use it when sub-tasks are independent."),t.push(""),t.push("## Subagent Dispatch"),t.push(""),t.push("You can spawn autonomous sub-agents using the Dispatch tool for parallel work. Use it when:"),t.push("- The task involves 3+ independent files or modules"),t.push("- The user asks you to work on multiple things simultaneously"),t.push("- An orchestration capability's Parallelization section recommends it"),t.push("- You need to research and implement at the same time"),t.push(""),t.push("When dispatching, create detailed task-specific prompts for each agent. Include:"),t.push("- The specific files to read/modify"),t.push("- The exact changes to make"),t.push("- Test commands to verify the work"),t.push("- Context from the current conversation that the sub-agent needs"),t.push(""),t.push("Show each agent's purpose briefly before dispatching. After all agents complete, verify the combined result.");let n=Ce.join(o,"ARQZERO.md");if(z$1.existsSync(n))try{let i=z$1.readFileSync(n,"utf-8");t.push(""),t.push("## Project Instructions (from ARQZERO.md)"),t.push(i);}catch{}let r=Ce.dirname(o);for(let i=0;i<3;i++){let a=Ce.join(r,"ARQZERO.md");if(z$1.existsSync(a)&&a!==n){try{let l=z$1.readFileSync(a,"utf-8");t.push(""),t.push(`## Project Instructions (from ${Ce.relative(o,a)})`),t.push(l);}catch{}break}let c=Ce.dirname(r);if(c===r)break;r=c;}let s=t.join(`
|
|
140
|
+
`);return e&&(s=Ks(s,e)),s}Z();var dt=class{baseDir;constructor(e){this.baseDir=e??Ce.join(I(),"memory");}save(e){this.ensureDir();let t=this.slugify(e.name),n=`${e.type}_${t}.md`,r=Ce.join(this.baseDir,n),s=["---",`name: ${e.name}`,`description: ${e.description}`,`type: ${e.type}`,"---"].join(`
|
|
139
141
|
`);return z$1.writeFileSync(r,`${s}
|
|
140
142
|
|
|
141
|
-
${e.content}`,"utf-8"),this.updateIndex(),r}load(e){return this.loadAll().find(n=>n.name===e)??null}loadAll(){if(!z$1.existsSync(this.baseDir))return [];let e=z$1.readdirSync(this.baseDir).filter(n=>n.endsWith(".md")&&n!=="MEMORY.md"),t=[];for(let n of e){let r=
|
|
143
|
+
${e.content}`,"utf-8"),this.updateIndex(),r}load(e){return this.loadAll().find(n=>n.name===e)??null}loadAll(){if(!z$1.existsSync(this.baseDir))return [];let e=z$1.readdirSync(this.baseDir).filter(n=>n.endsWith(".md")&&n!=="MEMORY.md"),t=[];for(let n of e){let r=Ce.join(this.baseDir,n),s=this.parseFile(r);s&&t.push(s);}return t}remove(e){let t=this.load(e);return t?(z$1.unlinkSync(t.filePath),this.updateIndex(),true):false}search(e){let t=e.toLowerCase();return this.loadAll().filter(n=>n.name.toLowerCase().includes(t)||n.description.toLowerCase().includes(t))}getIndex(){let e=Ce.join(this.baseDir,"MEMORY.md");return z$1.existsSync(e)?z$1.readFileSync(e,"utf-8"):""}updateIndex(){this.ensureDir();let e=this.loadAll();if(e.length===0){let n=Ce.join(this.baseDir,"MEMORY.md");z$1.existsSync(n)&&z$1.unlinkSync(n);return}let t=["# ArqZero Memory Index",""];for(let n of e)t.push(`- **${n.name}** (${n.type}): ${n.description}`);t.push(""),z$1.writeFileSync(Ce.join(this.baseDir,"MEMORY.md"),t.join(`
|
|
142
144
|
`),"utf-8");}ensureDir(){z$1.existsSync(this.baseDir)||z$1.mkdirSync(this.baseDir,{recursive:true});}slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}parseFile(e){try{let n=z$1.readFileSync(e,"utf-8").match(/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/);if(!n)return null;let r=n[1],s=n[2].trimEnd(),i=this.extractField(r,"name"),a=this.extractField(r,"description"),c=this.extractField(r,"type");return !i||!a||!c?null:{name:i,description:a,type:c,content:s,filePath:e}}catch{return null}}extractField(e,t){let n=e.match(new RegExp(`^${t}:\\s*(.+)$`,"m"));return n?n[1].trim():null}};var wo=class{commands=new Map;register(e){this.commands.set(e.name,e);}has(e){return this.commands.has(e)}get(e){return this.commands.get(e)}getAll(){return [...this.commands.values()]}isSlashCommand(e){return e.startsWith("/")}parse(e){let t=e.trim(),n=t.indexOf(" ");if(n===-1)return {name:t,args:""};let r=t.slice(0,n),s=t.slice(n+1).trim();return {name:r,args:s}}};Z();function Gs(o,e,t={restoreCode:true,restoreConversation:true}){let n=o.getAfter(e),r={restoredFiles:[],checkpointsRewound:n.length};if(t.restoreCode!==false){let s=new Map;for(let i of n)s.has(i.filePath)||s.set(i.filePath,i.beforeContent);for(let[i,a]of s)a===null?z$1.existsSync(i)&&z$1.unlinkSync(i):z$1.writeFileSync(i,a,"utf-8"),r.restoredFiles.push(i);}return r}var jc={name:"/reload-plugins",description:"Reload all plugins from disk",async execute(o,e){let t=e.pluginManager;if(!t)return "Plugin manager not available.";let n=e.pluginLoader;return n?(await t.reload(n),`Reloaded ${t.getAll().length} plugin(s).`):"Plugin loader not available."}},Oc={name:"/plugin",description:"Manage plugins (disable/enable <name>, or list)",async execute(o,e){let t=e.pluginManager;if(!t)return "Plugin manager not available.";if(!o){let i=t.getAll();return i.length===0?"No plugins registered.":`Plugins:
|
|
143
145
|
${i.map(c=>` ${c.enabled?"[on] ":"[off]"} ${c.manifest.name} v${c.manifest.version} - ${c.manifest.description}`).join(`
|
|
144
|
-
`)}`}let n=o.trim().split(/\s+/),r=n[0],s=n[1];return r==="disable"?s?t.disable(s)?`Plugin "${s}" disabled.`:`Plugin "${s}" not found.`:"Usage: /plugin disable <name>":r==="enable"?s?t.enable(s)?`Plugin "${s}" enabled.`:`Plugin "${s}" not found.`:"Usage: /plugin enable <name>":`Unknown subcommand "${r}". Use: disable, enable, or no args to list.`}},Vs=[jc,Oc];
|
|
146
|
+
`)}`}let n=o.trim().split(/\s+/),r=n[0],s=n[1];return r==="disable"?s?t.disable(s)?`Plugin "${s}" disabled.`:`Plugin "${s}" not found.`:"Usage: /plugin disable <name>":r==="enable"?s?t.enable(s)?`Plugin "${s}" enabled.`:`Plugin "${s}" not found.`:"Usage: /plugin enable <name>":`Unknown subcommand "${r}". Use: disable, enable, or no args to list.`}},Vs=[jc,Oc];Ze();var Uc={name:"/help",description:"List all available commands",async execute(o,e){let t=e.commandRegistry?.getAll()??[];return t.length===0?"No commands available.":`Available commands:
|
|
145
147
|
${t.map(r=>` ${r.name} ${r.description}`).join(`
|
|
146
148
|
`)}`}},Nc={name:"/model",description:"Show or change current model",async execute(o,e){if(!o){let r=e.config.model,s=["Available models:"];for(let i of te){let a=i.id===r?" (active)":"";s.push(` ${i.displayName} [${i.tier}] \u2014 ${i.description}${a}`);}return s.push(""),s.push("Auto-routing: strong tasks auto-upgrade to PRIMUS"),s.push("Usage: /model <name> (e.g. /model primus)"),s.join(`
|
|
147
|
-
`)}let t=o.trim(),n=
|
|
149
|
+
`)}let t=o.trim(),n=_e(t);if(!n){let r=t.split(/\s+/)[0];n=_e(r);}if(!n){let r=te.map(s=>s.displayName.toLowerCase()).join(", ");return `Unknown model "${t}". Available: ${r}`}return e.onModelChange?.(n.id),`Model set to: ${n.displayName} [${n.tier}]`}},Bc={name:"/clear",description:"Clear conversation history",async execute(o,e){return e.onClear?.(),"Conversation cleared."}},qc={name:"/compress",description:"Trigger manual compaction",async execute(o,e){return e.onCompact?.(),"Compaction triggered."}},Hc={name:"/config",description:"Show current configuration",async execute(o,e){return dn(e.config)}},Fc={name:"/quit",description:"Exit the CLI",async execute(o,e){return e.onQuit?.(),null}},Wc={name:"/exit",description:"Exit the CLI (alias for /quit)",async execute(o,e){return e.onQuit?.(),null}},Kc={name:"/skill",description:"List skills or show skill details",async execute(o,e){let t=e.skillRegistry;if(!t)return "No skills available (skill registry not configured).";if(!o){let i=t.getAll();return i.length===0?"No skills registered.":`Available skills:
|
|
148
150
|
${i.map(c=>` ${c.manifest.command} ${c.manifest.description}`).join(`
|
|
149
151
|
`)}`}let n=o.startsWith("/")?o:`/${o}`,r=t.get(n);return r?[`Name: ${r.manifest.name}`,`Command: ${r.manifest.command}`,`Description: ${r.manifest.description}`,`Version: ${r.manifest.version}`,`Triggers: ${r.manifest.triggers.join(", ")}`].join(`
|
|
150
152
|
`):`Skill "${o}" not found.`}},zc={name:"/memory",description:"List memories or show a specific memory",async execute(o,e){let t=new dt;if(!o){let r=t.loadAll();return r.length===0?"No memories stored.":`Stored memories:
|
|
@@ -160,65 +162,65 @@ ${c}`}},Vc={name:"/context",description:"Show context window usage",async execut
|
|
|
160
162
|
Tokens: ${r} input / ${s} output`}},Zc={name:"/think",description:"Set reasoning effort (low/medium/high)",async execute(o,e){let t=["low","medium","high"],n=o.trim().toLowerCase();return n?t.includes(n)?(e.onEffortChange?.(n),`Effort set to: ${n}`):`Invalid effort level: "${n}". Use: low, medium, high`:`Current effort: ${e.effort??"medium"}`}},Qc={name:"/permissions",description:"Show current permission rules",async execute(o,e){let t=e.config.permissions,n=[`Default mode: ${t.defaultMode}`,`Always allow: ${t.alwaysAllow.length>0?t.alwaysAllow.join(", "):"(none)"}`,`Always deny: ${t.alwaysDeny.length>0?t.alwaysDeny.join(", "):"(none)"}`],r=Object.keys(t.trustedPatterns);if(r.length>0){n.push("Trusted patterns:");for(let s of r)n.push(` ${s}: ${t.trustedPatterns[s].join(", ")}`);}else n.push("Trusted patterns: (none)");return n.join(`
|
|
161
163
|
`)}},Yc={name:"/tools",description:"List all available tools",async execute(o,e){let t=e.toolRegistry;if(!t)return "Tool registry not available.";let n=t.getAll();if(n.length===0)return "No tools registered.";let r=n.map(s=>` ${s.name} [${s.permissionLevel}] ${s.description}`);return `Available tools (${n.length}):
|
|
162
164
|
${r.join(`
|
|
163
|
-
`)}`}};function Xc(o){let e=Math.floor(o/1e3),t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return `${t}h ${n}m ${r}s`}function vo(o){return o>=1e6?`${(o/1e6).toFixed(1)}m`:o>=1e3?`${(o/1e3).toFixed(1)}k`:o.toString()}function En(o,e=50){let t=Math.min(e,Math.round(o/100*e)),n=e-t;return "\u2588".repeat(t)+" ".repeat(n)}function Mn(o){let t=new Date(o).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),n=Intl.DateTimeFormat().resolvedOptions().timeZone;return `${t} (${n})`}var el={name:"/status",description:"Session usage, quotas, and reset times",async execute(o,e){let t=Dr(),n=
|
|
165
|
+
`)}`}};function Xc(o){let e=Math.floor(o/1e3),t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return `${t}h ${n}m ${r}s`}function vo(o){return o>=1e6?`${(o/1e6).toFixed(1)}m`:o>=1e3?`${(o/1e3).toFixed(1)}k`:o.toString()}function En(o,e=50){let t=Math.min(e,Math.round(o/100*e)),n=e-t;return "\u2588".repeat(t)+" ".repeat(n)}function Mn(o){let t=new Date(o).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),n=Intl.DateTimeFormat().resolvedOptions().timeZone;return `${t} (${n})`}var el={name:"/status",description:"Session usage, quotas, and reset times",async execute(o,e){let t=Dr(),n=D(),r=[];if(r.push(` Total duration (wall): ${Xc(t.durationMs)}`),r.push(` Total code changes: ${t.linesAdded} lines added, ${t.linesRemoved} lines removed`),t.perModel.length>0){r.push(" Usage by model:");let p=Math.max(...t.perModel.map(u=>(_e(u.modelId)?.displayName??u.modelId).length));for(let u of t.perModel){let f=_e(u.modelId)?.displayName??u.modelId,g=vo(u.inputTokens),d=vo(u.outputTokens),y=vo(u.cacheReadTokens),b=vo(u.cacheWriteTokens),R=(u.costMicrocents/1e6).toFixed(2),L=" ".repeat(p-f.length);r.push(` ${L}${f}: ${g} input, ${d} output, ${y} cache read, ${b} cache write ($${R})`);}}if(r.push(""),!n)return r.push(" Sign in for quota tracking \u2014 `arqzero login`"),r.join(`
|
|
164
166
|
`);let s=await Er();if(!s)return r.push(" (could not fetch quota \u2014 backend unreachable)"),r.join(`
|
|
165
167
|
`);let i=s.enso["5h"].percent>=s.primus["5h"].percent?{bucket:"enso",entry:s.enso["5h"]}:{bucket:"primus",entry:s.primus["5h"]};r.push(` Current session [${Ir(i.bucket)}]`),r.push(` ${En(i.entry.percent)} ${i.entry.percent}% used`),r.push(` Resets ${Mn(i.entry.resetsAt)} (${Qt(i.entry.resetsAt)})`),r.push("");let a=s.enso.week.used+s.primus.week.used,c=s.enso.week.cap+s.primus.week.cap,l=c===0?0:Math.min(100,Math.round(a/c*100));return r.push(" Current week (all models)"),r.push(` ${En(l)} ${l}% used`),r.push(` Resets ${Mn(s.enso.week.resetsAt)} (${Qt(s.enso.week.resetsAt)})`),r.push(""),r.push(" Current week (Enso only)"),r.push(` ${En(s.enso.week.percent)} ${s.enso.week.percent}% used`),r.push(` Resets ${Mn(s.enso.week.resetsAt)} (${Qt(s.enso.week.resetsAt)})`),r.join(`
|
|
166
|
-
`)}},tl={name:"/whoami",description:"Show signed-in account (email + tier)",async execute(o,e){let t=
|
|
167
|
-
`)}},nl={name:"/sessions",description:"List or revoke server-side device sessions",async execute(o,e){let t=
|
|
168
|
+
`)}},tl={name:"/whoami",description:"Show signed-in account (email + tier)",async execute(o,e){let t=D();return t?`${t.email} [${t.tier}]`:"Not signed in. Run `arqzero login` or `/login <email>`."}},ol={name:"/account",description:"Show account details: profile, tier, usage, active devices",async execute(o,e){let t=D();if(!t)return "Not signed in. Run `arqzero login` to view account details.";let[n,r,s]=await Promise.all([br(t.accessToken).catch(()=>null),ke(t.accessToken).catch(()=>null),Gt(t.accessToken).catch(()=>null)]),i=[];i.push("Profile"),i.push(` Email: ${n?.email??t.email}`),n?.displayName&&i.push(` Display name: ${n.displayName}`),i.push(""),i.push("Subscription");let a=r?.tier??t.tier;if(i.push(` Tier: ${a}`),r?.status&&i.push(` Status: ${r.status}`),r?.periodEnd){let c=new Date(r.periodEnd);i.push(` Renews: ${c.toLocaleDateString()}`);}if(r){let c=r.dailyCap===null?"unlimited":r.dailyCap.toString();i.push(` Daily usage: ${r.dailyUsage} / ${c}`);}if(i.push(""),i.push("Active devices"),!s||s.length===0)i.push(" (none \u2014 could not fetch)");else {for(let c of s){let l=new Date(c.createdAt).toLocaleDateString(),p=c.deviceLabel??"(unnamed device)",u=c.machineId?` [${c.machineId}]`:"";i.push(` ${c.id.slice(0,8)} ${p}${u} ${l}`);}i.push(""),i.push(" Revoke a device: /sessions revoke <id-prefix>");}return i.join(`
|
|
169
|
+
`)}},nl={name:"/sessions",description:"List or revoke server-side device sessions",async execute(o,e){let t=D();if(!t)return "Not signed in. Run `arqzero login` first.";let n=o.trim().split(/\s+/).filter(Boolean),r=n[0]?.toLowerCase()??"";if(!r||r==="list"){let s=await Gt(t.accessToken).catch(a=>({error:a instanceof Error?a.message:String(a)}));if(!Array.isArray(s))return `Could not fetch sessions: ${s.error}`;if(s.length===0)return "No active server-side sessions.";let i=[`Active sessions (${s.length}):`];for(let a of s){let c=new Date(a.createdAt).toLocaleString(),l=a.deviceLabel??"(unnamed)",p=a.machineId?` [${a.machineId}]`:"";i.push(` ${a.id.slice(0,8)} ${l}${p} ${c}`);}return i.push(""),i.push("Revoke: /sessions revoke <id-prefix>"),i.join(`
|
|
168
170
|
`)}if(r==="revoke"){let s=n[1];if(!s)return "Usage: /sessions revoke <id-prefix>";let i=await Gt(t.accessToken).catch(()=>null);if(!i)return "Could not fetch sessions to match against.";let a=i.find(c=>c.id.startsWith(s));if(!a)return `No session matched prefix "${s}".`;try{return await wr(t.accessToken,a.id),`Revoked session ${a.id.slice(0,8)} (${a.deviceLabel??"unnamed"}).`}catch(c){return `Revoke failed: ${c instanceof Error?c.message:String(c)}`}}return `Unknown subcommand "${r}". Try: list, revoke <id-prefix>`}},rl={name:"/export",description:"Export conversation to a markdown file",async execute(o,e){let t=e.messages??[];if(t.length===0)return "No messages to export.";let n=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),r=o.trim()||`arqzero-export-${n}.md`,s=["# ArqZero Conversation Export","",`Exported: ${new Date().toISOString()}`,""];for(let i of t){let a=i.role==="user"?"User":i.role==="assistant"?"Assistant":i.role,c=typeof i.content=="string"?i.content:i.content.filter(l=>l.type==="text"&&l.text).map(l=>l.text).join(`
|
|
169
171
|
`);c&&s.push(`## ${a}`,"",c,"");}return z$1.writeFileSync(r,s.join(`
|
|
170
|
-
`),"utf-8"),`Conversation exported to: ${r}`}},sl={name:"/check",description:"Check installation health",async execute(o,e){let t=["ArqZero Health Check",""],n=I(),r=
|
|
171
|
-
`)}},il={name:"/setup",description:"Generate ARQZERO.md in current directory",async execute(o,e){let t=
|
|
172
|
-
`);return z$1.writeFileSync(t,n,"utf-8"),`Created ARQZERO.md in ${process.cwd()}`}},al={name:"/agents",description:"List custom agents",async execute(o,e){let t=
|
|
172
|
+
`),"utf-8"),`Conversation exported to: ${r}`}},sl={name:"/check",description:"Check installation health",async execute(o,e){let t=["ArqZero Health Check",""],n=I(),r=Ce.join(n,"config.json");t.push(`Config dir: ${z$1.existsSync(n)?"OK":"MISSING"} (${n})`),t.push(`Config file: ${z$1.existsSync(r)?"OK":"MISSING"}`),t.push(`Provider: ${e.config.provider}`);let s=qe(e.config,e.config.provider),i=s.length===0?"MISSING":s.length===1?"set":`${s.length} keys (fallback chain)`;t.push(`API key: ${i}`);let a=e.toolRegistry?.getAll().length??0;t.push(`Tools: ${a} registered`);let c=Object.keys(e.config.mcpServers).length;return t.push(`MCP servers: ${c} configured`),t.join(`
|
|
173
|
+
`)}},il={name:"/setup",description:"Generate ARQZERO.md in current directory",async execute(o,e){let t=Ce.join(process.cwd(),"ARQZERO.md");if(z$1.existsSync(t))return `ARQZERO.md already exists in ${process.cwd()}. Not overwriting.`;let n=["# Project Instructions","","## Overview","Describe your project here.","","## Conventions","- Add coding conventions and patterns","","## Important Files","- List key files and their purposes","","## Notes","- Additional context for the AI assistant",""].join(`
|
|
174
|
+
`);return z$1.writeFileSync(t,n,"utf-8"),`Created ARQZERO.md in ${process.cwd()}`}},al={name:"/agents",description:"List custom agents",async execute(o,e){let t=Ce.join(I(),"agents");if(!z$1.existsSync(t))return "No agents directory found. Create ~/.arqzero/agents/ to add custom agents.";let n;try{n=z$1.readdirSync(t,{withFileTypes:!0});}catch{return "Could not read agents directory."}let r=n.filter(i=>i.isDirectory());if(r.length===0)return "No agents found in ~/.arqzero/agents/";let s=r.map(i=>` ${i.name}`);return `Available agents (${r.length}):
|
|
173
175
|
${s.join(`
|
|
174
176
|
`)}`}},cl={name:"/loop",description:"Create recurring prompt execution",async execute(o,e){let t=e.cronManager;if(!t)return "Loop manager not available.";let n=o.trim();if(!n||n==="list"){let l=t.list();if(l.length===0)return "No active loops.";let p=l.map(u=>` #${u.id} every ${u.intervalMs/1e3}s "${u.prompt}"`);return `Active loops (${l.length}):
|
|
175
177
|
${p.join(`
|
|
176
|
-
`)}`}if(n==="stop")return t.stopAll(),"All loops stopped.";let r=n.indexOf(" ");if(r===-1)return "Usage: /loop <interval> <prompt> (e.g., /loop 5m check build)";let s=n.slice(0,r),i=n.slice(r+1).trim(),a=
|
|
177
|
-
`)}if(n==="resume"){if(!r)return "Usage: /session resume <session-id>";let i=kt().find(c=>c.startsWith(r));if(!i)return `Session "${r}" not found.`;let a
|
|
178
|
+
`)}`}if(n==="stop")return t.stopAll(),"All loops stopped.";let r=n.indexOf(" ");if(r===-1)return "Usage: /loop <interval> <prompt> (e.g., /loop 5m check build)";let s=n.slice(0,r),i=n.slice(r+1).trim(),a=qr(s);return a===null?`Invalid interval: "${s}". Use format like 30s, 5m, 2h`:i?`Loop #${t.add(a,i,async()=>{e.onSubmit&&await e.onSubmit(i);})} created: "${i}" every ${s}`:"Usage: /loop <interval> <prompt>"}},ll={name:"/vim",description:"Toggle vim mode",async execute(o,e){let t=!(e.vimMode??false);return e.onVimToggle?.(t),`Vim mode: ${t?"enabled":"disabled"}`}},pl={name:"/session",description:"Manage sessions \u2014 list, resume, delete",async execute(o,e){let t=o.trim().split(/\s+/),n=t[0]?.toLowerCase()??"",r=t[1]??"";if(!n||n==="list"){let s=No();if(s.length===0)return "No saved sessions.";let i=["Sessions (newest first):"];for(let a of s.slice(0,20)){let c=a.lastModified.toLocaleDateString(),l=a.lastModified.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),p=a.sizeBytes<1024?`${a.sizeBytes}B`:`${(a.sizeBytes/1024).toFixed(1)}KB`,u=a.hasCompaction?" [compacted]":"";i.push(` ${a.id.slice(0,8)} ${c} ${l} ${a.messageCount} msgs ${p}${u}`);}return s.length>20&&i.push(` ... and ${s.length-20} more`),i.push(""),i.push("Usage: /session resume <id> | /session delete <id>"),i.join(`
|
|
179
|
+
`)}if(n==="resume"){if(!r)return "Usage: /session resume <session-id>";let i=kt().find(c=>c.startsWith(r));if(!i)return `Session "${r}" not found.`;let a=Ie(i);return !a||a.length===0?`Session "${i}" is empty.`:`To resume session ${i.slice(0,8)}, restart with:
|
|
178
180
|
arqzero --resume ${i}`}if(n==="delete"){if(!r)return "Usage: /session delete <session-id>";let i=kt().find(c=>c.startsWith(r));return i?Uo(i)?`Session ${i.slice(0,8)} deleted.`:"Failed to delete session.":`Session "${r}" not found.`}if(n==="current"){let s=e.sessionId??"unknown",i=e.messages?.length??0;return `Current session: ${s.slice(0,8)}
|
|
179
|
-
Messages: ${i}`}return `Unknown subcommand "${n}". Try: list, resume, delete, current`}},
|
|
181
|
+
Messages: ${i}`}return `Unknown subcommand "${n}". Try: list, resume, delete, current`}},We=null;function ul(o){return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o)}var dl={name:"/login",description:"Log in \u2014 `/login <email>` then `/login <code>`",async execute(o,e){let t=D(),n=o.trim();if(!n)return t?`Logged in as ${t.email} (tier: ${t.tier}). Use /logout to sign out, then /login <email> to switch accounts.`:We?`Awaiting verification code for ${We}. Run: /login <code>`:`Usage:
|
|
180
182
|
/login <email> \u2014 send a one-time code to your inbox
|
|
181
|
-
/login <code> \u2014 verify the code (after step 1)`;if(ul(n)){if(t&&t.email===n)return `Already logged in as ${n}.`;try{await Wt(n);}catch(i){return `Could not send code: ${i instanceof Error?i.message:String(i)}`}return
|
|
183
|
+
/login <code> \u2014 verify the code (after step 1)`;if(ul(n)){if(t&&t.email===n)return `Already logged in as ${n}.`;try{await Wt(n);}catch(i){return `Could not send code: ${i instanceof Error?i.message:String(i)}`}return We=n,`Code sent to ${n}. Check your inbox, then run: /login <code>`}if(!We)return "No login in progress. Start with: /login <email>";let r=await Mt(),s=`${yo.userInfo().username}@${yo.hostname()}`;try{let i=await Kt(We,n,r,s),a=i.tier??"free";try{a=(await ke(i.accessToken)).tier;}catch{}xe({accessToken:i.accessToken,refreshToken:i.refreshToken,tier:a,email:i.user.email,expiresAt:Date.now()+i.expiresIn*1e3,lastValidated:Date.now()});let c=We;return We=null,`Signed in as ${c} (tier: ${a}). Restart ArqZero to apply tier-gated features.`}catch(i){return `Verification failed: ${i instanceof Error?i.message:String(i)}. Try again: /login <code> (or restart with /login <email>).`}}},ml={name:"/logout",description:"Log out of ArqZero",async execute(o,e){let t=D();return t?(await zt(t.refreshToken),Ht(),"Logged out successfully."):"Not logged in."}},gl={name:"/upgrade",description:"Upgrade to ArqZero Pro",async execute(o,e){let t=D();if(!t)return "Log in first: arqzero login";if(t.tier==="pro")return "Already on Pro.";if(t.tier==="team")return "Already on Team (includes Pro).";try{let n=o.trim().toLowerCase()==="team"?"team":"pro",r=await vr(t.accessToken,n),{execFile:s}=await import('child_process');return process.platform==="win32"?s("cmd",["/c","start","",r]):process.platform==="darwin"?s("open",[r]):s("xdg-open",[r]),`Opening checkout in browser...
|
|
182
184
|
If it doesn't open: ${r}`}catch(n){return `Upgrade failed: ${n.message}
|
|
183
|
-
Visit https://arqzero.dev/pricing`}}},fl={name:"/provider",description:"List or switch the active LLM provider",async execute(o,e){let t=o.trim().split(/\s+/).filter(Boolean),n=t[0]?.toLowerCase();if(!n||n==="list"){let i=["Available providers:",""];for(let a of
|
|
184
|
-
`)}if(n==="remove"){let i=t[1];return !i||!
|
|
185
|
+
Visit https://arqzero.dev/pricing`}}},fl={name:"/provider",description:"List or switch the active LLM provider",async execute(o,e){let t=o.trim().split(/\s+/).filter(Boolean),n=t[0]?.toLowerCase();if(!n||n==="list"){let i=["Available providers:",""];for(let a of ct()){let c=Ne[a],l=qe(e.config,a),p=l.length===0?"no key":l.length===1?"key set":`${l.length} keys`,u=a===e.config.provider?" (active)":"";i.push(` ${a.padEnd(12)} ${c.displayName.padEnd(24)} [${p}]${u}`);}return i.push(""),i.push("Switch: /provider <id>"),i.push("Add key: /provider set <id> <key> [<extra-keys for openrouter>]"),i.push("Remove: /provider remove <id>"),i.push(""),i.push("Changes save immediately. Restart ArqZero to load the new provider."),i.join(`
|
|
186
|
+
`)}if(n==="remove"){let i=t[1];return !i||!Be(i)?"Usage: /provider remove <id>":i===e.config.provider?`Cannot remove keys for active provider "${i}". Switch first.`:(delete e.config.apiKeys[i],Se(e.config),`Removed keys for ${i}.`)}if(n==="set"||n==="add"){let i=t[1],a=t.slice(2).filter(Boolean);if(!i||!Be(i)||a.length===0)return `Usage: /provider ${n} <id> <key> [<key2> ...]`;let c=Y(i);if(n==="add"){if(!c.supportsKeyFallback)return `Provider "${i}" does not support multiple keys. Use /provider set instead.`;let p=[...qe(e.config,i),...a];e.config.apiKeys[i]=p;}else e.config.apiKeys[i]=c.supportsKeyFallback?a:a[0];return e.config.provider=i,i==="fireworks"&&(e.config.fireworksApiKey=a[0]),Se(e.config),`Provider set to ${c.displayName}. Restart ArqZero to apply.`}let r=n;if(!Be(r))return `Unknown provider "${r}". Run /provider to see available options.`;let s=Y(r);return s.requiresKey&&qe(e.config,r).length===0?`No API key for ${s.displayName}. Add one with: /provider set ${r} <key>`:(e.config.provider=r,Se(e.config),`Provider set to ${s.displayName}. Restart ArqZero to apply.`)}},Zs=[Uc,Nc,Bc,qc,Hc,Fc,Wc,Kc,zc,Gc,Vc,Jc,Zc,Qc,Yc,el,rl,sl,il,al,cl,ll,pl,dl,ml,tl,ol,nl,gl,fl,...Vs];function kl(){return "2.1.0-beta.1"}function Ys(o){let e=new Command;e.name("arqzero").description("AI-powered coding assistant CLI").version(kl()).option("-p, --print <prompt>","Run in headless mode with the given prompt").option("-c, --continue","Continue the last session").option("--resume <session-id>","Resume a specific session").option("--model <model>","Override the model").option("--verbose","Enable verbose output").option("--allowedTools <tools>","Comma-separated list of allowed tools").option("--output-format <format>","Output format: text, json, or stream-json").option("--auto-approve","Skip all permission checks").option("--worktree <name>","Use a named worktree").argument("[subcommand]","Optional subcommand: 'configure', 'login', or 'logout'").exitOverride().configureOutput({writeOut:s=>{process.stdout.write(s);},writeErr:()=>{}});try{e.parse(o??[],{from:"user"});}catch(s){return (s?.code==="commander.version"||s?.code==="commander.helpDisplayed")&&process.exit(0),{}}let t=e.opts(),n=e.args[0],r={};return (n==="configure"||n==="login"||n==="logout")&&(r.subcommand=n),t.print!==void 0&&(r.print=t.print),t.continue!==void 0&&(r.continue=t.continue),t.resume!==void 0&&(r.resume=t.resume),t.model!==void 0&&(r.model=t.model),t.verbose!==void 0&&(r.verbose=t.verbose),t.allowedTools!==void 0&&(r.allowedTools=t.allowedTools),t.outputFormat!==void 0&&(r.outputFormat=t.outputFormat),t.autoApprove!==void 0&&(r.autoApprove=t.autoApprove),t.worktree!==void 0&&(r.worktree=t.worktree),r}async function Xs(o){let{prompt:e,provider:t,config:n,registry:r,systemPrompt:s,outputFormat:i,hooks:a,checkpointStore:c}=o,l;n.permissions.defaultMode==="trust"?(process.stderr.write(`\u26A0 Headless mode: auto-approving prompts (trust mode)
|
|
185
187
|
`),l=async d=>(d.level==="dangerous"&&process.stderr.write(`\u26A0 Headless mode: dangerous ${d.tool} invocation auto-approved (trust mode)
|
|
186
188
|
`),{allowed:true})):l=async d=>(process.stderr.write(`\u26A0 Headless mode: denied ${d.tool} (no --auto-approve). Use --auto-approve to allow tool execution.
|
|
187
|
-
`),{allowed:false});let p=new
|
|
189
|
+
`),{allowed:false});let p=new Xe(n.permissions),u=new be({provider:t,registry:r,model:n.model,systemPrompt:s,maxTokens:n.maxTokens,toolContext:{cwd:process.cwd(),config:n,promptUser:l},permissions:p,hooks:a,checkpointStore:c});await a?.fire("SessionStart",{event:"SessionStart",timestamp:Date.now()});let f="",g={inputTokens:0,outputTokens:0};if(i==="stream-json")await u.handleUserMessage(e,{onTextDelta(d){let y=JSON.stringify({type:"text_delta",text:d});process.stdout.write(y+`
|
|
188
190
|
`);},onToolStart(d,y){let b=JSON.stringify({type:"tool_start",id:d,name:y});process.stdout.write(b+`
|
|
189
191
|
`);},onToolEnd(d,y,b){let R=JSON.stringify({type:"tool_end",id:d,name:y,result:b.content});process.stdout.write(R+`
|
|
190
192
|
`);},onMessageEnd(d){g.inputTokens+=d.inputTokens,g.outputTokens+=d.outputTokens;let y=JSON.stringify({type:"message_end",usage:{input_tokens:d.inputTokens,output_tokens:d.outputTokens}});process.stdout.write(y+`
|
|
191
193
|
`);},onError(d){let y=JSON.stringify({type:"error",message:d.message});process.stdout.write(y+`
|
|
192
194
|
`);}});else if(await u.handleUserMessage(e,{onTextDelta(d){f+=d;},onMessageEnd(d){g.inputTokens+=d.inputTokens,g.outputTokens+=d.outputTokens;},onError(d){process.stderr.write(`Error: ${d.message}
|
|
193
195
|
`);}}),i==="json"){let d=JSON.stringify({result:f,usage:{input_tokens:g.inputTokens,output_tokens:g.outputTokens},cost:0});process.stdout.write(d);}else process.stdout.write(f+`
|
|
194
|
-
`);await a?.fire("SessionEnd",{event:"SessionEnd",timestamp:Date.now()});}var To=class{constructor(e,t,n,r,s){this.provider=e;this.registry=t;this.toolContext=n;this.defaultModel=r;this.hooks=s;}activeAgents=new Map;namedAgents=new Map;maxConcurrent=7;nextId=0;registerAgent(e){this.namedAgents.set(e.name,e);}registerAgents(e){for(let t of e)this.registerAgent(t);}getAgent(e){return this.namedAgents.get(e)}listAgents(){return [...this.namedAgents.values()]}async run(e){if(this.activeAgents.size>=this.maxConcurrent)throw new Error("Maximum concurrent agents reached (7)");let t=`agent-${this.nextId++}`,n=e.definition,r=e.model??n?.model??
|
|
196
|
+
`);await a?.fire("SessionEnd",{event:"SessionEnd",timestamp:Date.now()});}var To=class{constructor(e,t,n,r,s){this.provider=e;this.registry=t;this.toolContext=n;this.defaultModel=r;this.hooks=s;}activeAgents=new Map;namedAgents=new Map;maxConcurrent=7;nextId=0;registerAgent(e){this.namedAgents.set(e.name,e);}registerAgents(e){for(let t of e)this.registerAgent(t);}getAgent(e){return this.namedAgents.get(e)}listAgents(){return [...this.namedAgents.values()]}async run(e){if(this.activeAgents.size>=this.maxConcurrent)throw new Error("Maximum concurrent agents reached (7)");let t=`agent-${this.nextId++}`,n=e.definition,r=e.model??n?.model??qt("default").id,s=this.registry;if(n?.allowedTools&&n.allowedTools.length>0){s=new lt;for(let c of n.allowedTools){let l=this.registry.get(c);l&&s.register(l);}}let i=new be({provider:this.provider,registry:s,model:r,systemPrompt:n?.systemPrompt,toolContext:this.toolContext,hooks:this.hooks}),a=this.executeAgent(i,e.prompt);this.activeAgents.set(t,{engine:i,promise:a});try{return await a}finally{this.activeAgents.delete(t),await this.hooks?.fire("DispatchStop",{event:"DispatchStop",timestamp:Date.now()});}}async executeAgent(e,t){let n=[],r;if(await e.handleUserMessage(t,{onTextDelta:s=>n.push(s),onError:s=>{r=s;}}),r)throw r;return n.join("")}getActiveCount(){return this.activeAgents.size}};var Co=class{constructor(e){this.repoRoot=e;}create(e){if(this.exists(e))throw new Error(`Worktree '${e}' already exists`);let t=this.getPath(e),n=`arqzero/${e}`,r=spawnSync("git",["worktree","add",t,"-b",n],{cwd:this.repoRoot,encoding:"utf-8"});if(r.status!==0){let s=(r.stderr||r.stdout||"unknown error").trim();throw new Error(`Failed to create worktree '${e}': ${s}`)}return {name:e,path:t,branch:n}}remove(e){if(!this.exists(e))throw new Error(`Worktree '${e}' does not exist`);let t=this.getPath(e),n=`arqzero/${e}`,r=spawnSync("git",["worktree","remove",t,"--force"],{cwd:this.repoRoot,encoding:"utf-8"});if(r.status!==0){let s=(r.stderr||r.stdout||"unknown error").trim();throw new Error(`Failed to remove worktree '${e}': ${s}`)}spawnSync("git",["branch","-D",n],{cwd:this.repoRoot,encoding:"utf-8"});}list(){let e=spawnSync("git",["worktree","list","--porcelain"],{cwd:this.repoRoot,encoding:"utf-8"});if(e.status!==0)return [];let t=e.stdout.trim();if(!t)return [];let n=[],r=t.split(`
|
|
195
197
|
|
|
196
198
|
`);for(let s of r){let i=s.trim().split(`
|
|
197
|
-
`),a="",c="";for(let l of i)l.startsWith("worktree ")?a=l.slice(9):l.startsWith("branch ")&&(c=l.slice(7),c=c.replace(/^refs\/heads\//,""));if(a){let l=c.startsWith("arqzero/")?c.slice(8):
|
|
199
|
+
`),a="",c="";for(let l of i)l.startsWith("worktree ")?a=l.slice(9):l.startsWith("branch ")&&(c=l.slice(7),c=c.replace(/^refs\/heads\//,""));if(a){let l=c.startsWith("arqzero/")?c.slice(8):Ce.basename(a);n.push({name:l,path:a,branch:c});}}return n}exists(e){let t=Ce.resolve(this.getPath(e));return this.list().some(n=>Ce.resolve(n.path)===t)}getPath(e){return Ce.join(Ce.dirname(this.repoRoot),"arqzero-worktrees",e)}};Z();function ei(o){let e=[],t=Ce.join(o,".arqzero","commands"),n=Ce.join(I(),"commands"),r=new Set;for(let s of [t,n]){if(!z$1.existsSync(s))continue;let i;try{i=z$1.readdirSync(s).filter(a=>a.endsWith(".md"));}catch{continue}for(let a of i){let c="/"+a.replace(/\.md$/,"");if(r.has(c))continue;r.add(c);let l=Ce.join(s,a),p=z$1.readFileSync(l,"utf-8");e.push({name:c,description:`Custom command from ${a}`,async execute(u,f){let g=p.replace(/\$ARGUMENTS/g,u);return `[Custom command ${c}]: ${g}`}});}}return e}Ze();Z();function ni(o){try{if(!z$1.existsSync(o))return null;let e=z$1.readFileSync(o,"utf-8");return JSON.parse(e)}catch{return null}}function bl(o,e){let t={};if(t.model=e.model??o.model,t.maxTokens=e.maxTokens??o.maxTokens,t.reducedMotion=e.reducedMotion??o.reducedMotion,t.syntaxHighlightingDisabled=e.syntaxHighlightingDisabled??o.syntaxHighlightingDisabled,t.theme=e.theme??o.theme,o.permissions||e.permissions){let n=o.permissions??{},r=e.permissions??{};t.permissions={allow:r.allow??n.allow,deny:[...new Set([...n.deny??[],...r.deny??[]])],ask:r.ask??n.ask};}return (o.env||e.env)&&(t.env={...o.env??{},...e.env??{}}),(e.hooks??o.hooks)&&(t.hooks=e.hooks??o.hooks),(o.mcpServers||e.mcpServers)&&(t.mcpServers={...o.mcpServers??{},...e.mcpServers??{}}),t}function ri(o){let e=Ce.join(I(),"settings.json"),t=Ce.join(o,".arqzero","settings.json"),n=ni(e),r=ni(t);return !n&&!r?{}:n?r?bl(n,r):n:r}Z();async function si(){let o=D();if(!o)return {tier:"free",email:null};if(!gr(o))return Date.now()-o.lastValidated>864e5&&wl(o),{tier:o.tier,email:o.email};try{let e=await Ho(o.refreshToken),t=Date.now()+e.expiresIn*1e3,n=e.tier??o.tier;try{n=(await ke(e.accessToken)).tier;}catch{}return xe({...o,accessToken:e.accessToken,refreshToken:e.refreshToken,tier:n,expiresAt:t,lastValidated:Date.now()}),{tier:n,email:o.email}}catch{}return fr(o)?{tier:"free",email:o.email}:{tier:o.tier,email:o.email}}async function wl(o){if(o)try{let e=await Ho(o.refreshToken),t=o.tier;try{t=(await ke(e.accessToken)).tier;}catch{}xe({...o,accessToken:e.accessToken,refreshToken:e.refreshToken,tier:t,expiresAt:Date.now()+e.expiresIn*1e3,lastValidated:Date.now()});}catch{}}var Tl=1e4;async function Dn(o,e){if(!o.command)return {action:"continue"};let t=o.timeout??Tl;return new Promise(n=>{let r=spawn(o.command,[],{shell:true,stdio:["pipe","pipe","pipe"]}),s="",i=false,a=l=>{i||(i=true,n(l));},c=setTimeout(()=>{r.kill(),a({action:"continue"});},t);r.stdout.on("data",l=>{s+=l.toString();}),r.on("error",()=>{clearTimeout(c),a({action:"continue"});}),r.on("close",l=>{if(clearTimeout(c),l!==0){a({action:"continue"});return}try{let p=JSON.parse(s);a(p);}catch{a({action:"continue"});}}),r.stdin.write(JSON.stringify(e)),r.stdin.end();})}async function Ln(o,e){if(!o.url)return {action:"continue"};let t=o.timeout??1e4;try{let n=new AbortController,r=setTimeout(()=>n.abort(),t),s=await fetch(o.url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:n.signal});if(clearTimeout(r),!s.ok)return {action:"continue"};let i=await s.text();return JSON.parse(i)}catch{return {action:"continue"}}}var _t=class{hooks=new Map;executeHookFn;constructor(e){this.executeHookFn=e?.executeHook??Sl;}register(e){let t=this.hooks.get(e.event)??[];t.push(e),this.hooks.set(e.event,t);}registerAll(e){for(let t of e)this.register(t);}async fire(e,t){let n=this.hooks.get(e)??[],r={action:"continue"};for(let s of n){if(s.matchTools&&s.matchTools.length>0&&(!t.toolName||!s.matchTools.includes(t.toolName)))continue;let i=await this.executeHookFn(s,t);if(i.action==="deny")return i;i.action==="allow"?r=i:i.modifiedInput!==void 0&&(r={...r,modifiedInput:i.modifiedInput});}return r}getHooks(e){return this.hooks.get(e)??[]}clear(){this.hooks.clear();}};async function Sl(o,e){return o.type==="command"?Dn(o,e):o.type==="http"?Ln(o,e):{action:"continue"}}var Cl=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","Stop","DispatchStop","SessionStart","SessionEnd","PreCompact","PostCompact","Notification"]);function jn(o){if(!o||o.length===0)return [];let e=[];for(let t of o){if(!Cl.has(t.event))continue;let n=t.type??(t.url?"http":"command");n==="command"&&!t.command||n==="http"&&!t.url||e.push({event:t.event,type:n,command:t.command,url:t.url,timeout:t.timeout,matchTools:t.matchTools});}return e}var Al=z.object({event:z.enum(["PreToolUse","PostToolUse","PostToolUseFailure","UserPromptSubmit","Stop","DispatchStop","SessionStart","SessionEnd","PreCompact","PostCompact","Notification"]),type:z.enum(["command","http"]),command:z.string().optional(),url:z.string().optional(),timeout:z.number().optional(),matchTools:z.array(z.string()).optional()}),Pl=z.object({name:z.string(),description:z.string(),systemPrompt:z.string().optional(),allowedTools:z.array(z.string()).optional(),model:z.string().optional()}),Rl=z.object({command:z.string(),args:z.array(z.string()).default([]),env:z.record(z.string(),z.string()).default({})}),El=z.object({name:z.string(),version:z.string(),description:z.string(),skills:z.array(z.string()).optional(),agents:z.array(Pl).optional(),hooks:z.array(Al).optional(),mcpServers:z.record(z.string(),Rl).optional()}),mt=class{constructor(e){this.baseDir=e;}async scanPlugins(){if(!z$1.existsSync(this.baseDir))return [];let e;try{e=z$1.readdirSync(this.baseDir,{withFileTypes:!0});}catch{return []}let t=[];for(let n of e){if(!n.isDirectory())continue;let r=Ce.join(this.baseDir,n.name),s=Ce.join(r,"plugin.json");if(z$1.existsSync(s))try{let i=z$1.readFileSync(s,"utf-8"),a=this.parseManifest(i);t.push({manifest:a,directory:r,enabled:!0});}catch(i){let a=i instanceof Error?i.message:String(i);console.warn(`Skipping plugin "${n.name}": ${a}`);}}return t}parseManifest(e){let t;try{t=JSON.parse(e);}catch{throw new Error("Invalid JSON in plugin manifest")}let n=El.safeParse(t);if(!n.success){let r=n.error.issues.map(s=>` ${s.path.join(".")}: ${s.message}`).join(`
|
|
198
200
|
`);throw new Error(`Invalid plugin manifest:
|
|
199
|
-
${r}`)}return n.data}};var Dt=class{plugins=new Map;register(e){let t=e.manifest.name;if(this.plugins.has(t))throw new Error(`Plugin "${t}" is already registered`);this.plugins.set(t,e);}disable(e){let t=this.plugins.get(e);return t?(t.enabled=false,true):false}enable(e){let t=this.plugins.get(e);return t?(t.enabled=true,true):false}getAll(){return [...this.plugins.values()]}getEnabled(){return [...this.plugins.values()].filter(e=>e.enabled)}getHooks(){let e=[];for(let t of this.getEnabled())t.manifest.hooks&&e.push(...t.manifest.hooks);return e}getAgents(){let e=[];for(let t of this.getEnabled())t.manifest.agents&&e.push(...t.manifest.agents);return e}getMcpServers(){let e={};for(let t of this.getEnabled())t.manifest.mcpServers&&Object.assign(e,t.manifest.mcpServers);return e}async reload(e){this.plugins.clear();let t=await e.scanPlugins();for(let n of t)this.register(n);}};Z();function Ml(){return
|
|
200
|
-
`)){let i=s.indexOf(":");if(i===-1)continue;let a=s.slice(0,i).trim(),c=s.slice(i+1).trim();a&&(r[a]=c);}return {frontmatter:r,body:n}}async function Un(o=Ml()){if(!z$1.existsSync(o))return [];let e;try{e=z$1.readdirSync(o,{withFileTypes:!0});}catch{return []}let t=[];for(let n of e){if(!n.isFile()||!n.name.endsWith(".md"))continue;let r=
|
|
201
|
+
${r}`)}return n.data}};var Dt=class{plugins=new Map;register(e){let t=e.manifest.name;if(this.plugins.has(t))throw new Error(`Plugin "${t}" is already registered`);this.plugins.set(t,e);}disable(e){let t=this.plugins.get(e);return t?(t.enabled=false,true):false}enable(e){let t=this.plugins.get(e);return t?(t.enabled=true,true):false}getAll(){return [...this.plugins.values()]}getEnabled(){return [...this.plugins.values()].filter(e=>e.enabled)}getHooks(){let e=[];for(let t of this.getEnabled())t.manifest.hooks&&e.push(...t.manifest.hooks);return e}getAgents(){let e=[];for(let t of this.getEnabled())t.manifest.agents&&e.push(...t.manifest.agents);return e}getMcpServers(){let e={};for(let t of this.getEnabled())t.manifest.mcpServers&&Object.assign(e,t.manifest.mcpServers);return e}async reload(e){this.plugins.clear();let t=await e.scanPlugins();for(let n of t)this.register(n);}};Z();function Ml(){return Ce.join(I(),"agents")}function $l(o){let e=o.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);if(!e)return null;let t=e[1],n=e[2].trim(),r={};for(let s of t.split(`
|
|
202
|
+
`)){let i=s.indexOf(":");if(i===-1)continue;let a=s.slice(0,i).trim(),c=s.slice(i+1).trim();a&&(r[a]=c);}return {frontmatter:r,body:n}}async function Un(o=Ml()){if(!z$1.existsSync(o))return [];let e;try{e=z$1.readdirSync(o,{withFileTypes:!0});}catch{return []}let t=[];for(let n of e){if(!n.isFile()||!n.name.endsWith(".md"))continue;let r=Ce.join(o,n.name);try{let s=z$1.readFileSync(r,"utf-8"),i=$l(s);if(!i)continue;let{frontmatter:a,body:c}=i;if(!a.name||!a.description)continue;let l={name:a.name,description:a.description};a.model&&(l.model=a.model),a.allowedTools&&(l.allowedTools=a.allowedTools.split(",").map(p=>p.trim()).filter(Boolean)),c&&(l.systemPrompt=c),t.push(l);}catch{}}return t}Z();var Il=z.object({name:z.string(),description:z.string(),version:z.string(),command:z.string(),triggers:z.array(z.string()).min(1),prompt:z.string()});function ci(o){let e;try{e=JSON.parse(o);}catch{throw new Error("Invalid JSON in skill manifest")}let t=Il.safeParse(e);if(!t.success){let n=t.error.issues.map(r=>` ${r.path.join(".")}: ${r.message}`).join(`
|
|
201
203
|
`);throw new Error(`Invalid skill manifest:
|
|
202
|
-
${n}`)}return t.data}async function li(o){if(!z$1.existsSync(o))return [];let e;try{e=z$1.readdirSync(o,{withFileTypes:!0});}catch{return []}let t=[];for(let n of e){if(!n.isDirectory())continue;let r=
|
|
204
|
+
${n}`)}return t.data}async function li(o){if(!z$1.existsSync(o))return [];let e;try{e=z$1.readdirSync(o,{withFileTypes:!0});}catch{return []}let t=[];for(let n of e){if(!n.isDirectory())continue;let r=Ce.join(o,n.name),s=Ce.join(r,"skill.json"),i=Ce.join(r,"prompt.md");try{if(!z$1.existsSync(s)){console.warn(`Skipping skill "${n.name}": missing skill.json`);continue}if(!z$1.existsSync(i)){console.warn(`Skipping skill "${n.name}": missing prompt.md`);continue}let a=z$1.readFileSync(s,"utf-8"),c=ci(a),l=z$1.readFileSync(i,"utf-8");t.push({manifest:c,promptContent:l,directory:r});}catch(a){let c=a instanceof Error?a.message:String(a);console.warn(`Skipping skill "${n.name}": ${c}`);}}return t}var Po=class{skills=new Map;register(e){let t=e.manifest.command;if(this.skills.has(t))throw new Error(`Skill command "${t}" is already registered`);this.skills.set(t,e);}has(e){return this.skills.has(e)}get(e){return this.skills.get(e)}getAll(){return [...this.skills.values()]}getSystemPrompt(e){let t=this.skills.get(e);return t?t.promptContent:null}getCommands(){return [...this.skills.keys()]}};function pi(o){return {name:o.manifest.command,description:o.manifest.description,async execute(e,t){if(!t.onSubmit)return `Skill "${o.manifest.name}" cannot be invoked: no onSubmit handler.`;let n=e.trim()?`${o.promptContent}
|
|
203
205
|
|
|
204
206
|
---
|
|
205
207
|
User arguments: ${e}`:o.promptContent;return await t.onSubmit(n),null}}}async function Ro(o){let e=createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question(o,n=>{e.close(),t(n);});})}async function jl(){let o=Ys(process.argv.slice(2));if(o.subcommand==="configure"&&(await gs(Ro),process.exit(0)),o.subcommand==="login")try{await hs(Ro),process.exit(0);}catch(x){console.error(`
|
|
206
208
|
${x instanceof Error?x.message:String(x)}
|
|
207
|
-
`),process.exit(1);}o.subcommand==="logout"&&(await ys(),process.exit(0));let e=await si();if(o.worktree){let{spawnSync:x}=await import('child_process'),$=x("git",["rev-parse","--show-toplevel"],{cwd:process.cwd(),encoding:"utf-8"});$.status!==0&&(console.error("Error: --worktree requires a git repository"),process.exit(1));let
|
|
209
|
+
`),process.exit(1);}o.subcommand==="logout"&&(await ys(),process.exit(0));let e=await si();if(o.worktree){let{spawnSync:x}=await import('child_process'),$=x("git",["rev-parse","--show-toplevel"],{cwd:process.cwd(),encoding:"utf-8"});$.status!==0&&(console.error("Error: --worktree requires a git repository"),process.exit(1));let O=$.stdout.trim(),v=new Co(O);if(v.exists(o.worktree))console.log(`Using existing worktree: ${v.getPath(o.worktree)}`);else {let U=v.create(o.worktree);console.log(`Worktree created: ${U.path} (branch: ${U.branch})`);}process.chdir(v.getPath(o.worktree));}if(!Pt())console.log(`Welcome to ArqZero! Let's set up your configuration.
|
|
208
210
|
`),await ho(Ro),console.log(`
|
|
209
211
|
Configuration saved! Starting ArqZero...
|
|
210
212
|
`);else {let x=ms();if(x.upgraded)console.log(`
|
|
211
213
|
[config] Upgraded v${x.fromVersion} \u2192 v${x.toVersion}`),x.backupPath&&console.log(`[config] Backup: ${x.backupPath}`);else if(x.fromVersion>x.toVersion){console.warn(`
|
|
212
214
|
[config] WARNING:`);for(let $ of x.notes)console.warn(` ${$}`);console.warn("");}}let t=fo(),n=ri(process.cwd()),r=cr();n.env&&Object.assign(process.env,n.env),n.model&&(t.model=n.model),n.maxTokens&&(t.maxTokens=n.maxTokens),r.model&&(t.model=r.model),r.maxTokens&&(t.maxTokens=r.maxTokens),r.apiKey&&!t.fireworksApiKey&&(t.fireworksApiKey=r.apiKey),r.provider&&(t.provider=r.provider),o.model&&(t.model=o.model);let s=e.tier;er({reducedMotion:r.reducedMotion||n.reducedMotion||false,syntaxHighlightingDisabled:r.syntaxHighlightingDisabled||n.syntaxHighlightingDisabled||false,verbose:r.verbose||false,theme:r.theme??n.theme??"dark",tier:s});let i;try{i=ps(t),await i.isAvailable()||(console.error(`Warning: ${t.provider} provider unavailable. Falling back to mock adapter.
|
|
213
|
-
`),i=new Ct);}catch(x){x instanceof
|
|
214
|
-
`),i=new Ct;}let a=new lt;for(let x of Fs)a.register(x);let c=new ko;if(t.mcpServers&&Object.keys(t.mcpServers).length>0){for(let[$,
|
|
215
|
-
`));let l={cwd:process.cwd(),config:t,promptUser:async x=>({allowed:true})},p=new _t;if(n.hooks&&n.hooks.length>0){let x=jn(n.hooks);p.registerAll(x),x.length>0&&console.log(`Hooks: registered ${x.length} from settings`);}let u=new Dt,f=
|
|
215
|
+
`),i=new Ct);}catch(x){x instanceof Te?console.error(`Provider config error: ${x.message}`):console.error(`Error initializing provider: ${x instanceof Error?x.message:String(x)}`),console.error(`Falling back to mock adapter. Run /provider to configure.
|
|
216
|
+
`),i=new Ct;}let a=new lt;for(let x of Fs)a.register(x);let c=new ko;if(t.mcpServers&&Object.keys(t.mcpServers).length>0){for(let[$,O]of Object.entries(t.mcpServers))try{let v=await c.connect($,O);console.log(`MCP: Connected to ${$} (${v.length} tools)`);}catch(v){console.error(`MCP: Failed to connect to ${$}: ${v instanceof Error?v.message:String(v)}`);}let x=Ws(c,a);x>0&&console.log(`MCP: Registered ${x} tools`);}process.on("exit",()=>{c.disconnectAll().catch(()=>{});}),process.on("SIGINT",()=>{c.disconnectAll().catch(()=>{}),process.exit(0);}),o.autoApprove&&(t.permissions.defaultMode="trust",process.stderr.write(`\u26A0 Auto-approve enabled: all tool permissions bypassed
|
|
217
|
+
`));let l={cwd:process.cwd(),config:t,promptUser:async x=>({allowed:true})},p=new _t;if(n.hooks&&n.hooks.length>0){let x=jn(n.hooks);p.registerAll(x),x.length>0&&console.log(`Hooks: registered ${x.length} from settings`);}let u=new Dt,f=Ce.join(I(),"plugins"),g=new mt(f),d=Ce.join(process.cwd(),".arqzero","plugins");for(let x of [f,d])try{let O=await(x===f?g:new mt(x)).scanPlugins();for(let v of O)try{u.register(v);}catch(U){let j=U instanceof Error?U.message:String(U);console.warn(`Plugin: ${j}`);}}catch($){let O=$ instanceof Error?$.message:String($);console.warn(`Plugin scan failed for ${x}: ${O}`);}let y=u.getHooks();y.length>0&&p.registerAll(y);let b=u.getMcpServers();Object.keys(b).length>0&&(t.mcpServers={...t.mcpServers??{},...b});let R=u.getEnabled();R.length>0&&console.log(`Plugins: loaded ${R.length} (${R.map(x=>x.manifest.name).join(", ")})`);let L=new To(i,a,l,t.model,p);l.agentRunner=L,qs(L),L.registerAgents(u.getAgents());try{let x=await Un();L.registerAgents(x);}catch{}try{let x=await Un(Ce.join(process.cwd(),".arqzero","agents"));L.registerAgents(x);}catch{}let q=L.listAgents().length;q>0&&console.log(`Agents: ${q} named agent(s) registered`);let he=new dt,ze=zs(process.cwd(),he),le,pe;if(o.resume){Oo(o.resume)||(console.error(`Error: session "${o.resume}" not found.`),process.exit(1));let x=Ie(o.resume);x&&x.length>0&&(le=x,pe=o.resume);}else if(o.continue){let{listSessionsWithInfo:x}=await Promise.resolve().then(()=>(Ze(),Bo)),$=x();$.length===0&&(console.error("Error: no sessions to continue."),process.exit(1));let O=$[0],v=Ie(O.id);v&&v.length>0&&(le=v,pe=O.id);}else if(!o.print){let{listSessionsWithInfo:x}=await Promise.resolve().then(()=>(Ze(),Bo)),$=x();if($.length>0){console.log(`
|
|
216
218
|
\x1B[36m\u25C6 ArqZero\x1B[0m
|
|
217
219
|
`),console.log(` \x1B[90mExisting sessions:\x1B[0m
|
|
218
|
-
`);let
|
|
220
|
+
`);let O=$.slice(0,10);O.forEach((j,W)=>{let ee=j.lastModified.toLocaleDateString(),ye=j.lastModified.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),ht=j.hasCompaction?" [compacted]":"";console.log(` \x1B[36m${W+1}.\x1B[0m ${j.id.slice(0,8)} \x1B[90m${ee} ${ye} ${j.messageCount} msgs${ht}\x1B[0m`);}),console.log(`
|
|
219
221
|
\x1B[36m0.\x1B[0m Start new session
|
|
220
|
-
`);let v=await Ro(" Choose (0-"+
|
|
221
|
-
Resuming session ${
|
|
222
|
+
`);let v=await Ro(" Choose (0-"+O.length+"): "),U=parseInt(v.trim());if(U>0&&U<=O.length){let j=O[U-1],W=Ie(j.id);W&&W.length>0&&(le=W,pe=j.id,console.log(`
|
|
223
|
+
Resuming session ${j.id.slice(0,8)}...
|
|
222
224
|
`));}else console.log(`
|
|
223
225
|
Starting new session...
|
|
224
|
-
`);}}if(o.print){let x=o.outputFormat??"text";await Xs({prompt:o.print,provider:i,config:t,registry:a,systemPrompt:
|
|
226
|
+
`);}}if(o.print){let x=o.outputFormat??"text";await Xs({prompt:o.print,provider:i,config:t,registry:a,systemPrompt:ze,outputFormat:x,hooks:p,checkpointStore:new et}),process.exit(0);}let Re=new wo;for(let x of Zs)Re.register(x);{let x=ei(process.cwd());for(let $ of x)Re.register($);}let Ge=new Po;{let x=Ce.join(I(),"skills"),$=Ce.join(process.cwd(),".arqzero","skills"),O=[x,$];for(let U of u.getEnabled())if(U.manifest.skills)for(let j of U.manifest.skills)O.push(Ce.resolve(U.directory,j));for(let U of O)try{let j=await li(U);for(let W of j)try{Ge.register(W),Re.has(W.manifest.command)||Re.register(pi(W));}catch(ee){let ye=ee instanceof Error?ee.message:String(ee);console.warn(`Skill ${W.manifest.name}: ${ye}`);}}catch{}let v=Ge.getAll().length;v>0&&console.log(`Skills: registered ${v}`);}render(is.createElement(vn,{provider:i,config:t,registry:a,systemPrompt:ze,commandRegistry:Re,initialMessages:le,resumedSessionId:pe,hooks:p,skillRegistry:Ge,pluginManager:u,pluginLoader:g}));}jl().catch(o=>{console.error("Fatal error:",o),process.exit(1);});
|