@linzumi/cli 1.0.120 → 1.0.121
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/README.md +1 -1
- package/dist/impl-res/crossHarnessFailover.mjs +14 -0
- package/dist/impl-res/index.js +366 -0
- package/dist/impl-res/mcp-server.mjs +325 -0
- package/dist/impl-ts/assets/linzumi-logo.svg +1 -0
- package/dist/impl-ts/cloud-supervisor.mjs +18 -0
- package/dist/impl-ts/crossHarnessFailover.mjs +14 -0
- package/dist/impl-ts/index.js +2394 -0
- package/dist/impl-ts/mcp-server.mjs +424 -0
- package/dist/index.js +3 -2393
- package/package.json +1 -1
- package/scripts/build-differential-entry-impl-res.mjs +64 -0
- package/scripts/build-differential-entry.mjs +2 -2
- package/scripts/build.mjs +120 -10
- package/scripts/check-package-size-budget.mjs +186 -0
- package/dist/crossHarnessFailover.mjs +0 -6
- /package/dist/{assets → impl-res/assets}/linzumi-logo.svg +0 -0
- /package/dist/{cloud-supervisor.mjs → impl-res/cloud-supervisor.mjs} +0 -0
package/README.md
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
import{randomUUID as ae}from"node:crypto";import{mkdir as de,realpath as fe,writeFile as ce}from"node:fs/promises";import{homedir as K}from"node:os";import{join as U}from"node:path";function x(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function _(e){if(e===null||e.BS_PRIVATE_NESTED_SOME_NONE===void 0)return e;let t=e.BS_PRIVATE_NESTED_SOME_NONE;if(t!==0)return{BS_PRIVATE_NESTED_SOME_NONE:t-1|0}}function h(e,t){let r=e.length,i=new Array(r),n=0;for(let s=0;s<r;++s){let o=e[s],m=t(o);m!==void 0&&(i[n]=_(m),n=n+1|0)}return i.length=n,i}function g(e,t,r){return e!==void 0?r(_(e)):t}function k(e,t){if(e!==void 0)return x(t(_(e)))}function v(e,t){if(e!==void 0)return t(_(e))}function E(e,t){return e!==void 0?_(e):t}function H(e,t){let r=e[t];if(typeof r=="object"&&r!==null&&!Array.isArray(r))return r}function f(e,t){let r=e[t];if(typeof r=="string")return r}function T(e,t){let r=e[t];if(Array.isArray(r))return r}function G(e){return h(e,t=>{if(typeof t!="object"||t===null||Array.isArray(t))return;if(f(t,"type")==="text")return f(t,"text")}).join(`
|
|
4
|
+
`)}function R(e,t,r,i){return e+":"+t+":"+r+":"+i}function M(e,t){let r=t.split(":"),i=r[0],n=r[1],s=r[2];if(i===void 0||n===void 0||s===void 0||!(i===e&&n!==""&&s!==""&&r.length>=4))return;let o=r.slice(3,r.length).join(":");if(o!=="")return{keySessionId:n,keyTurnId:s,keyItemId:o}}function C(e,t){return{threadId:e,threadTitle:void 0,nodes:t,hasMore:!1,cursor:void 0,budget:void 0,session:void 0}}function ee(e,t,r){return R("codex",e,t,r)}function te(e){if(e===void 0)return"system_notice";switch(e){case"agentMessage":return"assistant_message";case"commandExecution":return"command_execution";case"fileChange":return"file_change";case"collabAgentToolCall":case"dynamicToolCall":case"mcpToolCall":return"tool_call";case"reasoning":return"reasoning";case"plan":case"subAgentActivity":return"agent_status";case"terminalInput":return"terminal_input";case"userMessage":return"user_message";default:return"system_notice"}}function j(e){return h(e,t=>{if(typeof t=="string")return t})}function re(e){let t=f(e,"type");if(t===void 0)return"";switch(t){case"collabAgentToolCall":return E(f(e,"prompt"),"");case"commandExecution":return E(f(e,"aggregatedOutput"),"");case"dynamicToolCall":return g(T(e,"contentItems"),"",G);case"fileChange":return g(T(e,"changes"),[],n=>h(n,s=>{if(typeof s=="object"&&s!==null&&!Array.isArray(s))return f(s,"path")})).join(`
|
|
5
|
+
`);case"mcpToolCall":return g(v(H(e,"result"),n=>T(n,"content")),"",G);case"reasoning":let r=g(T(e,"summary"),[],j),i=g(T(e,"content"),[],j);return r.concat(i).filter(n=>n!=="").join(`
|
|
6
|
+
|
|
7
|
+
`);case"subAgentActivity":return E(f(e,"agentPath"),"");case"agentMessage":case"plan":case"terminalInput":return E(f(e,"text"),"");case"userMessage":return g(T(e,"content"),"",G);default:return""}}function ne(e){return new Date(e).toISOString()}function q(e,t){let r=[];return t.turns.forEach(i=>{i.items.forEach(n=>{let s=n.item,o;o=typeof s=="object"&&s!==null&&!Array.isArray(s)?s:{};let m=E(f(o,"id"),"");r.push({kind:te(f(o,"type")),seq:r.length+1|0,at:k(n.completedAtMs,ne),harness:"codex",body:re(o),structured:n.item,actor:void 0,attachments:[],sourceSeq:void 0,streamKey:ee(t.harnessSessionId,i.turnId,m)})})}),C(e,r)}var B=["codex","claude-code","pi","opencode"];function se(e){return"rehydrated-"+e.toString()}var oe="rehydrated-marker";function ue(e,t){switch(e){case"agent_status":return"[status] "+t;case"approval_request":return"[approval] "+t;case"command_execution":return`[command]
|
|
8
|
+
`+t;case"error":return"[error] "+t;case"file_change":return`[file change]
|
|
9
|
+
`+t;case"system_notice":return"[notice] "+t;case"terminal_input":return`[terminal input]
|
|
10
|
+
`+t;case"tool_call":return`[tool call]
|
|
11
|
+
`+t;case"tool_result":return`[tool result]
|
|
12
|
+
`+t;default:return"["+e+"] "+t}}function W(e,t,r,i){let n={};n.type="text",n.text=i;let s={};s.role=e,s.content=[n];let o={};return o.type=e,o.session_id=t,o.uuid=r,o.message=s,o}function le(e,t,r,i,n){return"[linzumi cross-harness resume] This session continues linzumi thread "+r+", "+("imported from the "+e+" session "+t+". ")+(i.toString()+" activity records follow verbatim; ")+(n.toString()+" reasoning records were redacted ")+"(provider-private reasoning is never forged across harnesses)."}function V(e,t){let r={contents:void 0},i=a=>{if(r.contents===void 0){r.contents=a;return}};e===""?i("the caller-bound target session identity must be non-empty"):e.includes(":")&&i("the caller-bound target session identity must be colon-free"),r.contents===void 0&&t.nodes.length===0&&i("an empty page rehydrates nothing - the source session must carry content");let n={contents:void 0},s={contents:void 0};t.nodes.forEach(a=>{if(r.contents===void 0){let l=s.contents;l!==void 0&&a.seq<=l?i("page nodes must ascend by seq"):s.contents=a.seq}if(r.contents===void 0){let l=h(B.map(d=>d),d=>k(v(a.streamKey,c=>M(d,c)),c=>[d,c.keySessionId]))[0];if(l!==void 0){let d=l[1],c=l[0];if(c==="claude-code")i("the page was minted by the claude harness - same-harness resume rides the native session store, never rehydration");else{let b=n.contents;b!==void 0&&(b[0]!==c||b[1]!==d)?i("page mixes two harness session identities"):n.contents=[c,d]}}else i("node carries no parseable minted stream_key identity of a catalog harness")}if(r.contents!==void 0)return;let u=a.structured;if(!(typeof u=="object"&&u!==null&&!Array.isArray(u)))return i("node carries no verbatim native passthrough")});let o=r.contents,m=n.contents;if(o!==void 0)return{TAG:"Error",_0:o};if(m===void 0)return{TAG:"Error",_0:"page carries no source harness identity"};let A=m[1];if(A===e)return{TAG:"Error",_0:"the caller-bound target session identity must be distinct from the source session identity"};let O=m[0],y=[],S=[],p={contents:0};t.nodes.forEach(a=>{let u=a.kind;if(u==="reasoning"){p.contents=p.contents+1|0;return}let l;switch(u){case"assistant_message":l=["assistant",a.body];break;case"user_message":l=["user",a.body];break;default:l=["assistant",ue(u,a.body)]}let d=l[0],c=se(a.seq);y.push({sourceSeq:a.seq,sourceKind:u,uuid:c,role:d}),S.push(W(d,e,c,l[1]))});let w=[W("user",e,oe,le(O,A,t.threadId,S.length,p.contents))].concat(S);return{TAG:"Ok",_0:{session:{harnessSessionId:e,messages:w},report:{sourceHarness:O,sourceSessionId:A,sessionMessageCount:w.length,redactedReasoningCount:p.contents,emissions:y}}}}function me(e,t){if(e.TAG!=="Ok")throw new Error(`${t}: ${JSON.stringify(e._0)}`);return e._0}function pe(e,t=K()){let r=e.replace(/[^a-zA-Z0-9]/g,"-");return U(t,".claude","projects",r)}async function Pe({activity:e,codexThreadId:t,kandanThreadId:r,targetSessionId:i=ae(),cwd:n,home:s=K()}){try{let o=(e?.turns??[]).filter(u=>u.items.length>0);if(o.reduce((u,l)=>u+l.items.length,0)===0)return{ok:!1,failure:"no recorded harness activity to carry over (the failover journal is empty)"};let A=q(r,{harnessSessionId:t,turns:o}),O=me(V(i,A),"claude rehydration refused the exported page"),y=n;try{y=await fe(n)}catch{return{ok:!1,failure:`the thread's working directory is not resolvable: ${n}`}}let S=pe(y,s);await de(S,{recursive:!0});let p=U(S,`${i}.jsonl`),I=null,w=Date.now(),a=O.session.messages.map((u,l)=>{let d={parentUuid:I,isSidechain:!1,userType:"external",cwd:y,sessionId:i,version:"0.0.0-linzumi-cross-harness-failover",type:u.type,message:u.message,uuid:u.uuid,timestamp:new Date(w+l).toISOString()};return I=u.uuid,d});return await ce(p,a.map(u=>JSON.stringify(u)).join(`
|
|
13
|
+
`)+`
|
|
14
|
+
`),{ok:!0,targetSessionId:i,sessionFile:p,transpiledItemCount:O.report.emissions.length,redactedReasoningCount:O.report.redactedReasoningCount}}catch(o){return{ok:!1,failure:o instanceof Error?o.message:String(o)}}}export{pe as claudeSessionStoreDir,Pe as transpileAndSeedClaudeSession};
|