alchemylab 1.2.3 → 1.2.4
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/cli.js +19 -27
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -190,34 +190,26 @@ for(const t of e){if(!t.enabled)continue
|
|
|
190
190
|
const e=this.configurer.generateAgentMarkdown(t,"alchemy",o,s)
|
|
191
191
|
await c.default.promises.writeFile(a.default.join(r,t.name+".md"),e,"utf8")}this.logger.info("Re-synced agent markdowns after model change",{model:o,count:e.length})
|
|
192
192
|
try{const e=new v.SessionSpawnService({apiClient:this.apiClient,logger:this.logger,projectId:this.projectId,getDefaultModel:()=>this.cachedDefaultModel||void 0}).getOpenCodeServerUrl(this.options.projectPath)
|
|
193
|
-
e&&(await fetch(e+"/config/reload",{method:"POST",signal:AbortSignal.timeout(5e3)})).ok&&this.logger.info("Triggered OpenCode config reload")}catch(e){this.logger.debug("Failed to trigger OpenCode config reload",{error:(0,g.getErrorMessage)(e)})}}async handleSyncAgents(e,
|
|
194
|
-
if(!e?.id)return void
|
|
193
|
+
e&&(await fetch(e+"/config/reload",{method:"POST",signal:AbortSignal.timeout(5e3)})).ok&&this.logger.info("Triggered OpenCode config reload")}catch(e){this.logger.debug("Failed to trigger OpenCode config reload",{error:(0,g.getErrorMessage)(e)})}}async handleSyncAgents(e,t){try{const e=this.readProjectConfig()
|
|
194
|
+
if(!e?.id)return void t.status(400).json({success:!1,error:"No project configuration found"})
|
|
195
195
|
this.logger.info("Syncing agents from remote",{projectId:e.id})
|
|
196
|
-
const
|
|
197
|
-
if(!
|
|
198
|
-
const
|
|
199
|
-
this.logger.debug("Fetched project for global prompt",{projectId:e.id,hasProject:!!
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
await c.default.promises.mkdir(
|
|
204
|
-
let
|
|
205
|
-
for(const e of
|
|
206
|
-
const t="alchemy",s=this.cachedDefaultModel||"anthropic/claude-opus-4-5",r=this.configurer.generateAgentMarkdown(e,t,s,
|
|
207
|
-
await c.default.promises.writeFile(
|
|
208
|
-
if(c.default.existsSync(e)){const t=c.default.readFileSync(e,"utf-8"),
|
|
209
|
-
if(
|
|
210
|
-
c.default.writeFileSync(e,JSON.stringify(
|
|
211
|
-
try{const e=
|
|
212
|
-
|
|
213
|
-
if(r.pid)try{process.kill(r.pid,"SIGTERM"),this.logger.info("Killed existing OpenCode process",{pid:r.pid}),await new Promise((e=>setTimeout(e,500)))}catch(e){"ESRCH"!==e?.code&&this.logger.warn("Could not kill OpenCode",{error:(0,g.getErrorMessage)(e)})}const o=r.port||0,{resolveServeCommand:n}=await Promise.resolve().then(t.bind(t,9068)),i=n(),a=(0,w.spawn)(i.command,[...i.prependArgs,"--port",o+""],{stdio:["ignore","pipe","pipe"],cwd:this.options.projectPath,detached:!0,env:process.env}),l=new Promise((e=>{let t=""
|
|
214
|
-
const s=setTimeout((()=>{this.logger.warn("Timeout waiting for OpenCode port, killing process")
|
|
215
|
-
try{a.kill("SIGTERM")}catch{}e(null)}),1e4)
|
|
216
|
-
a.stdout?.on("data",(r=>{t+=r.toString()
|
|
217
|
-
const o=t.match(/listening on http:\/\/[^:]+:(\d+)/)
|
|
218
|
-
o&&(clearTimeout(s),a.unref(),e({port:parseInt(o[1],10),pid:a.pid}))})),a.on("error",(()=>{clearTimeout(s)
|
|
219
|
-
try{a.kill("SIGTERM")}catch{}e(null)}))})),u=await l
|
|
220
|
-
u&&(this.trackChildPid(u.pid),c.default.writeFileSync(e,JSON.stringify({port:u.port,pid:u.pid,startedAt:(new Date).toISOString()},null,2)),this.logger.info("Restarted OpenCode",{port:u.port,pid:u.pid}),this.setOpenCodePort(u.port),d=!0)}}catch(e){this.logger.warn("Could not restart OpenCode",{error:(0,g.getErrorMessage)(e)})}s.json({success:!0,message:`Synced ${l} agent(s) to local files${d?" - OpenCode reloading":""}`,count:l,restarted:d})}catch(e){this.logger.error("Failed to sync agents",{error:(0,g.getErrorMessage)(e)}),s.status(500).json({success:!1,error:(0,g.getErrorMessage)(e)})}}async handleGenerateJournal(e,s){try{const{requestId:r}=e.body
|
|
196
|
+
const s=await this.configurer.fetchAgentsFromRemote(e.id)
|
|
197
|
+
if(!s||0===s.length)return void t.json({success:!0,message:"No agents to sync",count:0})
|
|
198
|
+
const r=await this.configurer.fetchProjectFromRemote(e.id)
|
|
199
|
+
this.logger.debug("Fetched project for global prompt",{projectId:e.id,hasProject:!!r,hasGlobalSystemPrompt:!!r?.metadata?.globalSystemPrompt})
|
|
200
|
+
const o=r?.metadata?.globalSystemPrompt
|
|
201
|
+
o?this.logger.info("Using global system prompt from project metadata",{projectId:e.id,promptLength:o.length}):this.logger.debug("No global system prompt found in project metadata")
|
|
202
|
+
const n=a.default.join(this.options.projectPath,".opencode","agent")
|
|
203
|
+
await c.default.promises.mkdir(n,{recursive:!0})
|
|
204
|
+
let i=0
|
|
205
|
+
for(const e of s){if(!e.enabled)continue
|
|
206
|
+
const t="alchemy",s=this.cachedDefaultModel||"anthropic/claude-opus-4-5",r=this.configurer.generateAgentMarkdown(e,t,s,o),l=a.default.join(n,e.name+".md")
|
|
207
|
+
await c.default.promises.writeFile(l,r,"utf8"),i++,this.logger.info("Synced agent file",{name:e.name,path:l,mode:e.mode})}try{const e=a.default.join(this.options.projectPath,"opencode.json")
|
|
208
|
+
if(c.default.existsSync(e)){const t=c.default.readFileSync(e,"utf-8"),o=JSON.parse(t),n=r?.metadata?.bashToolAgents||{}
|
|
209
|
+
if(o.agent){for(const e of s)e.enabled&&o.agent[e.name]&&e.name in n&&(o.agent[e.name].tools.bash=!!n[e.name])
|
|
210
|
+
c.default.writeFileSync(e,JSON.stringify(o,null,2),"utf-8"),this.logger.info("Updated opencode.json agent tools",{bashOverrides:Object.keys(n).length})}}}catch(e){this.logger.warn("Failed to update opencode.json agent tools",{error:(0,g.getErrorMessage)(e)})}let l=!1
|
|
211
|
+
try{const e=new v.SessionSpawnService({apiClient:this.apiClient,logger:this.logger,projectId:this.projectId,getDefaultModel:()=>this.cachedDefaultModel||void 0}).getOpenCodeServerUrl(this.options.projectPath)
|
|
212
|
+
e&&(await fetch(e+"/config/reload",{method:"POST",signal:AbortSignal.timeout(5e3)})).ok&&(this.logger.info("Triggered OpenCode config reload after agent sync"),l=!0)}catch(e){this.logger.warn("Could not reload OpenCode config",{error:(0,g.getErrorMessage)(e)})}t.json({success:!0,message:`Synced ${i} agent(s) to local files${l?" - config reloaded":""}`,count:i,reloaded:l})}catch(e){this.logger.error("Failed to sync agents",{error:(0,g.getErrorMessage)(e)}),t.status(500).json({success:!1,error:(0,g.getErrorMessage)(e)})}}async handleGenerateJournal(e,s){try{const{requestId:r}=e.body
|
|
221
213
|
if(!r)return void s.status(400).json({success:!1,error:"requestId is required"})
|
|
222
214
|
if(!/^req\d+$/.test(r))return void s.status(400).json({success:!1,error:"Invalid requestId format"})
|
|
223
215
|
this.logger.info("Generating journal for request",{requestId:r})
|