@linzumi/cli 1.0.292 → 1.0.295

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.
@@ -170,7 +170,7 @@ Options:
170
170
  --linzumi-url <url> Server URL (defaults to the production server).
171
171
  --token <token> Explicit access token (defaults to cached login).
172
172
  -h, --help Show this help.
173
- `}var vs=["workspace","topic","kind","preview","body","payload-json","dedupe-key","title","linzumi-url","api-url","token"],Os=["json","help","no-create"];function El(e){let t=[],r={},n,i=0;for(;ri(n)&&i<e.length;){let l=e[i];if(l==="-h"||l==="--help")r.help="FlagOn";else if(l.startsWith("--")){let a=Xr(l,"="),s=a!==void 0?l.slice(2,a):l.slice(2);if(Os.includes(s))a!==void 0?n="--"+s+" does not take a value":r[s]="FlagOn";else if(vs.includes(s))if(a!==void 0)r[s]={TAG:"FlagString",_0:l.slice(a+1|0)};else{let f=e[i+1|0],u=0;f!==void 0&&!f.startsWith("--")?(r[s]={TAG:"FlagString",_0:f},i=i+1|0):u=1,u===1&&(n="--"+s+" requires a value")}else n="unknown flag --"+s+" (see: linzumi topics --help)"}else t.push(l);i=i+1|0}let o=n;return o!==void 0?{TAG:"Error",_0:o}:{TAG:"Ok",_0:{subcommand:t[0],flags:r}}}function ye(e,t){let r=e[t];if(typeof r=="object")return r._0}function Hn(e,t){let r=e[t];return r!==void 0?typeof r!="object":!1}function ws(e){let t;try{t=JSON.parse(e)}catch{return{TAG:"Error",_0:"--payload-json must be valid JSON"}}return typeof t=="object"&&t!==null&&!Array.isArray(t)?{TAG:"Ok",_0:void 0}:{TAG:"Error",_0:"--payload-json must be a JSON object"}}function ae(e,t){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e[t]}function Jt(e){if(typeof e=="string")return e}function Sl(e){if(typeof e=="boolean")return e}function xs(e){if(typeof e=="number")return e}function Es(e,t,r,n){let i=ae(n,"errors"),o=i!==void 0?Array.isArray(i)?i:[]:[];if(o.length!==0){let a=De(o,s=>q(ae(s,"extensions"),f=>Jt(ae(f,"code"))));return a.includes("PERSISTED_DOCUMENT_NOT_FOUND")?"DocumentNotFound":{TAG:"GraphqlErrors",_0:{messages:o.map(s=>I(Jt(ae(s,"message")),"unknown error")),codes:a}}}if(!e)return{TAG:"HttpFailure",_0:"HTTP "+t.toString()+" "+r};let l=ae(n,"data");return l!==void 0?{TAG:"Data",_0:l}:{TAG:"HttpFailure",_0:"empty response body"}}function Tl(e){if(typeof e!="object")return"topics request failed";switch(e.TAG){case"Data":return"topics request failed";case"GraphqlErrors":let t=e._0;if(t.codes.includes("FREE_FORM_GRAPHQL_FORBIDDEN"))return"this Linzumi server does not know this CLI version's topics documents yet (its persisted-document manifest predates them); nothing was changed - retry after the next server deploy";let r=t.messages;return r.some(i=>{let o=i.toLowerCase();return o.includes("cannot query field")||o.includes("unknown argument")||o.includes("unknown type")||o.includes("unknown field")?!0:o.includes("has invalid value $input")})?"this Linzumi server does not support topics yet (the topics server rollout has not reached it); nothing was changed":"topics request returned errors: "+r.join("; ");case"HttpFailure":return"topics request failed: "+e._0}}function ks(e,t,r){let n=async i=>{let o=Object.fromEntries([["content-type","application/json"],["authorization","Bearer "+t]]),l=await r(e,{method:"POST",headers:o,body:JSON.stringify(i)}),a;try{a=await l.json()}catch{a=null}return Es(l.ok,l.status,l.statusText,a)};return async(i,o)=>{let l=await n(Object.fromEntries([["documentId",i.documentId],["operationName",i.operationName],["variables",o]]));if(typeof l!="object"){let a=await n(Object.fromEntries([["query",i.text],["operationName",i.operationName],["variables",o]]));return typeof a!="object"||a.TAG!=="Data"?{TAG:"Error",_0:Tl(a)}:{TAG:"Ok",_0:a._0}}switch(l.TAG){case"Data":return{TAG:"Ok",_0:l._0};case"GraphqlErrors":case"HttpFailure":return{TAG:"Error",_0:Tl(l)}}}}function bs(e){return Object.fromEntries([["workspaceSlug",e.workspaceSlug],["slug",e.topicSlug]])}async function Al(e,t){let r=await e(Ol,bs(t));return r.TAG==="Ok"?{TAG:"Ok",_0:Jt(q(ae(r._0,"topic"),n=>ae(n,"id")))}:{TAG:"Error",_0:r._0}}async function Gs(e,t){if(!Kn.includes(t.kind))return{TAG:"Error",_0:'unknown entry kind "'+t.kind+'" (one of: '+Kn.join(", ")+")"};let r=t.payloadJson,n=r!==void 0?ws(r):{TAG:"Ok",_0:void 0};if(n.TAG!=="Ok")return{TAG:"Error",_0:n._0};let i=await Al(e,t);if(i.TAG!=="Ok")return{TAG:"Error",_0:i._0};let o=i._0,l;if(o!==void 0)l={TAG:"Ok",_0:[o,!1]};else if(t.createMissing){let g=Object.fromEntries([["workspaceSlug",t.workspaceSlug],["slug",t.topicSlug]]),S=t.title;S!==void 0&&(g.title=S);let T=await e(wl,Object.fromEntries([["input",g]]));if(T.TAG==="Ok"){let C=ae(T._0,"createTopic"),N=I(Sl(q(C,b=>ae(b,"ok"))),!1),H=Jt(q(q(C,b=>ae(b,"topic")),b=>ae(b,"id"))),K=Jt(q(C,b=>ae(b,"error"))),x=0;if(N&&H!==void 0?l={TAG:"Ok",_0:[H,!0]}:x=1,x===1){let b;if(K!==void 0){let F=K.toLowerCase();b=F.includes("taken")||F.includes("slug")}else b=!1;if(b){let F=await Al(e,t),J=0;if(F.TAG==="Ok"){let L=F._0;L!==void 0?l={TAG:"Ok",_0:[L,!1]}:J=2}else J=2;J===2&&(l={TAG:"Error",_0:'could not create topic "'+t.topicSlug+'": '+I(K,"unknown error")})}else l={TAG:"Error",_0:'could not create topic "'+t.topicSlug+'": '+I(K,"unknown error")}}}else l={TAG:"Error",_0:T._0}}else l={TAG:"Error",_0:'topic "'+t.topicSlug+'" does not exist in workspace "'+t.workspaceSlug+'" (drop --no-create to auto-create it)'};if(l.TAG!=="Ok")return{TAG:"Error",_0:l._0};let a=l._0,s=Object.fromEntries([["topicId",a[0]],["kind",t.kind.toUpperCase()]]),f=t.preview;f!==void 0&&(s.previewText=f);let u=t.body;u!==void 0&&(s.body=u);let m=t.payloadJson;m!==void 0&&(s.payloadJson=m);let c=t.dedupeKey;c!==void 0&&(s.dedupeKey=c);let d=await e(xl,Object.fromEntries([["input",s]]));if(d.TAG!=="Ok")return{TAG:"Error",_0:d._0};let p=ae(d._0,"postTopicEntry"),h=I(Sl(q(p,g=>ae(g,"ok"))),!1),_=xs(q(q(p,g=>ae(g,"entry")),g=>ae(g,"entrySeq")));if(h&&_!==void 0)return{TAG:"Ok",_0:{topicSlug:t.topicSlug,entrySeq:_|0,created:a[1]}};let y=Jt(q(p,g=>ae(g,"error")));return{TAG:"Error",_0:'could not post to topic "'+t.topicSlug+'": '+I(y,"unknown error")}}async function Cs(e,t){let r=t.stdout,n=r!==void 0?r:a=>{process.stdout.write(a)},i=t.stderr,o=i!==void 0?i:a=>{process.stderr.write(a)},l=El(e);if(l.TAG==="Ok"){let a=l._0,s=a.flags,f=a.subcommand;if(Hn(s,"help"))return n(Vn()),0;if(f!==void 0){if(f==="post"){let u=ye(s,"workspace"),m=ye(s,"topic");if(u!==void 0){if(m!==void 0){let c=I(Kr(ye(s,"linzumi-url"),ye(s,"api-url")),t.defaultUrl),d,p=0,h;try{let _=ye(s,"token");h=await(_!==void 0?t.resolveToken({kandanUrl:c,explicitToken:_}):t.resolveToken({kandanUrl:c})),p=1}catch(_){let y=j(_);if(y.RE_EXN_ID==="JsExn")d={TAG:"Error",_0:I(Ae(y._1),"token resolution failed")};else throw y}if(p===1){let _=ks(t.graphqlEndpoint(c),h,I(t.fetchImpl,fetch));d=await Gs(_,{workspaceSlug:u,topicSlug:m,kind:I(ye(s,"kind"),"status"),preview:ye(s,"preview"),body:ye(s,"body"),payloadJson:ye(s,"payload-json"),dedupeKey:ye(s,"dedupe-key"),title:ye(s,"title"),createMissing:!Hn(s,"no-create")})}if(d.TAG==="Ok"){let _=d._0;if(Hn(s,"json")){let y=Object.fromEntries([["topicSlug",_.topicSlug],["entrySeq",_.entrySeq],["created",_.created]]);n(JSON.stringify(y)+`
173
+ `}var vs=["workspace","topic","kind","preview","body","payload-json","dedupe-key","title","linzumi-url","api-url","token"],Os=["json","help","no-create"];function El(e){let t=[],r={},n,i=0;for(;ri(n)&&i<e.length;){let l=e[i];if(l==="-h"||l==="--help")r.help="FlagOn";else if(l.startsWith("--")){let a=Xr(l,"="),s=a!==void 0?l.slice(2,a):l.slice(2,l.length);if(Os.includes(s))a!==void 0?n="--"+s+" does not take a value":r[s]="FlagOn";else if(vs.includes(s))if(a!==void 0)r[s]={TAG:"FlagString",_0:l.slice(a+1|0,l.length)};else{let f=e[i+1|0],u=0;f!==void 0&&!f.startsWith("--")?(r[s]={TAG:"FlagString",_0:f},i=i+1|0):u=1,u===1&&(n="--"+s+" requires a value")}else n="unknown flag --"+s+" (see: linzumi topics --help)"}else t.push(l);i=i+1|0}let o=n;return o!==void 0?{TAG:"Error",_0:o}:{TAG:"Ok",_0:{subcommand:t[0],flags:r}}}function ye(e,t){let r=e[t];if(typeof r=="object")return r._0}function Hn(e,t){let r=e[t];return r!==void 0?typeof r!="object":!1}function ws(e){let t;try{t=JSON.parse(e)}catch{return{TAG:"Error",_0:"--payload-json must be valid JSON"}}return typeof t=="object"&&t!==null&&!Array.isArray(t)?{TAG:"Ok",_0:void 0}:{TAG:"Error",_0:"--payload-json must be a JSON object"}}function ae(e,t){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e[t]}function Jt(e){if(typeof e=="string")return e}function Sl(e){if(typeof e=="boolean")return e}function xs(e){if(typeof e=="number")return e}function Es(e,t,r,n){let i=ae(n,"errors"),o=i!==void 0?Array.isArray(i)?i:[]:[];if(o.length!==0){let a=De(o,s=>q(ae(s,"extensions"),f=>Jt(ae(f,"code"))));return a.includes("PERSISTED_DOCUMENT_NOT_FOUND")?"DocumentNotFound":{TAG:"GraphqlErrors",_0:{messages:o.map(s=>I(Jt(ae(s,"message")),"unknown error")),codes:a}}}if(!e)return{TAG:"HttpFailure",_0:"HTTP "+t.toString()+" "+r};let l=ae(n,"data");return l!==void 0?{TAG:"Data",_0:l}:{TAG:"HttpFailure",_0:"empty response body"}}function Tl(e){if(typeof e!="object")return"topics request failed";switch(e.TAG){case"Data":return"topics request failed";case"GraphqlErrors":let t=e._0;if(t.codes.includes("FREE_FORM_GRAPHQL_FORBIDDEN"))return"this Linzumi server does not know this CLI version's topics documents yet (its persisted-document manifest predates them); nothing was changed - retry after the next server deploy";let r=t.messages;return r.some(i=>{let o=i.toLowerCase();return o.includes("cannot query field")||o.includes("unknown argument")||o.includes("unknown type")||o.includes("unknown field")?!0:o.includes("has invalid value $input")})?"this Linzumi server does not support topics yet (the topics server rollout has not reached it); nothing was changed":"topics request returned errors: "+r.join("; ");case"HttpFailure":return"topics request failed: "+e._0}}function ks(e,t,r){let n=async i=>{let o=Object.fromEntries([["content-type","application/json"],["authorization","Bearer "+t]]),l=await r(e,{method:"POST",headers:o,body:JSON.stringify(i)}),a;try{a=await l.json()}catch{a=null}return Es(l.ok,l.status,l.statusText,a)};return async(i,o)=>{let l=await n(Object.fromEntries([["documentId",i.documentId],["operationName",i.operationName],["variables",o]]));if(typeof l!="object"){let a=await n(Object.fromEntries([["query",i.text],["operationName",i.operationName],["variables",o]]));return typeof a!="object"||a.TAG!=="Data"?{TAG:"Error",_0:Tl(a)}:{TAG:"Ok",_0:a._0}}switch(l.TAG){case"Data":return{TAG:"Ok",_0:l._0};case"GraphqlErrors":case"HttpFailure":return{TAG:"Error",_0:Tl(l)}}}}function bs(e){return Object.fromEntries([["workspaceSlug",e.workspaceSlug],["slug",e.topicSlug]])}async function Al(e,t){let r=await e(Ol,bs(t));return r.TAG==="Ok"?{TAG:"Ok",_0:Jt(q(ae(r._0,"topic"),n=>ae(n,"id")))}:{TAG:"Error",_0:r._0}}async function Gs(e,t){if(!Kn.includes(t.kind))return{TAG:"Error",_0:'unknown entry kind "'+t.kind+'" (one of: '+Kn.join(", ")+")"};let r=t.payloadJson,n=r!==void 0?ws(r):{TAG:"Ok",_0:void 0};if(n.TAG!=="Ok")return{TAG:"Error",_0:n._0};let i=await Al(e,t);if(i.TAG!=="Ok")return{TAG:"Error",_0:i._0};let o=i._0,l;if(o!==void 0)l={TAG:"Ok",_0:[o,!1]};else if(t.createMissing){let g=Object.fromEntries([["workspaceSlug",t.workspaceSlug],["slug",t.topicSlug]]),S=t.title;S!==void 0&&(g.title=S);let T=await e(wl,Object.fromEntries([["input",g]]));if(T.TAG==="Ok"){let C=ae(T._0,"createTopic"),N=I(Sl(q(C,b=>ae(b,"ok"))),!1),H=Jt(q(q(C,b=>ae(b,"topic")),b=>ae(b,"id"))),K=Jt(q(C,b=>ae(b,"error"))),x=0;if(N&&H!==void 0?l={TAG:"Ok",_0:[H,!0]}:x=1,x===1){let b;if(K!==void 0){let F=K.toLowerCase();b=F.includes("taken")||F.includes("slug")}else b=!1;if(b){let F=await Al(e,t),J=0;if(F.TAG==="Ok"){let L=F._0;L!==void 0?l={TAG:"Ok",_0:[L,!1]}:J=2}else J=2;J===2&&(l={TAG:"Error",_0:'could not create topic "'+t.topicSlug+'": '+I(K,"unknown error")})}else l={TAG:"Error",_0:'could not create topic "'+t.topicSlug+'": '+I(K,"unknown error")}}}else l={TAG:"Error",_0:T._0}}else l={TAG:"Error",_0:'topic "'+t.topicSlug+'" does not exist in workspace "'+t.workspaceSlug+'" (drop --no-create to auto-create it)'};if(l.TAG!=="Ok")return{TAG:"Error",_0:l._0};let a=l._0,s=Object.fromEntries([["topicId",a[0]],["kind",t.kind.toUpperCase()]]),f=t.preview;f!==void 0&&(s.previewText=f);let u=t.body;u!==void 0&&(s.body=u);let m=t.payloadJson;m!==void 0&&(s.payloadJson=m);let c=t.dedupeKey;c!==void 0&&(s.dedupeKey=c);let d=await e(xl,Object.fromEntries([["input",s]]));if(d.TAG!=="Ok")return{TAG:"Error",_0:d._0};let p=ae(d._0,"postTopicEntry"),h=I(Sl(q(p,g=>ae(g,"ok"))),!1),_=xs(q(q(p,g=>ae(g,"entry")),g=>ae(g,"entrySeq")));if(h&&_!==void 0)return{TAG:"Ok",_0:{topicSlug:t.topicSlug,entrySeq:_|0,created:a[1]}};let y=Jt(q(p,g=>ae(g,"error")));return{TAG:"Error",_0:'could not post to topic "'+t.topicSlug+'": '+I(y,"unknown error")}}async function Cs(e,t){let r=t.stdout,n=r!==void 0?r:a=>{process.stdout.write(a)},i=t.stderr,o=i!==void 0?i:a=>{process.stderr.write(a)},l=El(e);if(l.TAG==="Ok"){let a=l._0,s=a.flags,f=a.subcommand;if(Hn(s,"help"))return n(Vn()),0;if(f!==void 0){if(f==="post"){let u=ye(s,"workspace"),m=ye(s,"topic");if(u!==void 0){if(m!==void 0){let c=I(Kr(ye(s,"linzumi-url"),ye(s,"api-url")),t.defaultUrl),d,p=0,h;try{let _=ye(s,"token");h=await(_!==void 0?t.resolveToken({kandanUrl:c,explicitToken:_}):t.resolveToken({kandanUrl:c})),p=1}catch(_){let y=j(_);if(y.RE_EXN_ID==="JsExn")d={TAG:"Error",_0:I(Ae(y._1),"token resolution failed")};else throw y}if(p===1){let _=ks(t.graphqlEndpoint(c),h,I(t.fetchImpl,fetch));d=await Gs(_,{workspaceSlug:u,topicSlug:m,kind:I(ye(s,"kind"),"status"),preview:ye(s,"preview"),body:ye(s,"body"),payloadJson:ye(s,"payload-json"),dedupeKey:ye(s,"dedupe-key"),title:ye(s,"title"),createMissing:!Hn(s,"no-create")})}if(d.TAG==="Ok"){let _=d._0;if(Hn(s,"json")){let y=Object.fromEntries([["topicSlug",_.topicSlug],["entrySeq",_.entrySeq],["created",_.created]]);n(JSON.stringify(y)+`
174
174
  `)}else{let y=_.created?" (topic auto-created)":"";n("posted entry #"+_.entrySeq.toString()+" to "+u+"/"+_.topicSlug+y+`
