@leviyuan/lodestar 0.16.0 → 0.16.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leviyuan/lodestar",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -40,8 +40,8 @@
40
40
  "build:stop": "bun build src/stop-cli.ts --target=node --minify --banner='#!/usr/bin/env node' --outfile=dist/lodestar-stop.js",
41
41
  "build:update": "bun build src/update-cli.ts --target=node --minify --banner='#!/usr/bin/env node' --outfile=dist/lodestar-update.js",
42
42
  "build:version": "bun build src/version-cli.ts --target=node --minify --banner='#!/usr/bin/env node' --outfile=dist/lodestar-version.js",
43
- "build:consult": "bun build src/consult-cli.ts --target=node --minify --banner='#!/usr/bin/env node' --outfile=dist/lodestar-consult.js",
44
- "build": "bun run build:daemon && bun run build:setup && bun run build:stop && bun run build:update && bun run build:version && bun run build:consult",
43
+ "build:agent": "bun build src/agent-cli.ts --target=node --minify --banner='#!/usr/bin/env node' --outfile=dist/lodestar-agent.js",
44
+ "build": "bun run build:daemon && bun run build:setup && bun run build:stop && bun run build:update && bun run build:version && bun run build:agent",
45
45
  "prepublishOnly": "bun run ci",
46
46
  "postinstall": "node scripts/postinstall.cjs"
47
47
  },
@@ -51,7 +51,7 @@
51
51
  "lodestar-stop": "./dist/lodestar-stop.js",
52
52
  "lodestar-update": "./dist/lodestar-update.js",
53
53
  "lodestar-version": "./dist/lodestar-version.js",
54
- "lodestar-consult": "./dist/lodestar-consult.js"
54
+ "lodestar-agent": "./dist/lodestar-agent.js"
55
55
  },
