thinkpool-pair 0.7.393 → 0.7.394

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.
@@ -1 +1 @@
1
- import{execFileSync as e}from"node:child_process";const t=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,n=/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/,r=new Set(["claude","codex","hermes"]),o=new Set(["default","acceptEdits","plan","review","bypassPermissions"]),i=new Set(["main","worker","side","flow-conductor","flow-builder","flow-reviewer","scheduled"]),a=new Set(["clean","dirty","unavailable"]),l=/(?:\r|\n|(?:^|[\\/])(?:Users|home|private|tmp|var|workspace)(?:[\\/]|$)|\.thinkpool[\\/]|(?:api[_-]?key|authorization|bearer|password|secret)\b)/i,u=1e5;function d(e){if("string"!=typeof e)return null;const n=e.trim();return t.test(n)?n:null}function s(e){if("string"!=typeof e)return null;const t=e.trim().toLowerCase();return n.test(t)?t:null}function c(e={}){return"conductor"===e.flowRole?"flow-conductor":"reviewer"===e.flowRole||"review"===e.sliceType?"flow-reviewer":e.flowSessionId||e.flowTaskKey||"builder"===e.flowRole?"flow-builder":e.scheduleRunId?"scheduled":e.sideParent?"side":e.spawnedBy?"worker":"main"}function f(e){return new Set(String(e||"").split("\0").filter(Boolean))}export function readLaneWorkGit(t,n=e,r=null){if("string"!=typeof t||!t.trim())return{worktreeState:"unavailable"};let o=null;try{o=s(n("git",["-C",t,"rev-parse","HEAD"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}))}catch{return{worktreeState:"unavailable"}}try{const e=n("git",["-C",t,"status","--porcelain=v1","--untracked-files=all"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),i={...o?{headSha:o}:{},worktreeState:String(e||"").trim()?"dirty":"clean"},a="clean"===r?.worktreeState?s(r?.headSha):null;if(a){o&&(i.headChanged=o!==a);const e=function(e,t,n){try{const r=n("git",["-C",e,"diff","--name-only","-z","--no-renames",t,"--"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),o=n("git",["-C",e,"ls-files","--others","--exclude-standard","-z"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),i=f(r);for(const e of f(o))i.add(e);return Math.min(i.size,u)}catch{return null}}(t,a,n);null!==e&&(i.changedFileCount=e)}return i}catch{return{...o?{headSha:o}:{},worktreeState:"unavailable"}}}export function normalizeLaneWorkSnapshot(e){if(!e||"object"!=typeof e||Array.isArray(e)||![1,2].includes(e.version))return null;const t=d(e.terminalId),n=Number.isSafeInteger(e.turnRev)&&e.turnRev>0?e.turnRev:null,c="string"==typeof e.capturedAt&&Number.isFinite(Date.parse(e.capturedAt))?new Date(e.capturedAt).toISOString():null,f=e.identity,p=r.has(f?.runtime)?f.runtime:null,g=i.has(f?.laneRole)?f.laneRole:null,w=a.has(e.git?.worktreeState)?e.git.worktreeState:null;if(!(t&&n&&c&&p&&g&&w))return null;const m={runtime:p,laneRole:g},h=function(e,t=120){if("string"!=typeof e)return null;const n=e.replace(/\s+/g," ").trim();return!n||n.length>t||l.test(n)?null:n}(f.model),S=o.has(f.mode)?f.mode:null,y=d(f.parentTerminalId),k=d(f.flowId),v=d(f.flowTaskKey);h&&(m.model=h),S&&(m.mode=S),y&&(m.parentTerminalId=y),k&&(m.flowId=k),v&&(m.flowTaskKey=v);const b={worktreeState:w},C=s(e.git?.headSha),I="boolean"==typeof e.git?.headChanged?e.git.headChanged:null,R=Number.isSafeInteger(e.git?.changedFileCount)&&e.git.changedFileCount>=0&&e.git.changedFileCount<=u?e.git.changedFileCount:null;return C&&(b.headSha=C),null!==I&&(b.headChanged=I),null!==R&&(b.changedFileCount=R),{version:e.version,terminalId:t,turnRev:n,capturedAt:c,identity:m,git:b}}export function buildLaneWorkSnapshot(t,{now:n=Date.now(),gitFacts:r}={}){const o=t?.sideParent||("string"!=typeof t?.spawnedBy||t.spawnedBy.startsWith("flow:")?null:t.spawnedBy),i={runtime:t?.runtime,model:t?.model,mode:t?.mode,laneRole:c(t),parentTerminalId:o,flowId:t?.flowSessionId,flowTaskKey:t?.flowTaskKey};return normalizeLaneWorkSnapshot({version:2,terminalId:t?.id,turnRev:Number(t?._turnRev),capturedAt:new Date(n).toISOString(),identity:i,git:r||readLaneWorkGit(t?.cwd,e,t?._turnGitStart)})}export function workerCompletionGitFacts(e){const t=normalizeLaneWorkSnapshot(e);return t?{...t.git}:null}
1
+ import{execFileSync as e}from"node:child_process";const t=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,n=/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/,r=new Set(["claude","codex","hermes"]),o=new Set(["default","acceptEdits","plan","review","bypassPermissions"]),i=new Set(["main","worker","side","flow-conductor","flow-builder","flow-reviewer","scheduled"]),a=new Set(["clean","dirty","unavailable"]),l=/(?:\r|\n|(?:^|[\\/])(?:Users|home|private|tmp|var|workspace)(?:[\\/]|$)|\.thinkpool[\\/]|(?:api[_-]?key|authorization|bearer|password|secret)\b)/i,u=1e5;function d(e){if("string"!=typeof e)return null;const n=e.trim();return t.test(n)?n:null}function s(e,t=120){if("string"!=typeof e)return null;const n=e.replace(/\s+/g," ").trim();return!n||n.length>t||l.test(n)?null:n}function c(e){if("string"!=typeof e)return null;const t=e.trim().toLowerCase();return n.test(t)?t:null}function f(e={}){return"conductor"===e.flowRole?"flow-conductor":"reviewer"===e.flowRole||"review"===e.sliceType?"flow-reviewer":e.flowSessionId||e.flowTaskKey||"builder"===e.flowRole?"flow-builder":e.scheduleRunId?"scheduled":e.sideParent?"side":e.spawnedBy?"worker":"main"}function g(e){return new Set(String(e||"").split("\0").filter(Boolean))}export function readLaneWorkGit(t,n=e,r=null){if("string"!=typeof t||!t.trim())return{worktreeState:"unavailable"};let o=null;try{o=c(n("git",["-C",t,"rev-parse","HEAD"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}))}catch{return{worktreeState:"unavailable"}}try{const e=n("git",["-C",t,"status","--porcelain=v1","--untracked-files=all"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),i={...o?{headSha:o}:{},worktreeState:String(e||"").trim()?"dirty":"clean"},a="clean"===r?.worktreeState?c(r?.headSha):null;if(a){if(o&&(i.headChanged=o!==a,i.headChanged)){const e=function(e,t,n){try{return s(n("git",["-C",e,"log","-1","--format=%s",t],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}))}catch{return null}}(t,o,n);e&&(i.headSubject=e)}const e=function(e,t,n){try{const r=n("git",["-C",e,"diff","--name-only","-z","--no-renames",t,"--"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),o=n("git",["-C",e,"ls-files","--others","--exclude-standard","-z"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}),i=g(r);for(const e of g(o))i.add(e);return Math.min(i.size,u)}catch{return null}}(t,a,n);null!==e&&(i.changedFileCount=e)}return i}catch{return{...o?{headSha:o}:{},worktreeState:"unavailable"}}}export function normalizeLaneWorkSnapshot(e){if(!e||"object"!=typeof e||Array.isArray(e)||![1,2].includes(e.version))return null;const t=d(e.terminalId),n=Number.isSafeInteger(e.turnRev)&&e.turnRev>0?e.turnRev:null,l="string"==typeof e.capturedAt&&Number.isFinite(Date.parse(e.capturedAt))?new Date(e.capturedAt).toISOString():null,f=e.identity,g=r.has(f?.runtime)?f.runtime:null,p=i.has(f?.laneRole)?f.laneRole:null,h=a.has(e.git?.worktreeState)?e.git.worktreeState:null;if(!(t&&n&&l&&g&&p&&h))return null;const w={runtime:g,laneRole:p},m=s(f.model),S=o.has(f.mode)?f.mode:null,y=d(f.parentTerminalId),k=d(f.flowId),v=d(f.flowTaskKey);m&&(w.model=m),S&&(w.mode=S),y&&(w.parentTerminalId=y),k&&(w.flowId=k),v&&(w.flowTaskKey=v);const b={worktreeState:h},C=c(e.git?.headSha),I="boolean"==typeof e.git?.headChanged?e.git.headChanged:null,R=!0===I?s(e.git?.headSubject):null,A=Number.isSafeInteger(e.git?.changedFileCount)&&e.git.changedFileCount>=0&&e.git.changedFileCount<=u?e.git.changedFileCount:null;return C&&(b.headSha=C),null!==I&&(b.headChanged=I),R&&(b.headSubject=R),null!==A&&(b.changedFileCount=A),{version:e.version,terminalId:t,turnRev:n,capturedAt:l,identity:w,git:b}}export function buildLaneWorkSnapshot(t,{now:n=Date.now(),gitFacts:r}={}){const o=t?.sideParent||("string"!=typeof t?.spawnedBy||t.spawnedBy.startsWith("flow:")?null:t.spawnedBy),i={runtime:t?.runtime,model:t?.model,mode:t?.mode,laneRole:f(t),parentTerminalId:o,flowId:t?.flowSessionId,flowTaskKey:t?.flowTaskKey};return normalizeLaneWorkSnapshot({version:2,terminalId:t?.id,turnRev:Number(t?._turnRev),capturedAt:new Date(n).toISOString(),identity:i,git:r||readLaneWorkGit(t?.cwd,e,t?._turnGitStart)})}export function workerCompletionGitFacts(e){const t=normalizeLaneWorkSnapshot(e);return t?{...t.git}:null}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thinkpool-pair",
3
- "version": "0.7.393",
3
+ "version": "0.7.394",
4
4
  "description": "Connect Claude Code, Codex, or Hermes on your computer to a thinkpool Code room.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": 1,
3
3
  "package": "thinkpool-pair",
4
- "version": "0.7.393",
4
+ "version": "0.7.394",
5
5
  "kind": "minified",
6
6
  "minifiedModules": 119,
7
- "sourceModuleBytes": 1751096,
8
- "artifactModuleBytes": 789763,
7
+ "sourceModuleBytes": 1751687,
8
+ "artifactModuleBytes": 790035,
9
9
  "files": {
10
- "package.json": "7bb3c0fedca6d3e3a40a2e1a98700b79078974662c9c9f109cb6a364ceee3372",
10
+ "package.json": "12fc400633dc873959c93fbb5a6f4e69a4ebb094d18fbad29b49d097e896100f",
11
11
  "LICENSE": "8a030197ca1cad9669909ca14c9ad15cf48d9fe551da526ccaf1fca993eddb23",
12
12
  "bridge.mjs": "0c4e67cb580ebaf37e39828f372b57cad5f1b70750ef6c5ec8cf49db965c1bdb",
13
13
  "bridge-service.sh": "b64f27c473ca8f3a49190fd08c23947ab14ca9958d70b6fa53c7bddc2be91403",
@@ -36,7 +36,7 @@
36
36
  "codex-images.mjs": "31605d6d8b3dd6b73395da63d1b0c513445c95ffa2f4306ee466f201d633ffc0",
37
37
  "codex-mcp-http.mjs": "7472543648a9bb575ce20dc3e3270c2da84174c6ea6e9faf87dfaafb95b6212a",
38
38
  "lane-worktree.mjs": "37583757ab82843412ba565dfba3d7cab517e94782eb33115decd5438d092d8f",
39
- "lane-work-snapshot.mjs": "a92135c72108e1c7ece6e4c266d66c662af6870e6dbeec705b17e375e9b523ca",
39
+ "lane-work-snapshot.mjs": "ba40233059ea86ba2e08d0b61763427baa9602eb6edf6c445a6b22fd15af212c",
40
40
  "codex-event-mapper.mjs": "7e7b878b24cb9208af517a195cc4089de87eda68086355f9e8e3b7e308825dee",
41
41
  "edit-diff.mjs": "9a1bef6bb2d853d630ad38aba374cb2a120dd75b9aa08ab42ffc83cb0e1c57b6",
42
42
  "cumulative-event-relay.mjs": "cf6e6533e33b3c5bb0b462d15ccc86106f2b56f8b1e66fc1f4867dd8f44d7ae6",