175
175
  `)}return 0}return o(d._0+`
176
176
  `),1}return o(`--workspace and --topic are required (see: linzumi topics --help)
@@ -0,0 +1,24 @@
1
+ {
2
+ "version": 1,
3
+ "sourceSha256": "0fe0761fe94c9791cdffb1ed2e271b4aee1ec777cdb984219da0ea1d3c2cc399",
4
+ "buildScriptSha256": "42e501268392badf5caa9ca0b64e28f0c3d7e437542c95512e362969cd1471cf",
5
+ "binarySha256": "17bfde6cfc50d5b5009d6a71da80cf4eb5606eae1438a27c47579e2851f7375d",
6
+ "architectures": [
7
+ "arm64",
8
+ "x86_64"
9
+ ],
10
+ "flags": [
11
+ "-std=c11",
12
+ "-Wall",
13
+ "-Wextra",
14
+ "-Werror",
15
+ "-Os",
16
+ "-arch",
17
+ "arm64",
18
+ "-arch",
19
+ "x86_64",
20
+ "-mmacosx-version-min=11.0"
21
+ ],
22
+ "compiler": "Apple clang version 21.0.0 (clang-2100.1.1.101)",
23
+ "sdkVersion": "26.5"
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "1.0.292",
3
+ "version": "1.0.295",
4
4
  "description": "Linzumi CLI \u2014 point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,9 @@
11
11
  "bin",
12
12
  "dist",
13
13
  "scripts",
14
- "!scripts/build-*-oracle.mjs"
14
+ "!scripts/build-*-oracle.mjs",
15
+ "native/darwin/linzumi-terminal-pty-helper",
16
+ "native/darwin/terminal-pty-helper.manifest.json"
15
17
  ],