56
56
  "files": [
57
57
  "dist/",
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
- import{resolve as h}from"node:path";import{fileURLToPath as y}from"node:url";async function S(e=process.argv.slice(2)){let t=e.shift()??"";if(!t||t==="help"||t==="--help"||t==="-h"){process.stdout.write(`${g()}
3
- `);return}let r=I();switch(t){case"identities":{let n=await u(r,"GET","/consult/identities");if(e.includes("--json"))process.stdout.write(`${JSON.stringify(n,null,2)}
4
- `);else process.stdout.write(k(n));return}case"run":await $(r,e);return;case"status":{let n=d(e[0],"status requires run_id"),s=await u(r,"GET",`/consult/runs/${encodeURIComponent(n)}`);if(process.stdout.write(w(s)),s.status==="failed"||s.status==="cancelled")process.exitCode=1;return}case"cancel":{let n=d(e[0],"cancel requires run_id"),s=await u(r,"DELETE",`/consult/runs/${encodeURIComponent(n)}`);process.stdout.write(`${JSON.stringify(s)}
5
- `);return}default:throw Error(g())}}async function $(e,t){let r=b(t),n=r.readStdin?await E():"",s=r.question||(r.kind!=="review"?n.trim():""),o=_(r,n),i={identity_ids:r.identityIds,kind:r.kind,target:o,...s?{question:s}:{},...r.instructions?{instructions:r.instructions}:{},...r.crossReview?{cross_review:!0}:{}},a=await u(e,"POST","/consult/runs",i),p=String(a.run_id??"");if(!p)throw Error("consult API returned no run_id");if(r.noWait){process.stdout.write(`${JSON.stringify(a,null,2)}
6
- `);return}let f=!1,l=()=>{if(f)return;f=!0,u(e,"DELETE",`/consult/runs/${encodeURIComponent(p)}`).then(()=>process.exit(130),(c)=>{process.stderr.write(`lodestar-consult: cancellation failed: ${c instanceof Error?c.message:String(c)}
7
- `),process.exit(1)})};process.once("SIGINT",l),process.once("SIGTERM",l);try{while(!0){let c=await u(e,"GET",`/consult/runs/${encodeURIComponent(p)}`);if(c.status!=="running"){if(process.stdout.write(w(c)),c.status!=="completed")process.exitCode=1;return}await new Promise((m)=>setTimeout(m,1000))}}finally{process.off("SIGINT",l),process.off("SIGTERM",l)}}function b(e){let t={identityIds:[],kind:"question",target:"working_directory",question:"",instructions:"",commit:"",branch:"",proposal:"",crossReview:!1,noWait:!1,readStdin:!1},r=[];for(let s=0;s<e.length;s++){let o=e[s],i=()=>d(e[++s],`${o} requires a value`);switch(o){case"--identity":case"-i":t.identityIds.push(i());break;case"--kind":{let a=i();if(a!=="question"&&a!=="review"&&a!=="critique")throw Error(`invalid --kind: ${a}`);t.kind=a;break}case"--target":t.target=i();break;case"--question":t.question=i();break;case"--instructions":t.instructions=i();break;case"--commit":t.commit=i(),t.target="commit";break;case"--branch":t.branch=i(),t.target="base_branch";break;case"--proposal":t.proposal=i(),t.target="proposal";break;case"--cross-review":t.crossReview=!0;break;case"--no-wait":t.noWait=!0;break;case"--stdin":t.readStdin=!0;break;default:if(o.startsWith("-"))throw Error(`unknown option: ${o}`);r.push(o)}}if(t.identityIds=[...new Set(t.identityIds)],!t.identityIds.length)throw Error("run requires at least one --identity");if(r.length&&!t.question)t.question=r.join(" ");if(!t.question&&!t.proposal&&(t.kind!=="review"||t.target==="proposal"))t.readStdin=!0;if(!new Set(["working_directory","uncommitted_changes","commit","base_branch","proposal"]).has(t.target))throw Error(`invalid --target: ${t.target}`);return t}function _(e,t){switch(e.target){case"commit":return{type:"commit",sha:d(e.commit,"--commit is required")};case"base_branch":return{type:"base_branch",branch:d(e.branch,"--branch is required")};case"proposal":{let r=e.proposal||t;return{type:"proposal",text:d(r.trim(),"proposal text is required")}}case"uncommitted_changes":return{type:"uncommitted_changes"};default:return{type:"working_directory"}}}function I(){let e=String(process.env.LODESTAR_CONSULT_URL??"").replace(/\/+$/,""),t=String(process.env.LODESTAR_CONSULT_CAPABILITY??"");if(!e||!t)throw Error("lodestar-consult must run inside a Lodestar-managed main Agent session (missing capability)");return{baseUrl:e,capability:t}}async function u(e,t,r,n){let s=await fetch(`${e.baseUrl}${r}`,{method:t,headers:{authorization:`Bearer ${e.capability}`,...n?{"content-type":"application/json"}:{}},...n?{body:JSON.stringify(n)}:{}}),o=await s.text(),i;try{i=JSON.parse(o)}catch{throw Error(`consult API ${t} ${r} returned HTTP ${s.status}: ${o||"(empty)"}`)}if(!s.ok)throw Error(i?.error??`consult API HTTP ${s.status}`);return i}function k(e){let t=[`catalog ${e.catalog_generation??"MISS"}`];for(let r of e.identities??[])t.push([r.status==="ready"?"✅":"MISS",r.id,r.display_name,`${r.model}/${r.effort}`,r.source_default?"default":"",r.reason??""].filter(Boolean).join(" · "));for(let r of e.source_failures??[])t.push(`MISS · ${r.display} · ${r.reason}`);return`${t.join(`
8
- `)}
9
- `}function w(e){let t=[`# Lodestar consult ${e.run_id??"MISS"}`,"",`- Status: ${e.status??"MISS"}`,`- Kind: ${e.kind??"MISS"}`,`- Target fingerprint: ${e.target_fingerprint??"MISS"}`,`- Cross review: ${e.cross_review?"yes":"no"}`];if(e.error)t.push(`- Error: ${e.error}`);for(let r of e.reviewers??[]){if(t.push("",`## ${r.identity_name??r.identity_id}`,"",`Status: ${r.status}`),r.error)t.push("",`Error: ${r.error}`);if(r.first_pass_output)t.push("","### First pass","",r.first_pass_output);if(r.output)t.push("",r.first_pass_output?"### Cross review":"### Response","",r.output)}return`${t.join(`
10
- `)}
11
- `}async function E(){if(process.stdin.isTTY)return"";let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString("utf8")}function d(e,t){if(!e?.trim())throw Error(t);return e.trim()}function g(){return["Usage:"," lodestar-consult identities [--json]"," lodestar-consult run --identity <id> [--identity <id>...] --kind question|review|critique [options]"," lodestar-consult status <run_id>"," lodestar-consult cancel <run_id>"].join(`
12
- `)}if(process.argv[1]&&h(process.argv[1])===y(import.meta.url))S().catch((e)=>{process.stderr.write(`lodestar-consult: ${e instanceof Error?e.message:String(e)}
13
- `),process.exitCode=1});export{b as parseRunArgs};