@seqyuan/annodex 0.1.3 → 0.1.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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -4
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/runtime/route.js +1 -1
- package/.next/server/app/api/internal/runtime/route.js.nft.json +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js.nft.json +1 -1
- package/.next/server/app/api/projects/route.js +1 -1
- package/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/server/app/api/reports/[id]/route.js +1 -1
- package/.next/server/app/api/reports/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/search/route.js +1 -1
- package/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/page.js +8 -8
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +4 -4
- package/.next/server/chunks/402.js +2 -0
- package/.next/server/chunks/6268.js +8 -0
- package/.next/server/chunks/6429.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/app/page-6a323838773771aa.js +272 -0
- package/.next/static/css/{523acabb330ed50a.css → 45029451a1d7255d.css} +1 -1
- package/.next/trace +74 -74
- package/.next/trace-build +1 -1
- package/README.md +2 -2
- package/bin/annodex.js +3 -3
- package/package.json +4 -3
- package/.next/server/chunks/5582.js +0 -5
- package/.next/static/chunks/app/page-12927508a35c3375.js +0 -272
- /package/.next/static/{0kk7ijxJXYGiTfY4IrszF → 71bQ0tM7oHMJrmueFtcay}/_buildManifest.js +0 -0
- /package/.next/static/{0kk7ijxJXYGiTfY4IrszF → 71bQ0tM7oHMJrmueFtcay}/_ssgManifest.js +0 -0
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":50397059,"timestamp":56948999,"id":14,"parentId":1,"tags":{},"startTime":1780424150551,"traceId":"999f1acd968181fc"},{"name":"run-typescript","duration":7332376,"timestamp":107351158,"id":7562,"parentId":1,"tags":{},"startTime":1780424200953,"traceId":"999f1acd968181fc"},{"name":"static-check","duration":541674,"timestamp":114699273,"id":7565,"parentId":1,"tags":{},"startTime":1780424208301,"traceId":"999f1acd968181fc"},{"name":"static-generation","duration":6061066,"timestamp":115764770,"id":7647,"parentId":1,"tags":{},"startTime":1780424209367,"traceId":"999f1acd968181fc"},{"name":"collect-build-traces","duration":11934828,"timestamp":115244272,"id":7644,"parentId":1,"tags":{},"startTime":1780424208846,"traceId":"999f1acd968181fc"},{"name":"telemetry-flush","duration":51,"timestamp":127182356,"id":7656,"parentId":1,"tags":{},"startTime":1780424220784,"traceId":"999f1acd968181fc"},{"name":"next-build","duration":70863256,"timestamp":56319163,"id":1,"tags":{"buildMode":"default","version":"16.2.1","bundler":"webpack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1780424149921,"traceId":"999f1acd968181fc"}]
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npm install -g @seqyuan/annodex
|
|
|
12
12
|
annodex
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Open [http://localhost:
|
|
15
|
+
Open [http://localhost:30121](http://localhost:30121). On first start, annodex can optionally set a password, similar to Jupyter.
|
|
16
16
|
|
|
17
17
|
## CLI
|
|
18
18
|
|
|
@@ -50,7 +50,7 @@ Managed servers auto-restart after package updates once active agent sessions ar
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
npm install
|
|
53
|
-
npm run dev # port
|
|
53
|
+
npm run dev # port 30121
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
Typecheck: `node_modules/.bin/tsc --noEmit`
|
package/bin/annodex.js
CHANGED
|
@@ -88,7 +88,7 @@ const { values: cliArgs, positionals } = parseArgs({
|
|
|
88
88
|
allowPositionals: true,
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
-
const port = cliArgs.port ?? process.env.PORT ?? "
|
|
91
|
+
const port = cliArgs.port ?? process.env.PORT ?? "30121";
|
|
92
92
|
const hostname = cliArgs.hostname ?? process.env.HOSTNAME ?? null;
|
|
93
93
|
|
|
94
94
|
// ── CLI commands ──
|
|
@@ -582,7 +582,7 @@ async function startManagedServer({ quiet = false, effectivePort: optPort, effec
|
|
|
582
582
|
const existingSupervisorAlive = existing && isPidAlive(existing.supervisorPid);
|
|
583
583
|
const existingNextAlive = existing && isPidAlive(existing.nextPid);
|
|
584
584
|
// Preserve port from options > cliArgs > existing state > env > default
|
|
585
|
-
const effectivePort = optPort ?? cliArgs.port ?? existing?.port ?? process.env.PORT ?? "
|
|
585
|
+
const effectivePort = optPort ?? cliArgs.port ?? existing?.port ?? process.env.PORT ?? "30121";
|
|
586
586
|
const effectiveHost = optHost ?? cliArgs.hostname ?? existing?.hostname ?? process.env.HOSTNAME ?? null;
|
|
587
587
|
if (existingSupervisorAlive) {
|
|
588
588
|
if (!quiet) {
|
|
@@ -668,7 +668,7 @@ Usage:
|
|
|
668
668
|
annodex update Update to the latest version
|
|
669
669
|
|
|
670
670
|
Options:
|
|
671
|
-
-p, --port <port> Port to listen on (default:
|
|
671
|
+
-p, --port <port> Port to listen on (default: 30121, env: PORT)
|
|
672
672
|
-H, --hostname <host> Hostname to bind to (default: localhost)
|
|
673
673
|
--json Print machine-readable status JSON
|
|
674
674
|
-f, --follow Follow logs
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seqyuan/annodex",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "AI-native bioinformatics workspace by Annoroad",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
"package.json"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"dev": "next dev -p
|
|
22
|
+
"dev": "next dev -p 30121",
|
|
23
23
|
"build": "next build --webpack",
|
|
24
|
-
"start": "next start -p
|
|
24
|
+
"start": "next start -p 30121",
|
|
25
25
|
"lint": "eslint .",
|
|
26
|
+
"test:compat": "node --test tests/compat-proxy.test.mjs",
|
|
26
27
|
"release": "npm version patch --no-git-tag-version && npm run build && npm publish --access public"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
exports.id=5582,exports.ids=[5582],exports.modules={39006:a=>{"use strict";a.exports={rE:"0.1.3"}},40402:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$M:()=>j,BR:()=>l,T0:()=>x,aU:()=>y,dQ:()=>n,os:()=>m,r1:()=>w});var e=c(33873),f=c(29021),g=c(46983),h=c(89035),i=a([g]);function j(){let a=process.env.HOME??process.env.USERPROFILE??"/tmp";return(0,e.join)(a,".config","annodex")}function k(){return globalThis.__annodexSessionPathCache||(globalThis.__annodexSessionPathCache=new Map),globalThis.__annodexSessionPathCache}function l(a){k().delete(a)}async function m(a){let b=k().get(a);return b||(w(a)?.cwd??null)}async function n(a={}){return function(a={}){let b=[],c=new Set,d=a.cwd?.trim()?p(a.cwd):void 0,e=o();if(!(0,f.existsSync)(e))return b;for(let a of q(e)){let e=t(a);if(!e||d&&e.cwd!==d)continue;let f=v(a,e);!f||c.has(f.id)||(c.add(f.id),b.push(f))}return b.sort((a,b)=>b.modified.localeCompare(a.modified))}(a)}function o(){return(0,e.join)((0,h.R)(),"sessions")}function p(a){let b=a.trim();return b.replace(/[\\/]+$/,"")||b}function q(a,b=[]){try{for(let c of(0,f.readdirSync)(a,{withFileTypes:!0})){let d=(0,e.join)(a,c.name);c.isDirectory()?q(d,b):c.isFile()&&c.name.endsWith(".jsonl")&&b.push(d)}}catch{}return b}function r(a){return"object"==typeof a&&null!==a}function s(a){try{return JSON.parse(`"${a}"`)}catch{return a}}function t(a){let b=function(a,b=65536){let c=null;try{c=(0,f.openSync)(a,"r");let d=Buffer.alloc(b),e=(0,f.readSync)(c,d,0,b,0);return d.subarray(0,e).toString("utf-8")}catch{return""}finally{if(null!==c)try{(0,f.closeSync)(c)}catch{}}}(a);if(!/"type"\s*:\s*"session_meta"/.test(b))return null;let c=/"id"\s*:\s*"((?:\\.|[^"\\])*)"/.exec(b),d=/"cwd"\s*:\s*"((?:\\.|[^"\\])*)"/.exec(b),e=/"timestamp"\s*:\s*"((?:\\.|[^"\\])*)"/.exec(b),g=c?s(c[1]):null,h=d?p(s(d[1])):null;if(!g||!h)return null;let i=e?s(e[1]):new Date(0).toISOString();return{id:g,cwd:h,created:i}}function u(a,b){let c,d,e;return a?a:((e=((d=(c=b.trim()).lastIndexOf("<environment_context>"))>=0?c.slice(d).replace(/^<environment_context>[\s\S]*?<\/environment_context>\s*/m,"").trim():c).replace(/\s+/g," ").trim()).length>180?`${e.slice(0,180)}...`:e)||a}function v(a,b){var c,d,e;let g,h;try{g=(0,f.statSync)(a),h=(0,f.readFileSync)(a,"utf-8")}catch{return null}let i=h.split("\n").filter(a=>a.trim()),j="",l=0,m=0;for(let a of i){let b=function(a){try{let b=JSON.parse(a);return r(b)?b:null}catch{return null}}(a);if(!b)continue;let d=r(b.payload)?b.payload:null;if(d){if("event_msg"===b.type){let a=d.type;("user_message"===a||"agent_message"===a)&&l++,"user_message"===a&&"string"==typeof d.message&&(j=u(j,d.message));continue}if("response_item"===b.type&&"message"===d.type){let a=d.role;("user"===a||"assistant"===a)&&m++,"user"===a&&(j=u(j,(c=d.content,"string"==typeof c?c:Array.isArray(c)?c.map(a=>r(a)?"string"==typeof a.text?a.text:"string"==typeof a.content?a.content:"":"").filter(Boolean).join("\n"):"")))}}}return d=b.id,e=b.cwd,k().set(d,e),{id:b.id,path:a,cwd:b.cwd,cwdExists:(0,f.existsSync)(b.cwd),created:b.created,modified:g.mtime.toISOString(),messageCount:l||m||+!!j,firstMessage:j||"(no messages)"}}function w(a){let b=o();if(!a||!(0,f.existsSync)(b))return null;let c=q(b);for(let b of[...c.filter(b=>b.includes(a)),...c.filter(b=>!b.includes(a))]){let c=t(b);if(c?.id===a)return v(b,c)}return null}async function x(a,b,c){var d,e,f,h;let i,j=(0,g.DY)(b),l=j??await (0,g.gu)(b),m=null;try{m=await (0,g.nj)(l,a)}finally{j||(0,g.sM)(l)}if(!m)return{context:{messages:[],entryIds:[],thinkingLevel:"off",model:null},tree:[],leafId:null,thread:null};d=m.id,e=m.cwd||b,k().set(d,e);let n=z(m),o=c?(f=n,h=c,(i=f.findIndex(a=>a.id===h))>=0?f.slice(0,i+1):f):n,p=[],q=[];for(let a of o)p.push(a.message),q.push(a.id);let r=o[o.length-1]?.id??n[n.length-1]?.id??null;return{context:{messages:p,entryIds:q,thinkingLevel:"off",model:m.model?{provider:m.modelProvider??"codex",modelId:m.model}:null},tree:function(a){let b=new Map,c=[];for(let c of a)b.set(c.id,{entry:c,children:[]});for(let d of a){let a=b.get(d.id);d.parentId&&b.has(d.parentId)?b.get(d.parentId).children.push(a):c.push(a)}return c}(n),leafId:r,thread:m}}async function y(a,b){let c=await x(a,b);return z(c.thread)}function z(a){if(!a)return[];let b=[],c=null;for(let e of a.turns??[]){var d;let f=(d=a.updatedAt,"number"==typeof d&&Number.isFinite(d)?new Date(1e3*d).toISOString():"string"==typeof d&&d?d:new Date(0).toISOString());for(let d of e.items){let e=function(a,b){if("userMessage"===a.type)return{role:"user",content:function(a){let b=[];for(let c of a)"text"===c.type?b.push({type:"text",text:c.text}):"image"===c.type?b.push({type:"text",text:`[image] ${c.url.slice(0,120)}`}):"localImage"===c.type?b.push({type:"text",text:`[image] ${c.path}`}):"mention"===c.type?b.push({type:"text",text:`@${c.path}`}):"skill"===c.type&&b.push({type:"text",text:`$${c.name}`});return 0===b.length?"":1===b.length?b[0].text:b}(a.content??[])};if("agentMessage"===a.type)return{role:"assistant",content:[{type:"text",text:a.text??""}],model:b.model??"unknown",provider:b.modelProvider??"codex"};if("reasoning"===a.type){let c=[...a.summary??[],...a.content??[]].join("\n").trim();return c?{role:"assistant",content:[{type:"thinking",thinking:c}],model:b.model??"unknown",provider:b.modelProvider??"codex"}:null}if("commandExecution"===a.type){let b=[a.aggregatedOutput??"",null!==a.exitCode&&void 0!==a.exitCode?`Exit code: ${a.exitCode}`:""].filter(Boolean).join("\n");return A(a.id,"bash",b,"failed"===a.status||"declined"===a.status)}return"fileChange"===a.type?A(a.id,"edit",JSON.stringify(a.changes??[]),"failed"===a.status||"declined"===a.status):"mcpToolCall"===a.type?A(a.id,a.tool||a.server||"mcp",JSON.stringify(a.result??a.error??""),!!a.error):"dynamicToolCall"===a.type?A(a.id,a.tool||"tool",JSON.stringify(a.contentItems??[]),!1===a.success):null}(d,a);if(!e)continue;let g={type:"message",id:d.id,parentId:c,timestamp:f,message:e};b.push(g),c=d.id}}return b}function A(a,b,c,d){return{role:"toolResult",toolCallId:a,toolName:b,content:[{type:"text",text:c}],isError:d}}g=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},46983:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DY:()=>u,gu:()=>r,nj:()=>t,sM:()=>s});var e=c(79646),f=c(56220),g=c(29021),h=c(33873),i=c(91645),j=c(55399),k=c(65833),l=c(99526),m=c(39006),n=a([f]);f=(n.then?(await n)():n)[0];class v{constructor(a,b,c){this.cwd=a,this.url=b,this.serverKey=c,this.ws=null,this.pending=new Map,this.nextId=1,this.notificationHandlers=new Map,this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=1e3,this._closed=!1}isConnected(){return this.ws?.readyState===f.WebSocket.OPEN}isClosed(){return this._closed}async connect(){let{default:a}=await Promise.resolve().then(c.bind(c,56220)),b=this.url;return this._closed=!1,new Promise((c,d)=>{let e=new a(b);this.ws=e,e.on("open",()=>{this.reconnectAttempts=0,this.initialize().then(c).catch(d)}),e.on("message",a=>{try{let b=JSON.parse(a.toString());this.handleMessage(b)}catch{}}),e.on("close",()=>{this.handleDisconnect()}),e.on("error",a=>{0===this.reconnectAttempts&&d(a)})})}async initialize(){let a=await this.request("initialize",{clientInfo:{name:"annodex",title:k.C3,version:m.rE},capabilities:{experimentalApi:!0}});this.serverInfo=a}request(a,b,c=3e5){if(!this.ws||this.ws.readyState!==f.WebSocket.OPEN)return Promise.reject(Error(`Codex server not connected (method: ${a})`));let d=this.nextId++;return new Promise((e,f)=>{let g=setTimeout(()=>{this.pending.delete(d),f(Error(`Request timeout: ${a}`))},c);this.pending.set(d,{resolve:e,reject:f,timer:g}),this.ws.send(JSON.stringify({jsonrpc:"2.0",id:d,method:a,params:b}))})}onNotification(a,b){let c=this.notificationHandlers.get(a)??[];return c.push(b),this.notificationHandlers.set(a,c),()=>{let c=this.notificationHandlers.get(a);if(c){let a=c.indexOf(b);-1!==a&&c.splice(a,1)}}}handleMessage(a){if("method"in a&&"id"in a)return void this.respondToServerRequest(a);if("method"in a&&!("id"in a)){let b=this.notificationHandlers.get(a.method);if(b)for(let c of[...b])c(a.params);return}if("id"in a&&("result"in a||"error"in a)){let b=this.pending.get(a.id);b&&(clearTimeout(b.timer),this.pending.delete(a.id),"error"in a&&a.error?b.reject(Error(a.error.message??"JSON-RPC error")):b.resolve(a.result))}}respondToServerRequest(a){if(!this.ws||this.ws.readyState!==f.WebSocket.OPEN)return;let b=function(a){switch(a){case"item/commandExecution/requestApproval":case"item/fileChange/requestApproval":return{decision:"decline"};case"applyPatchApproval":case"execCommandApproval":return{decision:"denied"};case"item/tool/requestUserInput":return{answers:{}};case"mcpServer/elicitation/request":return{action:"decline",content:null,_meta:null};case"item/permissions/requestApproval":return{permissions:{},scope:"turn"};case"item/tool/call":return{contentItems:[],success:!1};case"account/chatgptAuthTokens/refresh":return{accessToken:"",chatgptAccountId:"",chatgptPlanType:null};default:return{}}}(a.method),c={jsonrpc:"2.0",id:a.id,result:b};this.ws.send(JSON.stringify(c))}handleDisconnect(){for(let[,a]of this.pending)clearTimeout(a.timer),a.reject(Error("Codex server disconnected"));if(this.pending.clear(),!this._closed&&this.reconnectAttempts<this.maxReconnectAttempts){this.reconnectAttempts++;let a=this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1);setTimeout(()=>{this._closed||this.connect().catch(()=>{})},a)}}close(){this._closed=!0,this.ws?.close(),this.ws=null}}function o(a){if(a.connection?.close(),a.process?.pid)try{"win32"!==process.platform?process.kill(-a.process.pid,"SIGTERM"):a.process.kill("SIGTERM")}catch{try{a.process.kill("SIGTERM")}catch{}}a.compatProxy?.stop().catch(()=>{})}function p(){if(!globalThis.__codexServers){globalThis.__codexServers=new Map;let a=()=>{globalThis.__codexServers?.forEach(a=>{o(a)})};process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__codexServers}function q(a){return JSON.stringify(a)}async function r(a,b){let c,d,f,k,m,n,r=p(),s=a.replace(/\/+$/,"")||a,t=(c=s.replace(/\/+$/,"")||s,d=b?.providerId||b?.baseUrl||"default",f=b?.baseUrl?.replace(/\/+$/,"")||"default",k=b?.api||"default",m=b?.apiKey||"default",n=b?.contextWindow?String(b.contextWindow):"default",`${c}\0${d}\0${f}\0${k}\0${m}\0${n}`),u=r.get(t);if(u?.connection?.isConnected())return u.refCount++,u.connection;if(u?.startPromise)try{let a=await u.startPromise,b=r.get(t);return b&&b.refCount++,a}catch{}else u&&(o(u),r.delete(t));let w=await new Promise((a,b)=>{let c=(0,i.createServer)();c.unref(),c.on("error",b),c.listen(0,"127.0.0.1",()=>{let d=c.address();c.close(()=>{d&&"object"==typeof d?a(d.port):b(Error("Failed to allocate a local port"))})})}),x=`ws://127.0.0.1:${w}`,y=function(){let a=process.cwd();for(let b of[(0,h.join)(a,"node_modules",".bin","codex"),(0,h.join)(a,"..","..","node_modules",".bin","codex")])if((0,g.existsSync)(b))return b;return"codex"}(),z=(async()=>{let a=null,c=b?.baseUrl||void 0,d=function(a){let b=a?.trim();if(b){if(b.startsWith("!"))try{return(0,e.execSync)(b.slice(1),{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim()||void 0}catch{return}return/^[A-Za-z_][A-Za-z0-9_]*$/.test(b)&&process.env[b]?process.env[b]:b}}(b?.apiKey),f=b?.requiresOpenAiAuth??!!d,g=(0,l.pp)(b?.api,c,b?.providerId),h="openai-completions"===g,i=!1;if(h&&c&&d&&(0,j.s)(c)){let e=c.endsWith("/chat/completions")?c:c.replace(/\/+$/,"")+"/chat/completions";a=new j.F({targetUrl:e,apiKey:d,defaultThinking:b?.thinkingLevel??"disabled"});try{await a.start(),c=a.getBaseUrl(),i=!0,console.log(`[codex-server] Compat proxy started on port ${a.getPort()} for ${e}`)}catch(b){console.error("[codex-server] Failed to start compat proxy:",b),a=null}}let k={...process.env};d&&(k.OPENAI_API_KEY=d),c&&(k.OPENAI_BASE_URL=c);let m=["app-server","--listen",x];if(b?.contextWindow&&b.contextWindow>0&&m.push("-c",`model_context_window=${b.contextWindow}`),b?.providerId&&c){var n;let a=(n=b.providerId,/^[A-Za-z0-9_-]+$/.test(n)?n:q(n)),d=function(a,b){if(b)return"responses";let c=(0,l.pp)(a);return"openai-responses"===c?"responses":"openai-completions"===c?"chat":null}(g,i);m.push("-c",`model_provider=${q(b.providerId)}`),m.push("-c",`model_providers.${a}.name=${q(b.providerId)}`),m.push("-c",`model_providers.${a}.base_url=${q(c.replace(/\/+$/,""))}`),d&&m.push("-c",`model_providers.${a}.wire_api=${q(d)}`),m.push("-c",`model_providers.${a}.requires_openai_auth=${f?"true":"false"}`)}let o=null,p=(0,e.spawn)(y,m,{cwd:s,stdio:["ignore","pipe","pipe"],env:k,detached:"win32"!==process.platform}),u=[];p.stderr?.on("data",a=>{u.push(a.toString())}),p.stdout?.on("data",()=>{}),p.on("error",a=>{console.error(`[codex-server] Process error for ${s}:`,a.message)}),p.on("exit",()=>{let b=r.get(t);b?.process===p&&(r.delete(t),a?.stop().catch(()=>{}),o?.close())}),await new Promise(a=>setTimeout(a,500)),o=new v(s,x,t);for(let b=0;b<10;b++)try{await o.connect();break}catch{if(b<9)await new Promise(a=>setTimeout(a,500));else{try{"win32"!==process.platform?process.kill(-p.pid,"SIGTERM"):p.kill("SIGTERM")}catch{p.kill("SIGTERM")}await a?.stop().catch(()=>{});let b=u.join("");throw Error(`Failed to connect to codex app-server after 10 attempts.
|
|
2
|
-
stderr: ${b.slice(-500)}`)}}let z={process:p,connection:o,compatProxy:a,port:w,cwd:s,refCount:1,startPromise:null};return r.set(t,z),o})();r.set(t,{process:null,connection:null,compatProxy:null,port:w,cwd:s,refCount:0,startPromise:z});try{return await z}catch(a){throw r.delete(t),a}}function s(a){let b=p(),c=b.get(a.serverKey);c&&(c.refCount--,c.refCount<=0&&(o(c),b.delete(a.serverKey)))}async function t(a,b){return(await a.request("thread/read",{threadId:b,includeTurns:!0})).thread??null}function u(a){let b=p(),c=a.replace(/\/+$/,"")||a;for(let a of b.values())if(a.cwd===c&&a.connection?.isConnected())return a.connection}d()}catch(a){d(a)}})},55399:(a,b,c)=>{"use strict";c.d(b,{F:()=>k,s:()=>n});var d=c(81630),e=c(55591),f=c(1932),g=c(55511);function h(a){return"function"===a.type&&"string"==typeof a.name||"string"==typeof a.name?{type:"function",function:{name:a.name,description:"string"==typeof a.description?a.description:void 0,parameters:a.parameters}}:null}let i={deepseek:{supportsEffort:!0,effortMap:{off:null,minimal:"high",low:"high",medium:"high",high:"high",xhigh:"max"}},kimi:{supportsEffort:!1,effortMap:{off:null,minimal:"enabled",low:"enabled",medium:"enabled",high:"enabled",xhigh:"enabled"}},glm:{supportsEffort:!0,effortMap:{off:null,minimal:"low",low:"low",medium:"medium",high:"high",xhigh:"high"}},qwen:{supportsEffort:!1,effortMap:{off:null,minimal:"enabled",low:"enabled",medium:"enabled",high:"enabled",xhigh:"enabled"}},siliconflow:{supportsEffort:!0,effortMap:{off:null,minimal:"high",low:"high",medium:"high",high:"high",xhigh:"max"}},generic:{supportsEffort:!1,effortMap:{off:null,minimal:"enabled",low:"enabled",medium:"enabled",high:"enabled",xhigh:"enabled"}}};function j(a){if(!a)return"off";let b=a.trim().toLowerCase();return"xhigh"===b||"max"===b?"xhigh":"high"===b?"high":"medium"===b?"medium":"low"===b?"low":"minimal"===b?"minimal":"off"===b||"disabled"===b||"0"===b||"false"===b?"off":"medium"}class k{constructor(a){this.server=null,this.port=0,this.targetUrl=a.targetUrl.endsWith("/chat/completions")?a.targetUrl:a.targetUrl.replace(/\/+$/,"")+"/chat/completions",this.apiKey=a.apiKey,this.defaultThinking=a.defaultThinking??"disabled",a.port&&(this.port=a.port)}async start(){return new Promise((a,b)=>{this.server=(0,d.createServer)((a,b)=>this.handleRequest(a,b)),this.server.on("error",b),this.server.listen(this.port,"127.0.0.1",()=>{let c=this.server.address();c&&"object"==typeof c?(this.port=c.port,a(this.port)):b(Error("Failed to get server address"))})})}async stop(){return new Promise(a=>{this.server?(this.server.close(()=>a()),this.server=null):a()})}getPort(){return this.port}getBaseUrl(){return`http://127.0.0.1:${this.port}/v1`}handleRequest(a,b){if("/health"===a.url){b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({status:"ok",target:this.targetUrl}));return}if("POST"!==a.method||!a.url?.startsWith("/v1/responses")){b.writeHead(404),b.end();return}let c=[];a.on("data",a=>c.push(a)),a.on("end",()=>{try{let d=JSON.parse(Buffer.concat(c).toString());this.proxyRequest(d,a,b)}catch{b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"Invalid JSON"}))}})}proxyRequest(a,b,c){let k=!0===a.stream,m=function(a,b){let c={model:a.model||"deepseek-chat",messages:[]};a.instructions&&c.messages.push({role:"system",content:a.instructions});let d=a.input;if("string"==typeof d)c.messages.push({role:"user",content:d});else if(Array.isArray(d))for(let a of d){let b=function(a){if("string"==typeof a)return{role:"user",content:a};if("message"===a.type){let b=function(a){let b=(a||"user").trim().toLowerCase();return"developer"===b?"system":["system","user","assistant","tool"].includes(b)?b:"user"}(a.role),c="";return"string"==typeof a.content?c=a.content:Array.isArray(a.content)&&(c=a.content.filter(a=>!a.type?.startsWith("input_image")).map(a=>a.text??a.text??"").join("\n")),{role:b,content:c||null}}if("function_call"===a.type)return{role:"assistant",content:null,tool_calls:[{id:a.call_id,type:"function",function:{name:a.name,arguments:a.arguments}}]};if("function_call_output"===a.type){let b=a.output;return"string"!=typeof b&&(b=JSON.stringify(b)),{role:"tool",content:b,tool_call_id:a.call_id}}return null}(a);b&&c.messages.push(b)}Array.isArray(a.tools)&&a.tools.length>0&&(c.tools=a.tools.map(h).filter(a=>null!==a)),void 0!==a.tool_choice&&(c.tool_choice=function(a){if("string"==typeof a)return a;if("object"==typeof a&&null!==a){if("function"===a.type&&"string"==typeof a.name)return{type:"function",function:{name:a.name}};if("string"==typeof a.type)return a.type}return a}(a.tool_choice)),void 0!==a.temperature&&(c.temperature=a.temperature),void 0!==a.top_p&&(c.top_p=a.top_p),void 0!==a.max_output_tokens&&(c.max_tokens=a.max_output_tokens),void 0!==a.stream&&(c.stream=a.stream),void 0!==a.stop&&(c.stop=a.stop),void 0!==a.frequency_penalty&&(c.frequency_penalty=a.frequency_penalty),void 0!==a.presence_penalty&&(c.presence_penalty=a.presence_penalty);let{thinking:e,reasoningEffort:f}=function(a,b,c){let d,e=i[(d=(c||"").toLowerCase()).includes("deepseek")?"deepseek":d.includes("kimi")||d.includes("moonshot")?"kimi":d.includes("glm")||d.includes("zhipu")||d.includes("chatglm")?"glm":d.includes("qwen")?"qwen":d.includes("siliconflow")||d.includes("pro/")?"siliconflow":"generic"]??i.generic,f="off";if(a&&"object"==typeof a){if(!1===a.enabled)return{thinking:{type:"disabled"},reasoningEffort:void 0};f=j(a.effort)}else f=j(b);let g=e.effortMap[f];return null===g?{thinking:{type:"disabled"},reasoningEffort:void 0}:e.supportsEffort&&"enabled"!==g?{thinking:{type:"enabled"},reasoningEffort:g}:{thinking:{type:"enabled"},reasoningEffort:void 0}}(a.reasoning,b,a.model);return c.thinking=e,f&&(c.reasoning_effort=f),c}(a,this.defaultThinking);k&&(m.stream=!0,m.stream_options={include_usage:!0});let n=new f.URL(this.targetUrl),o="https:"===n.protocol,p=(o?e.request:d.request)({hostname:n.hostname,port:n.port||(o?443:80),path:n.pathname+n.search,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}},b=>{if(200!==b.statusCode){let a=[];b.on("data",b=>a.push(b)),b.on("end",()=>{c.writeHead(b.statusCode||502,{"Content-Type":"application/json"}),c.end(Buffer.concat(a))});return}if(k){c.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});let d={responseId:`resp_${(0,g.randomBytes)(12).toString("hex")}`,messageId:`msg_${(0,g.randomBytes)(12).toString("hex")}`,createdAt:Math.floor(Date.now()/1e3),model:a.model||"unknown",fullText:"",itemStarted:!1,contentStarted:!1,nextOutputIndex:1,seenToolCalls:new Set,finalUsage:null},e={id:d.responseId,object:"response",created_at:d.createdAt,status:"in_progress",model:d.model,output:[]};c.write(l("response.created",{type:"response.created",response:e})),c.write(l("response.in_progress",{type:"response.in_progress",response:e}));let f="";b.on("data",a=>{for(f+=a.toString("utf-8");f.includes("\n");){let a=f.indexOf("\n"),b=f.slice(0,a).trim();if(f=f.slice(a+1),!(!b||b.startsWith(":"))&&"data: [DONE]"!==b&&b.startsWith("data: "))try{let a=JSON.parse(b.slice(6));for(let b of function*(a,b){let c=a.choices||[];if(0===c.length)return;let d=c[0].delta||{},e=d.reasoning_content||d.content||"";for(let a of(e&&(b.fullText+=e,b.itemStarted||(b.itemStarted=!0,yield l("response.output_item.added",{type:"response.output_item.added",output_index:0,item:{id:b.messageId,type:"message",status:"in_progress",role:"assistant",content:[]}})),b.contentStarted||(b.contentStarted=!0,yield l("response.content_part.added",{type:"response.content_part.added",item_id:b.messageId,output_index:0,content_index:0,part:{type:"output_text",text:"",annotations:[]}})),yield l("response.output_text.delta",{type:"response.output_text.delta",item_id:b.messageId,output_index:0,content_index:0,delta:e})),d.tool_calls||[])){let c=a.id,d=a.function||{};c&&!b.seenToolCalls.has(c)&&(b.seenToolCalls.add(c),yield l("response.output_item.added",{type:"response.output_item.added",output_index:b.nextOutputIndex++,item:{id:`fc_${c}`,type:"function_call",status:"in_progress",call_id:c,name:d.name||"",arguments:d.arguments||""}}))}a.usage&&(b.finalUsage=a.usage)}(a,d))c.write(b)}catch{}}}),b.on("end",()=>{let a,b;for(let e of(a=[],d.itemStarted&&(a.push(l("response.content_part.done",{type:"response.content_part.done",item_id:d.messageId,output_index:0,content_index:0,part:{type:"output_text",text:d.fullText,annotations:[]}})),a.push(l("response.output_item.done",{type:"response.output_item.done",item:{id:d.messageId,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:d.fullText,annotations:[]}]}}))),b=d.finalUsage||{},a.push(l("response.completed",{type:"response.completed",response:{id:d.responseId,object:"response",created_at:d.createdAt,status:"completed",model:d.model,output:d.itemStarted?[{id:d.messageId,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:d.fullText,annotations:[]}]}]:[],usage:{input_tokens:b.prompt_tokens||0,output_tokens:b.completion_tokens||0,total_tokens:b.total_tokens||0}}})),a))c.write(e);c.end()}),b.on("error",()=>{c.end()})}else{let d=[];b.on("data",a=>d.push(a)),b.on("end",()=>{try{let b=JSON.parse(Buffer.concat(d).toString()),e=function(a,b){let c=`resp_${(0,g.randomBytes)(12).toString("hex")}`,d=[],e=a.choices||[];if(e.length>0){let a=e[0].message||{},b=a.content,c=a.reasoning_content,f=b||c||"";for(let b of(f&&d.push({id:`msg_${(0,g.randomBytes)(12).toString("hex")}`,type:"message",status:"completed",role:"assistant",content:[{type:"output_text",text:f,annotations:[]}]}),a.tool_calls||[]))d.push({id:`fc_${(0,g.randomBytes)(12).toString("hex")}`,type:"function_call",status:"completed",call_id:b.id,name:b.function?.name||"",arguments:b.function?.arguments||""})}let f=a.usage||{},h={input_tokens:f.prompt_tokens||0,output_tokens:f.completion_tokens||0,total_tokens:f.total_tokens||0};return{id:c,object:"response",created_at:Math.floor(Date.now()/1e3),status:"completed",model:b,output:d,usage:h}}(b,a.model||"unknown");c.writeHead(200,{"Content-Type":"application/json"}),c.end(JSON.stringify(e))}catch{c.writeHead(200,{"Content-Type":"application/json"}),c.end(Buffer.concat(d))}})}});p.on("error",a=>{c.writeHead(502,{"Content-Type":"application/json"}),c.end(JSON.stringify({error:`Upstream error: ${a.message}`}))}),p.write(JSON.stringify(m)),p.end()}}function l(a,b){return`event: ${a}
|
|
3
|
-
data: ${JSON.stringify(b)}
|
|
4
|
-
|
|
5
|
-
`}let m=[/deepseek/i,/moonshot/i,/zhipu|bigmodel/i,/qwen/i,/kimi/i,/minimax/i,/siliconflow/i,/openrouter/i,/together/i,/groq/i,/dashscope/i,/lingyiwanwu|yi-api/i,/stepfun|step-api/i,/baichuan/i,/deeprouter/i];function n(a){if(!a)return!1;let b=a.toLowerCase();return!b.includes("api.openai.com")&&m.some(a=>a.test(b))}},65833:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>f,C3:()=>d,JD:()=>e});let d="annodex",e="@seqyuan/annodex",f="annodex update"},78335:()=>{},89035:(a,b,c)=>{"use strict";c.d(b,{R:()=>f});var d=c(33873),e=c(21820);function f(){return process.env.CODEX_HOME?.trim()||(0,d.join)((0,e.homedir)(),".codex")}},96487:()=>{},99526:(a,b,c)=>{"use strict";c.d(b,{DL:()=>j,mi:()=>g,pp:()=>i});let d=["openai-responses","openai-completions"],e=[/\/chat\/completions(?:$|[?#])/i,/deepseek/i,/moonshot|kimi/i,/dashscope|aliyun|qwen/i,/zhipu|bigmodel|chatglm|glm/i,/siliconflow/i,/volcengine|ark\.cn|doubao/i,/baichuan/i,/minimax/i,/stepfun|step-api/i,/lingyiwanwu|yi-api/i],f=[/api\.openai\.com/i,/deeprouter/i,/\/responses(?:$|[?#])/i];function g(a){return"string"==typeof a&&d.includes(a)}function h(a,b,c="openai-responses"){let d=`${b??""} ${a??""}`.toLowerCase();return d.trim()?f.some(a=>a.test(d))?"openai-responses":e.some(a=>a.test(d))?"openai-completions":c:c}function i(a,b,c){return g(a)?a:h(b,c)}function j(a,b,c){return"responses"===a?"openai-responses":"chat"===a||"chat_completions"===a||"chat-completions"===a?"openai-completions":b||c?h(b,c):void 0}}};
|