16
18
  "scripts": {
17
19
  "build": "rescript build ../linzumi-cli-rescript && node scripts/build.mjs",
@@ -20,9 +20,14 @@ const requiredFiles = [
20
20
  'dist/topics-cli.mjs',
21
21
  'dist/tcp-tunnel-cli.mjs',
22
22
  'dist/native/darwin/preview-process-identity',
23
+ 'native/darwin/linzumi-terminal-pty-helper',
24
+ 'native/darwin/terminal-pty-helper.manifest.json',
23
25
  'dist/assets/linzumi-logo.svg',
24
26
  ];
25
- export const GUEST_BUNDLE_FLOOR_BYTES = {'dist/mcp-server.mjs': 100 * 1024, 'dist/crossHarnessFailover.mjs': 1024};
27
+ export const GUEST_BUNDLE_FLOOR_BYTES = {
28
+ 'dist/mcp-server.mjs': 100 * 1024,
29
+ 'dist/crossHarnessFailover.mjs': 1024,
30
+ };
26
31
 
27
32
  function formatMb(bytes) {
28
33
  return `${Math.round((bytes / (1024 * 1024)) * 100) / 100} MB`;
@@ -49,7 +54,8 @@ export function evaluatePackedPackage(packReport) {
49
54
  }
50
55
 
51
56
  for (const path of files.keys()) {
52
- if (/^dist\/impl-/.test(path)) failures.push(`obsolete implementation bundle: ${path}`);
57
+ if (/^dist\/impl-/.test(path))
58
+ failures.push(`obsolete implementation bundle: ${path}`);
53
59
  }
54
60
  for (const implBundle of ['dist/index.js']) {
55
61
  const size = files.get(implBundle) ?? 0;