@burdenoff/cli-sdk 2026.1102.1 → 2026.1102.3
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/chunk-O6UCQ5IT.js +1 -0
- package/dist/{chunk-AYNNSLCL.js → chunk-ZGT7IIOP.js} +409 -418
- package/dist/modules/adaptercloud/index.cjs +9 -6
- package/dist/modules/adaptercloud/index.js +7 -4
- package/dist/modules/artistrybase/index.js +2 -2
- package/dist/modules/assethandler/index.cjs +2 -2
- package/dist/modules/assethandler/index.js +2 -2
- package/dist/modules/atheletebridge/index.cjs +35 -21
- package/dist/modules/atheletebridge/index.js +33 -19
- package/dist/modules/auth/index.cjs +37 -37
- package/dist/modules/auth/index.js +33 -29
- package/dist/modules/billing/index.cjs +1 -1
- package/dist/modules/billing/index.js +2 -2
- package/dist/modules/brainyrich/index.cjs +44 -28
- package/dist/modules/brainyrich/index.js +47 -31
- package/dist/modules/buildmyiq/index.cjs +64 -67
- package/dist/modules/buildmyiq/index.js +60 -63
- package/dist/modules/channels/index.cjs +3 -3
- package/dist/modules/channels/index.js +2 -2
- package/dist/modules/collabkin/index.cjs +4 -4
- package/dist/modules/collabkin/index.js +2 -2
- package/dist/modules/comradecircle/index.cjs +24 -16
- package/dist/modules/comradecircle/index.js +20 -12
- package/dist/modules/conversations/index.cjs +7 -7
- package/dist/modules/conversations/index.js +2 -2
- package/dist/modules/coolandlovely/index.cjs +28 -15
- package/dist/modules/coolandlovely/index.js +30 -17
- package/dist/modules/cosmicintersection/index.cjs +6 -6
- package/dist/modules/cosmicintersection/index.js +2 -2
- package/dist/modules/crewfoundry/index.js +2 -2
- package/dist/modules/devportal/index.cjs +2 -2
- package/dist/modules/devportal/index.js +2 -2
- package/dist/modules/ecoimpacthub/index.cjs +23 -13
- package/dist/modules/ecoimpacthub/index.js +20 -10
- package/dist/modules/eventfullymanaged/index.cjs +74 -74
- package/dist/modules/eventfullymanaged/index.js +78 -78
- package/dist/modules/export/index.cjs +4 -4
- package/dist/modules/export/index.js +2 -2
- package/dist/modules/files/index.cjs +3 -3
- package/dist/modules/files/index.js +4 -4
- package/dist/modules/fluidgrids/index.cjs +16 -16
- package/dist/modules/fluidgrids/index.js +3 -3
- package/dist/modules/ggnomad/index.cjs +4 -4
- package/dist/modules/ggnomad/index.js +2 -2
- package/dist/modules/govcitizenhub/index.cjs +10 -7
- package/dist/modules/govcitizenhub/index.js +8 -5
- package/dist/modules/groups/index.cjs +4 -4
- package/dist/modules/groups/index.js +2 -2
- package/dist/modules/headshotmarketing/index.js +2 -2
- package/dist/modules/hookmovies/index.cjs +6 -6
- package/dist/modules/hookmovies/index.js +2 -2
- package/dist/modules/housingvista/index.cjs +3 -3
- package/dist/modules/housingvista/index.js +2 -2
- package/dist/modules/integrations/index.cjs +5 -5
- package/dist/modules/integrations/index.js +2 -2
- package/dist/modules/intelwatchtower/index.cjs +28 -16
- package/dist/modules/intelwatchtower/index.js +25 -13
- package/dist/modules/kadaikodi/index.cjs +2 -2
- package/dist/modules/kadaikodi/index.js +2 -2
- package/dist/modules/labsofscience/index.cjs +10 -6
- package/dist/modules/labsofscience/index.js +9 -5
- package/dist/modules/manufacturedops/index.cjs +35 -22
- package/dist/modules/manufacturedops/index.js +35 -22
- package/dist/modules/movethewheels/index.js +2 -2
- package/dist/modules/notifications/index.cjs +2 -2
- package/dist/modules/notifications/index.js +2 -2
- package/dist/modules/organizations/index.js +2 -2
- package/dist/modules/planmagnet/index.cjs +21 -21
- package/dist/modules/planmagnet/index.js +32 -32
- package/dist/modules/products/index.cjs +4 -4
- package/dist/modules/products/index.js +2 -2
- package/dist/modules/proserviceworld/index.cjs +18 -13
- package/dist/modules/proserviceworld/index.js +18 -13
- package/dist/modules/rbac/index.js +2 -2
- package/dist/modules/sandbox/index.cjs +17 -17
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs +2 -2
- package/dist/modules/scheduler/index.js +2 -2
- package/dist/modules/security/index.cjs +3 -3
- package/dist/modules/security/index.js +2 -2
- package/dist/modules/semanticfed/index.cjs +3 -3
- package/dist/modules/semanticfed/index.js +2 -2
- package/dist/modules/store/index.cjs +3 -3
- package/dist/modules/store/index.js +2 -2
- package/dist/modules/subscriberbot/index.cjs +43 -19
- package/dist/modules/subscriberbot/index.js +47 -23
- package/dist/modules/support/index.cjs +2 -2
- package/dist/modules/support/index.js +2 -2
- package/dist/modules/tags/index.js +2 -2
- package/dist/modules/technospam/index.cjs +18 -9
- package/dist/modules/technospam/index.js +18 -9
- package/dist/modules/theculturepost/index.cjs +27 -22
- package/dist/modules/theculturepost/index.js +32 -27
- package/dist/modules/theglobalfuel/index.cjs +65 -60
- package/dist/modules/theglobalfuel/index.js +65 -60
- package/dist/modules/timecampus/index.js +2 -2
- package/dist/modules/tours/index.cjs +2 -2
- package/dist/modules/tours/index.js +2 -2
- package/dist/modules/vibecontrols/index.cjs +563 -567
- package/dist/modules/vibecontrols/index.js +5 -4
- package/dist/modules/workspaces/index.cjs +4 -4
- package/dist/modules/workspaces/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-W4JZR7RJ.js +0 -1
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
id experimentId runNumber status observations notes completedAt updatedAt
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
`,
|
|
100
|
+
`,F=`
|
|
101
101
|
query LabListNotebookEntries(
|
|
102
102
|
$experimentId: ID
|
|
103
103
|
$projectId: ID
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
pageInfo { cursor hasMore }
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
-
`,
|
|
120
|
+
`,V=`
|
|
121
121
|
mutation LabCreateNotebookEntry($input: LabCreateNotebookEntryInput!) {
|
|
122
122
|
labCreateNotebookEntry(input: $input) {
|
|
123
123
|
id workspaceId projectId experimentId runId title body status
|
|
@@ -220,8 +220,11 @@
|
|
|
220
220
|
`,nt=`
|
|
221
221
|
query LabListPipelines {
|
|
222
222
|
labListPipelines {
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
items {
|
|
224
|
+
id workspaceId projectId name description engine version isActive definition tags
|
|
225
|
+
createdAt updatedAt
|
|
226
|
+
}
|
|
227
|
+
pageInfo { cursor hasMore }
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
`,rt=`
|
|
@@ -313,7 +316,8 @@
|
|
|
313
316
|
`,lt=`
|
|
314
317
|
query LabListInstruments($status: LabInstrumentStatus) {
|
|
315
318
|
labListInstruments(status: $status) {
|
|
316
|
-
id name model location status requiresApproval custodianId tags createdAt
|
|
319
|
+
items { id name model location status requiresApproval custodianId tags createdAt }
|
|
320
|
+
pageInfo { cursor hasMore }
|
|
317
321
|
}
|
|
318
322
|
}
|
|
319
323
|
`,gt=`
|
|
@@ -340,4 +344,4 @@
|
|
|
340
344
|
query LabHealth {
|
|
341
345
|
labHealth
|
|
342
346
|
}
|
|
343
|
-
`;function b(o,r){try{return JSON.parse(r)}catch{throw new u(`--${o} must be valid JSON`)}}function p(o){let r=Number.parseInt(o,10);if(Number.isNaN(r))throw new u(`Expected an integer but got "${o}"`);return r}function A(o){let r=Number.parseFloat(o);if(Number.isNaN(r))throw new u(`Expected a number but got "${o}"`);return r}function l(o){return o.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function g(o,r){return {limit:o,offset:r}}function yt(o){let r=o.command("projects").description("Labsofscience research projects");r.command("list").description("List research projects").option("--status <s>","Filter by project status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListProjects.items,{headers:["ID","Name","Code","Field","Status","Visibility"],rows:e.labListProjects.items.map(n=>[d(n.id,12),n.name,n.code??"-",n.field??"-",n.status,n.visibility])});}catch(e){i(e);}}),r.command("get").description("Get a research project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(R,{id:t});if(!n.labProject)throw new u(`Project ${t} not found`);s(e,n.labProject);}catch(n){i(n);}}),r.command("create").description("Create a research project").requiredOption("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","PLANNING|ACTIVE|ON_HOLD|COMPLETED|ARCHIVED","PLANNING").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,status:(t.status??"PLANNING").toUpperCase(),visibility:(t.visibility??"WORKSPACE").toUpperCase()};t.code&&(e.code=t.code),t.description&&(e.description=t.description),t.field&&(e.field=t.field),t.pi&&(e.principalInvestigatorId=t.pi),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=l(t.tags));let n=await a(O,{input:e});c(`Project created: ${n.labCreateProject.name}`),s(t,n.labCreateProject);}catch(e){i(e);}}),r.command("update").description("Update a research project").argument("<id>","Project ID").option("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","Project status").option("--visibility <v>","Visibility").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.code&&(n.code=e.code),e.description!==void 0&&(n.description=e.description),e.field&&(n.field=e.field),e.pi&&(n.principalInvestigatorId=e.pi),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.status&&(n.status=e.status.toUpperCase()),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(D,{id:t,input:n});c("Project updated"),s(e,f.labUpdateProject);}catch(n){i(n);}}),r.command("archive").description("Archive a research project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(S,{id:t});c(`Project archived: ${n.labArchiveProject}`),s(e,{archived:n.labArchiveProject});}catch(n){i(n);}});}function Ct(o){let r=o.command("experiments").description("Labsofscience experiments");r.command("list").description("List experiments").option("--project <id>","Filter by project ID").option("--status <s>","Filter by experiment status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(_,{projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListExperiments.items,{headers:["ID","Title","Status","Project","Lead"],rows:e.labListExperiments.items.map(n=>[d(n.id,12),n.title,n.status,d(n.projectId,12),n.leadResearcherId?d(n.leadResearcherId,12):"-"])});}catch(e){i(e);}}),r.command("get").description("Get an experiment by id").argument("<id>","Experiment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(N,{id:t});if(!n.labExperiment)throw new u(`Experiment ${t} not found`);s(e,n.labExperiment);}catch(n){i(n);}}),r.command("create").description("Create an experiment").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.description&&(e.description=t.description),t.hypothesis&&(e.hypothesis=t.hypothesis),t.lead&&(e.leadResearcherId=t.lead),t.protocol&&(e.protocolId=t.protocol),t.variables&&(e.variables=b("variables",t.variables)),t.tags&&(e.tags=l(t.tags));let n=await a($,{input:e});c(`Experiment created: ${n.labCreateExperiment.title}`),s(t,n.labCreateExperiment);}catch(e){i(e);}}),r.command("update").description("Update an experiment").argument("<id>","Experiment ID").option("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.hypothesis!==void 0&&(n.hypothesis=e.hypothesis),e.lead&&(n.leadResearcherId=e.lead),e.protocol&&(n.protocolId=e.protocol),e.variables&&(n.variables=b("variables",e.variables)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(j,{id:t,input:n});c("Experiment updated"),s(e,f.labUpdateExperiment);}catch(n){i(n);}}),r.command("transition").description("Advance an experiment through its lifecycle").argument("<id>","Experiment ID").requiredOption("--status <s>","DESIGN|RUNNING|ANALYSIS|COMPLETE|ABANDONED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(B,{id:t,status:e.status.toUpperCase()});c(`Experiment moved to ${n.labTransitionExperiment.status}`),s(e,n.labTransitionExperiment);}catch(n){i(n);}});}function Et(o){let r=o.command("runs").description("Labsofscience reproducible experiment runs");r.command("list").description("List experiment runs").option("--experiment <id>","Filter by experiment ID").option("--status <s>","Filter by run status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{experimentId:t.experiment,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListRuns.items,{headers:["ID","Run #","Status","Experiment","Started","Completed"],rows:e.labListRuns.items.map(n=>[d(n.id,12),String(n.runNumber),n.status,d(n.experimentId,12),E(n.startedAt),E(n.completedAt)])});}catch(e){i(e);}}),r.command("start").description("Start a new reproducible run of an experiment").requiredOption("--experiment <id>","Experiment ID").option("--notes <s>","Run notes").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={experimentId:t.experiment};t.notes&&(e.notes=t.notes),t.parameters&&(e.parameters=b("parameters",t.parameters));let n=await a(U,{input:e});c(`Run #${n.labStartRun.runNumber} started`),s(t,n.labStartRun);}catch(e){i(e);}}),r.command("complete").description("Record observations and complete a run with a terminal status").argument("<id>","Run ID").requiredOption("--status <s>","SUCCEEDED|FAILED|CANCELLED").option("--notes <s>","Result notes").option("--observations <json>","Observations JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={id:t,status:e.status.toUpperCase()},f={};e.notes&&(f.notes=e.notes),e.observations&&(f.observations=b("observations",e.observations)),Object.keys(f).length&&(n.input=f);let w=await a(M,n);c(`Run #${w.labCompleteRun.runNumber} completed: ${w.labCompleteRun.status}`),s(e,w.labCompleteRun);}catch(n){i(n);}});}function ht(o){let r=o.command("notebook").description("Labsofscience electronic lab notebook (ELN)");r.command("list").description("List notebook entries").option("--experiment <id>","Filter by experiment ID").option("--project <id>","Filter by project ID").option("--status <s>","Filter by entry status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(V,{experimentId:t.experiment,projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListNotebookEntries.items,{headers:["ID","Title","Status","Project","Author"],rows:e.labListNotebookEntries.items.map(n=>[d(n.id,12),n.title,n.status,d(n.projectId,12),d(n.authorId,12)])});}catch(e){i(e);}}),r.command("create").description("Create a notebook entry").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Entry title").option("--body <s>","Entry body").option("--experiment <id>","Experiment ID").option("--run <id>","Run ID").option("--file-ids <csv>","Comma-separated wspace-files-svc File ids").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.body&&(e.body=t.body),t.experiment&&(e.experimentId=t.experiment),t.run&&(e.runId=t.run),t.fileIds&&(e.fileIds=l(t.fileIds)),t.tags&&(e.tags=l(t.tags));let n=await a(F,{input:e});c(`Notebook entry created: ${n.labCreateNotebookEntry.title}`),s(t,n.labCreateNotebookEntry);}catch(e){i(e);}}),r.command("sign").description("Sign a notebook entry (locks editable content)").argument("<id>","Entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(W,{id:t});c(`Notebook entry signed: ${n.labSignNotebookEntry.status}`),s(e,n.labSignNotebookEntry);}catch(n){i(n);}});}function At(o){let r=o.command("protocols").description("Labsofscience versioned protocols");r.command("list").description("List protocols").option("--status <s>","DRAFT|PUBLISHED|DEPRECATED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(H,{status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListProtocols.items,{headers:["ID","Name","Status","Version","Est. min"],rows:e.labListProtocols.items.map(n=>[d(n.id,12),n.name,n.status,String(n.version),n.estimatedMinutes!=null?String(n.estimatedMinutes):"-"])});}catch(e){i(e);}}),r.command("get").description("Get a protocol by id").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(G,{id:t});if(!n.labProtocol)throw new u(`Protocol ${t} not found`);s(e,n.labProtocol);}catch(n){i(n);}}),r.command("create").description("Create a protocol").requiredOption("--name <name>","Protocol name").option("--summary <s>","Summary").option("--author <id>","Author user ID").option("--estimated-minutes <n>","Estimated minutes",p).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.summary&&(e.summary=t.summary),t.author&&(e.authorId=t.author),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.materials&&(e.materials=l(t.materials)),t.safetyNotes&&(e.safetyNotes=t.safetyNotes),t.tags&&(e.tags=l(t.tags));let n=await a(z,{input:e});c(`Protocol created: ${n.labCreateProtocol.name}`),s(t,n.labCreateProtocol);}catch(e){i(e);}}),r.command("update").description("Update a protocol").argument("<id>","Protocol ID").option("--name <name>","Protocol name").option("--summary <s>","Summary").option("--estimated-minutes <n>","Estimated minutes",p).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.summary!==void 0&&(n.summary=e.summary),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.materials&&(n.materials=l(e.materials)),e.safetyNotes!==void 0&&(n.safetyNotes=e.safetyNotes),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(J,{id:t,input:n});c("Protocol updated"),s(e,f.labUpdateProtocol);}catch(n){i(n);}}),r.command("publish").description("Publish a draft protocol, freezing its version").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(K,{id:t});c(`Protocol published: v${n.labPublishProtocol.version}`),s(e,n.labPublishProtocol);}catch(n){i(n);}}),r.command("add-step").description("Append a step to a protocol").requiredOption("--protocol <id>","Protocol ID").requiredOption("--instruction <s>","Step instruction").option("--kind <k>","PREPARATION|INCUBATION|MEASUREMENT|ANALYSIS|CLEANUP|SAFETY","PREPARATION").option("--ordinal <n>","Step ordinal",p).option("--duration-minutes <n>","Duration (minutes)",p).option("--critical","Mark step as critical").option("-f, --format <format>","Output format").action(async t=>{try{let e={protocolId:t.protocol,instruction:t.instruction,kind:(t.kind??"PREPARATION").toUpperCase()};t.ordinal!==void 0&&(e.ordinal=t.ordinal),t.durationMinutes!==void 0&&(e.durationMinutes=t.durationMinutes),t.critical&&(e.isCritical=!0);let n=await a(Y,{input:e});c(`Step added at ordinal ${n.labAddProtocolStep.ordinal}`),s(t,n.labAddProtocolStep);}catch(e){i(e);}});}function wt(o){let r=o.command("datasets").description("Labsofscience versioned datasets");r.command("list").description("List datasets").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE").option("--status <s>","ACTIVE|LOCKED|ARCHIVED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(X,{kind:t.kind?t.kind.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListDatasets.items,{headers:["ID","Name","Kind","Status","Latest v"],rows:e.labListDatasets.items.map(n=>[d(n.id,12),n.name,n.kind,n.status,String(n.latestVersion)])});}catch(e){i(e);}}),r.command("get").description("Get a dataset by id").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Q,{id:t});if(!n.labDataset)throw new u(`Dataset ${t} not found`);s(e,n.labDataset);}catch(n){i(n);}}),r.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--description <s>","Description").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE","RAW").option("--experiment <id>","Experiment ID").option("--project <id>","Project ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"RAW").toUpperCase()};t.description&&(e.description=t.description),t.experiment&&(e.experimentId=t.experiment),t.project&&(e.projectId=t.project),t.tags&&(e.tags=l(t.tags));let n=await a(Z,{input:e});c(`Dataset created: ${n.labCreateDataset.name}`),s(t,n.labCreateDataset);}catch(e){i(e);}}),r.command("add-version").description("Append an immutable version to a dataset").requiredOption("--dataset <id>","Dataset ID").option("--file <id>","wspace-files-svc File id holding the snapshot bytes").option("--size-bytes <s>","Size in bytes").option("--row-count <n>","Row count",p).option("--checksum <s>","Checksum").option("--change-note <s>","Change note").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset};t.file&&(e.fileId=t.file),t.sizeBytes&&(e.sizeBytes=t.sizeBytes),t.rowCount!==void 0&&(e.rowCount=t.rowCount),t.checksum&&(e.checksum=t.checksum),t.changeNote&&(e.changeNote=t.changeNote);let n=await a(tt,{input:e});c(`Dataset version added: v${n.labAddDatasetVersion.version}`),s(t,n.labAddDatasetVersion);}catch(e){i(e);}}),r.command("archive").description("Archive a dataset").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(et,{id:t});c(`Dataset archived: ${n.labArchiveDataset}`),s(e,{archived:n.labArchiveDataset});}catch(n){i(n);}});}function Lt(o){let r=o.command("pipelines").description("Labsofscience reproducible analysis pipelines");r.command("list").description("List analysis pipelines").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(nt);s(t,e.labListPipelines,{headers:["ID","Name","Engine","Version","Active"],rows:e.labListPipelines.map(n=>[d(n.id,12),n.name,n.engine,String(n.version),n.isActive?"yes":"no"])});}catch(e){i(e);}}),r.command("create").description("Create an analysis pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--engine <s>","Execution engine").option("--project <id>","Project ID").option("--definition <json>","Pipeline definition JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.engine&&(e.engine=t.engine),t.project&&(e.projectId=t.project),t.definition&&(e.definition=b("definition",t.definition)),t.tags&&(e.tags=l(t.tags));let n=await a(rt,{input:e});c(`Pipeline created: ${n.labCreatePipeline.name}`),s(t,n.labCreatePipeline);}catch(e){i(e);}}),r.command("run").description("Queue a reproducible pipeline run over a dataset version").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--dataset-version <id>","Dataset version ID").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.datasetVersion&&(e.datasetVersionId=t.datasetVersion),t.parameters&&(e.parameters=b("parameters",t.parameters));let n=await a(ot,{input:e});c(`Pipeline run queued: ${n.labRunPipeline.status}`),s(t,n.labRunPipeline);}catch(e){i(e);}}),r.command("list-runs").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(it,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListPipelineRuns.items,{headers:["ID","Pipeline","Status","Started","Finished"],rows:e.labListPipelineRuns.items.map(n=>[d(n.id,12),d(n.pipelineId,12),n.status,E(n.startedAt),E(n.finishedAt)])});}catch(e){i(e);}}),r.command("transition-run").description("Advance a pipeline run through its execution lifecycle").argument("<id>","Pipeline run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--log <s>","Execution log").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(st,{id:t,status:e.status.toUpperCase(),log:e.log});c(`Pipeline run moved to ${n.labTransitionPipelineRun.status}`),s(e,n.labTransitionPipelineRun);}catch(n){i(n);}});}function kt(o){let r=o.command("inventory").description("Labsofscience lab inventory (reagents, samples, consumables)");r.command("list").description("List inventory items").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE").option("--status <s>","IN_STOCK|LOW|OUT_OF_STOCK|EXPIRED|QUARANTINED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(ct,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListInventoryItems.items,{headers:["ID","Name","Category","Status","Qty","Unit"],rows:e.labListInventoryItems.items.map(n=>[d(n.id,12),n.name,n.category,n.status,String(n.quantity),n.unit])});}catch(e){i(e);}}),r.command("get").description("Get an inventory item by id").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(at,{id:t});if(!n.labInventoryItem)throw new u(`Inventory item ${t} not found`);s(e,n.labInventoryItem);}catch(n){i(n);}}),r.command("create").description("Create an inventory item").requiredOption("--name <name>","Item name").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE","REAGENT").option("--quantity <n>","Quantity",A).option("--unit <s>","Unit of measure").option("--reorder-level <n>","Reorder level",A).option("--location <s>","Storage location").option("--vendor <s>","Vendor").option("--catalog-number <s>","Catalog number").option("--lot-number <s>","Lot number").option("--expires-at <iso>","Expiry date (ISO)").option("--sds-file <id>","wspace-files-svc File id for the SDS").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"REAGENT").toUpperCase()};t.quantity!==void 0&&(e.quantity=t.quantity),t.unit&&(e.unit=t.unit),t.reorderLevel!==void 0&&(e.reorderLevel=t.reorderLevel),t.location&&(e.location=t.location),t.vendor&&(e.vendor=t.vendor),t.catalogNumber&&(e.catalogNumber=t.catalogNumber),t.lotNumber&&(e.lotNumber=t.lotNumber),t.expiresAt&&(e.expiresAt=t.expiresAt),t.sdsFile&&(e.sdsFileId=t.sdsFile),t.tags&&(e.tags=l(t.tags));let n=await a(pt,{input:e});c(`Inventory item created: ${n.labCreateInventoryItem.name}`),s(t,n.labCreateInventoryItem);}catch(e){i(e);}}),r.command("adjust").description("Apply a signed quantity delta and recompute stock status").argument("<id>","Inventory item ID").requiredOption("--delta <n>","Signed quantity delta (positive = restock)",A).option("--reason <s>","Reason for adjustment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={delta:e.delta};e.reason&&(n.reason=e.reason);let f=await a(ut,{id:t,input:n});c(`Inventory adjusted: ${f.labAdjustInventory.quantity} ${f.labAdjustInventory.unit}`),s(e,f.labAdjustInventory);}catch(n){i(n);}}),r.command("archive").description("Archive an inventory item").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(dt,{id:t});c(`Inventory item archived: ${n.labArchiveInventoryItem}`),s(e,{archived:n.labArchiveInventoryItem});}catch(n){i(n);}});}function xt(o){let r=o.command("instruments").description("Labsofscience instruments & bookings");r.command("list").description("List instruments").option("--status <s>","AVAILABLE|IN_USE|MAINTENANCE|OFFLINE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(lt,{status:t.status?t.status.toUpperCase():void 0});s(t,e.labListInstruments,{headers:["ID","Name","Model","Location","Status","Approval"],rows:e.labListInstruments.map(n=>[d(n.id,12),n.name,n.model??"-",n.location??"-",n.status,n.requiresApproval?"yes":"no"])});}catch(e){i(e);}}),r.command("get").description("Get an instrument by id").argument("<id>","Instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(mt,{id:t});if(!n.labInstrument)throw new u(`Instrument ${t} not found`);s(e,n.labInstrument);}catch(n){i(n);}}),r.command("create").description("Create an instrument").requiredOption("--name <name>","Instrument name").option("--model <s>","Model").option("--location <s>","Location").option("--custodian <id>","Custodian user ID").option("--requires-approval","Bookings require approval").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.model&&(e.model=t.model),t.location&&(e.location=t.location),t.custodian&&(e.custodianId=t.custodian),t.requiresApproval&&(e.requiresApproval=!0),t.tags&&(e.tags=l(t.tags));let n=await a(gt,{input:e});c(`Instrument created: ${n.labCreateInstrument.name}`),s(t,n.labCreateInstrument);}catch(e){i(e);}}),r.command("book").description("Reserve an instrument for a time window").requiredOption("--instrument <id>","Instrument ID").requiredOption("--start <iso>","Start time (ISO)").requiredOption("--end <iso>","End time (ISO)").option("--experiment <id>","Experiment ID").option("--purpose <s>","Booking purpose").option("-f, --format <format>","Output format").action(async t=>{try{let e={instrumentId:t.instrument,startTime:t.start,endTime:t.end};t.experiment&&(e.experimentId=t.experiment),t.purpose&&(e.purpose=t.purpose);let n=await a(ft,{input:e});c(`Instrument booked: ${n.labBookInstrument.status}`),s(t,n.labBookInstrument);}catch(e){i(e);}}),r.command("cancel-booking").description("Cancel an instrument booking").argument("<id>","Booking ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(It,{id:t});c(`Booking cancelled: ${n.labCancelBooking.status}`),s(e,n.labCancelBooking);}catch(n){i(n);}});}function vt(o){o.command("health").description("Labsofscience service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await k(bt);c(t.labHealth),s(r,{health:t.labHealth});}catch(t){i(t);}});}var Ut={id:"labsofscience",version:"1.0.0",displayName:"Labsofscience",dependsOn:["auth","workspaces"],register(o,r){T(r);let t=o.command("labsofscience").description("Labsofscience science & discovery platform");yt(t),Ct(t),Et(t),ht(t),At(t),wt(t),Lt(t),kt(t),xt(t),vt(t);}},jn=Ut;module.exports=jn;
|
|
347
|
+
`;function b(o,r){try{return JSON.parse(r)}catch{throw new u(`--${o} must be valid JSON`)}}function p(o){let r=Number.parseInt(o,10);if(Number.isNaN(r))throw new u(`Expected an integer but got "${o}"`);return r}function A(o){let r=Number.parseFloat(o);if(Number.isNaN(r))throw new u(`Expected a number but got "${o}"`);return r}function l(o){return o.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function g(o,r){return {limit:o,offset:r}}function yt(o){let r=o.command("projects").description("Labsofscience research projects");r.command("list").description("List research projects").option("--status <s>","Filter by project status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListProjects.items,{headers:["ID","Name","Code","Field","Status","Visibility"],rows:e.labListProjects.items.map(n=>[d(n.id,12),n.name,n.code??"-",n.field??"-",n.status,n.visibility])});}catch(e){i(e);}}),r.command("get").description("Get a research project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(R,{id:t});if(!n.labProject)throw new u(`Project ${t} not found`);s(e,n.labProject);}catch(n){i(n);}}),r.command("create").description("Create a research project").requiredOption("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","PLANNING|ACTIVE|ON_HOLD|COMPLETED|ARCHIVED","PLANNING").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,status:(t.status??"PLANNING").toUpperCase(),visibility:(t.visibility??"WORKSPACE").toUpperCase()};t.code&&(e.code=t.code),t.description&&(e.description=t.description),t.field&&(e.field=t.field),t.pi&&(e.principalInvestigatorId=t.pi),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=l(t.tags));let n=await a(O,{input:e});c(`Project created: ${n.labCreateProject.name}`),s(t,n.labCreateProject);}catch(e){i(e);}}),r.command("update").description("Update a research project").argument("<id>","Project ID").option("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","Project status").option("--visibility <v>","Visibility").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.code&&(n.code=e.code),e.description!==void 0&&(n.description=e.description),e.field&&(n.field=e.field),e.pi&&(n.principalInvestigatorId=e.pi),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.status&&(n.status=e.status.toUpperCase()),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(D,{id:t,input:n});c("Project updated"),s(e,f.labUpdateProject);}catch(n){i(n);}}),r.command("archive").description("Archive a research project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(S,{id:t});c(`Project archived: ${n.labArchiveProject}`),s(e,{archived:n.labArchiveProject});}catch(n){i(n);}});}function Ct(o){let r=o.command("experiments").description("Labsofscience experiments");r.command("list").description("List experiments").option("--project <id>","Filter by project ID").option("--status <s>","Filter by experiment status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(_,{projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListExperiments.items,{headers:["ID","Title","Status","Project","Lead"],rows:e.labListExperiments.items.map(n=>[d(n.id,12),n.title,n.status,d(n.projectId,12),n.leadResearcherId?d(n.leadResearcherId,12):"-"])});}catch(e){i(e);}}),r.command("get").description("Get an experiment by id").argument("<id>","Experiment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(N,{id:t});if(!n.labExperiment)throw new u(`Experiment ${t} not found`);s(e,n.labExperiment);}catch(n){i(n);}}),r.command("create").description("Create an experiment").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.description&&(e.description=t.description),t.hypothesis&&(e.hypothesis=t.hypothesis),t.lead&&(e.leadResearcherId=t.lead),t.protocol&&(e.protocolId=t.protocol),t.variables&&(e.variables=b("variables",t.variables)),t.tags&&(e.tags=l(t.tags));let n=await a($,{input:e});c(`Experiment created: ${n.labCreateExperiment.title}`),s(t,n.labCreateExperiment);}catch(e){i(e);}}),r.command("update").description("Update an experiment").argument("<id>","Experiment ID").option("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.hypothesis!==void 0&&(n.hypothesis=e.hypothesis),e.lead&&(n.leadResearcherId=e.lead),e.protocol&&(n.protocolId=e.protocol),e.variables&&(n.variables=b("variables",e.variables)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(j,{id:t,input:n});c("Experiment updated"),s(e,f.labUpdateExperiment);}catch(n){i(n);}}),r.command("transition").description("Advance an experiment through its lifecycle").argument("<id>","Experiment ID").requiredOption("--status <s>","DESIGN|RUNNING|ANALYSIS|COMPLETE|ABANDONED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(B,{id:t,status:e.status.toUpperCase()});c(`Experiment moved to ${n.labTransitionExperiment.status}`),s(e,n.labTransitionExperiment);}catch(n){i(n);}});}function Et(o){let r=o.command("runs").description("Labsofscience reproducible experiment runs");r.command("list").description("List experiment runs").option("--experiment <id>","Filter by experiment ID").option("--status <s>","Filter by run status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{experimentId:t.experiment,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListRuns.items,{headers:["ID","Run #","Status","Experiment","Started","Completed"],rows:e.labListRuns.items.map(n=>[d(n.id,12),String(n.runNumber),n.status,d(n.experimentId,12),E(n.startedAt),E(n.completedAt)])});}catch(e){i(e);}}),r.command("start").description("Start a new reproducible run of an experiment").requiredOption("--experiment <id>","Experiment ID").option("--notes <s>","Run notes").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={experimentId:t.experiment};t.notes&&(e.notes=t.notes),t.parameters&&(e.parameters=b("parameters",t.parameters));let n=await a(U,{input:e});c(`Run #${n.labStartRun.runNumber} started`),s(t,n.labStartRun);}catch(e){i(e);}}),r.command("complete").description("Record observations and complete a run with a terminal status").argument("<id>","Run ID").requiredOption("--status <s>","SUCCEEDED|FAILED|CANCELLED").option("--notes <s>","Result notes").option("--observations <json>","Observations JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={id:t,status:e.status.toUpperCase()},f={};e.notes&&(f.notes=e.notes),e.observations&&(f.observations=b("observations",e.observations)),Object.keys(f).length&&(n.input=f);let w=await a(M,n);c(`Run #${w.labCompleteRun.runNumber} completed: ${w.labCompleteRun.status}`),s(e,w.labCompleteRun);}catch(n){i(n);}});}function ht(o){let r=o.command("notebook").description("Labsofscience electronic lab notebook (ELN)");r.command("list").description("List notebook entries").option("--experiment <id>","Filter by experiment ID").option("--project <id>","Filter by project ID").option("--status <s>","Filter by entry status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(F,{experimentId:t.experiment,projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListNotebookEntries.items,{headers:["ID","Title","Status","Project","Author"],rows:e.labListNotebookEntries.items.map(n=>[d(n.id,12),n.title,n.status,d(n.projectId,12),d(n.authorId,12)])});}catch(e){i(e);}}),r.command("create").description("Create a notebook entry").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Entry title").option("--body <s>","Entry body").option("--experiment <id>","Experiment ID").option("--run <id>","Run ID").option("--file-ids <csv>","Comma-separated wspace-files-svc File ids").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.body&&(e.body=t.body),t.experiment&&(e.experimentId=t.experiment),t.run&&(e.runId=t.run),t.fileIds&&(e.fileIds=l(t.fileIds)),t.tags&&(e.tags=l(t.tags));let n=await a(V,{input:e});c(`Notebook entry created: ${n.labCreateNotebookEntry.title}`),s(t,n.labCreateNotebookEntry);}catch(e){i(e);}}),r.command("sign").description("Sign a notebook entry (locks editable content)").argument("<id>","Entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(W,{id:t});c(`Notebook entry signed: ${n.labSignNotebookEntry.status}`),s(e,n.labSignNotebookEntry);}catch(n){i(n);}});}function At(o){let r=o.command("protocols").description("Labsofscience versioned protocols");r.command("list").description("List protocols").option("--status <s>","DRAFT|PUBLISHED|DEPRECATED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(H,{status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListProtocols.items,{headers:["ID","Name","Status","Version","Est. min"],rows:e.labListProtocols.items.map(n=>[d(n.id,12),n.name,n.status,String(n.version),n.estimatedMinutes!=null?String(n.estimatedMinutes):"-"])});}catch(e){i(e);}}),r.command("get").description("Get a protocol by id").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(G,{id:t});if(!n.labProtocol)throw new u(`Protocol ${t} not found`);s(e,n.labProtocol);}catch(n){i(n);}}),r.command("create").description("Create a protocol").requiredOption("--name <name>","Protocol name").option("--summary <s>","Summary").option("--author <id>","Author user ID").option("--estimated-minutes <n>","Estimated minutes",p).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.summary&&(e.summary=t.summary),t.author&&(e.authorId=t.author),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.materials&&(e.materials=l(t.materials)),t.safetyNotes&&(e.safetyNotes=t.safetyNotes),t.tags&&(e.tags=l(t.tags));let n=await a(z,{input:e});c(`Protocol created: ${n.labCreateProtocol.name}`),s(t,n.labCreateProtocol);}catch(e){i(e);}}),r.command("update").description("Update a protocol").argument("<id>","Protocol ID").option("--name <name>","Protocol name").option("--summary <s>","Summary").option("--estimated-minutes <n>","Estimated minutes",p).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.summary!==void 0&&(n.summary=e.summary),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.materials&&(n.materials=l(e.materials)),e.safetyNotes!==void 0&&(n.safetyNotes=e.safetyNotes),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let f=await a(J,{id:t,input:n});c("Protocol updated"),s(e,f.labUpdateProtocol);}catch(n){i(n);}}),r.command("publish").description("Publish a draft protocol, freezing its version").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(K,{id:t});c(`Protocol published: v${n.labPublishProtocol.version}`),s(e,n.labPublishProtocol);}catch(n){i(n);}}),r.command("add-step").description("Append a step to a protocol").requiredOption("--protocol <id>","Protocol ID").requiredOption("--instruction <s>","Step instruction").option("--kind <k>","PREPARATION|INCUBATION|MEASUREMENT|ANALYSIS|CLEANUP|SAFETY","PREPARATION").option("--ordinal <n>","Step ordinal",p).option("--duration-minutes <n>","Duration (minutes)",p).option("--critical","Mark step as critical").option("-f, --format <format>","Output format").action(async t=>{try{let e={protocolId:t.protocol,instruction:t.instruction,kind:(t.kind??"PREPARATION").toUpperCase()};t.ordinal!==void 0&&(e.ordinal=t.ordinal),t.durationMinutes!==void 0&&(e.durationMinutes=t.durationMinutes),t.critical&&(e.isCritical=!0);let n=await a(Y,{input:e});c(`Step added at ordinal ${n.labAddProtocolStep.ordinal}`),s(t,n.labAddProtocolStep);}catch(e){i(e);}});}function wt(o){let r=o.command("datasets").description("Labsofscience versioned datasets");r.command("list").description("List datasets").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE").option("--status <s>","ACTIVE|LOCKED|ARCHIVED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(X,{kind:t.kind?t.kind.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListDatasets.items,{headers:["ID","Name","Kind","Status","Latest v"],rows:e.labListDatasets.items.map(n=>[d(n.id,12),n.name,n.kind,n.status,String(n.latestVersion)])});}catch(e){i(e);}}),r.command("get").description("Get a dataset by id").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Q,{id:t});if(!n.labDataset)throw new u(`Dataset ${t} not found`);s(e,n.labDataset);}catch(n){i(n);}}),r.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--description <s>","Description").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE","RAW").option("--experiment <id>","Experiment ID").option("--project <id>","Project ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"RAW").toUpperCase()};t.description&&(e.description=t.description),t.experiment&&(e.experimentId=t.experiment),t.project&&(e.projectId=t.project),t.tags&&(e.tags=l(t.tags));let n=await a(Z,{input:e});c(`Dataset created: ${n.labCreateDataset.name}`),s(t,n.labCreateDataset);}catch(e){i(e);}}),r.command("add-version").description("Append an immutable version to a dataset").requiredOption("--dataset <id>","Dataset ID").option("--file <id>","wspace-files-svc File id holding the snapshot bytes").option("--size-bytes <s>","Size in bytes").option("--row-count <n>","Row count",p).option("--checksum <s>","Checksum").option("--change-note <s>","Change note").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset};t.file&&(e.fileId=t.file),t.sizeBytes&&(e.sizeBytes=t.sizeBytes),t.rowCount!==void 0&&(e.rowCount=t.rowCount),t.checksum&&(e.checksum=t.checksum),t.changeNote&&(e.changeNote=t.changeNote);let n=await a(tt,{input:e});c(`Dataset version added: v${n.labAddDatasetVersion.version}`),s(t,n.labAddDatasetVersion);}catch(e){i(e);}}),r.command("archive").description("Archive a dataset").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(et,{id:t});c(`Dataset archived: ${n.labArchiveDataset}`),s(e,{archived:n.labArchiveDataset});}catch(n){i(n);}});}function Lt(o){let r=o.command("pipelines").description("Labsofscience reproducible analysis pipelines");r.command("list").description("List analysis pipelines").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(nt);s(t,e.labListPipelines.items,{headers:["ID","Name","Engine","Version","Active"],rows:e.labListPipelines.items.map(n=>[d(n.id,12),n.name,n.engine,String(n.version),n.isActive?"yes":"no"])});}catch(e){i(e);}}),r.command("create").description("Create an analysis pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--engine <s>","Execution engine").option("--project <id>","Project ID").option("--definition <json>","Pipeline definition JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.engine&&(e.engine=t.engine),t.project&&(e.projectId=t.project),t.definition&&(e.definition=b("definition",t.definition)),t.tags&&(e.tags=l(t.tags));let n=await a(rt,{input:e});c(`Pipeline created: ${n.labCreatePipeline.name}`),s(t,n.labCreatePipeline);}catch(e){i(e);}}),r.command("run").description("Queue a reproducible pipeline run over a dataset version").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--dataset-version <id>","Dataset version ID").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.datasetVersion&&(e.datasetVersionId=t.datasetVersion),t.parameters&&(e.parameters=b("parameters",t.parameters));let n=await a(ot,{input:e});c(`Pipeline run queued: ${n.labRunPipeline.status}`),s(t,n.labRunPipeline);}catch(e){i(e);}}),r.command("list-runs").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(it,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListPipelineRuns.items,{headers:["ID","Pipeline","Status","Started","Finished"],rows:e.labListPipelineRuns.items.map(n=>[d(n.id,12),d(n.pipelineId,12),n.status,E(n.startedAt),E(n.finishedAt)])});}catch(e){i(e);}}),r.command("transition-run").description("Advance a pipeline run through its execution lifecycle").argument("<id>","Pipeline run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--log <s>","Execution log").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(st,{id:t,status:e.status.toUpperCase(),log:e.log});c(`Pipeline run moved to ${n.labTransitionPipelineRun.status}`),s(e,n.labTransitionPipelineRun);}catch(n){i(n);}});}function kt(o){let r=o.command("inventory").description("Labsofscience lab inventory (reagents, samples, consumables)");r.command("list").description("List inventory items").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE").option("--status <s>","IN_STOCK|LOW|OUT_OF_STOCK|EXPIRED|QUARANTINED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(ct,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:g(t.limit,t.offset)});s(t,e.labListInventoryItems.items,{headers:["ID","Name","Category","Status","Qty","Unit"],rows:e.labListInventoryItems.items.map(n=>[d(n.id,12),n.name,n.category,n.status,String(n.quantity),n.unit])});}catch(e){i(e);}}),r.command("get").description("Get an inventory item by id").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(at,{id:t});if(!n.labInventoryItem)throw new u(`Inventory item ${t} not found`);s(e,n.labInventoryItem);}catch(n){i(n);}}),r.command("create").description("Create an inventory item").requiredOption("--name <name>","Item name").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE","REAGENT").option("--quantity <n>","Quantity",A).option("--unit <s>","Unit of measure").option("--reorder-level <n>","Reorder level",A).option("--location <s>","Storage location").option("--vendor <s>","Vendor").option("--catalog-number <s>","Catalog number").option("--lot-number <s>","Lot number").option("--expires-at <iso>","Expiry date (ISO)").option("--sds-file <id>","wspace-files-svc File id for the SDS").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"REAGENT").toUpperCase()};t.quantity!==void 0&&(e.quantity=t.quantity),t.unit&&(e.unit=t.unit),t.reorderLevel!==void 0&&(e.reorderLevel=t.reorderLevel),t.location&&(e.location=t.location),t.vendor&&(e.vendor=t.vendor),t.catalogNumber&&(e.catalogNumber=t.catalogNumber),t.lotNumber&&(e.lotNumber=t.lotNumber),t.expiresAt&&(e.expiresAt=t.expiresAt),t.sdsFile&&(e.sdsFileId=t.sdsFile),t.tags&&(e.tags=l(t.tags));let n=await a(pt,{input:e});c(`Inventory item created: ${n.labCreateInventoryItem.name}`),s(t,n.labCreateInventoryItem);}catch(e){i(e);}}),r.command("adjust").description("Apply a signed quantity delta and recompute stock status").argument("<id>","Inventory item ID").requiredOption("--delta <n>","Signed quantity delta (positive = restock)",A).option("--reason <s>","Reason for adjustment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={delta:e.delta};e.reason&&(n.reason=e.reason);let f=await a(ut,{id:t,input:n});c(`Inventory adjusted: ${f.labAdjustInventory.quantity} ${f.labAdjustInventory.unit}`),s(e,f.labAdjustInventory);}catch(n){i(n);}}),r.command("archive").description("Archive an inventory item").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(dt,{id:t});c(`Inventory item archived: ${n.labArchiveInventoryItem}`),s(e,{archived:n.labArchiveInventoryItem});}catch(n){i(n);}});}function xt(o){let r=o.command("instruments").description("Labsofscience instruments & bookings");r.command("list").description("List instruments").option("--status <s>","AVAILABLE|IN_USE|MAINTENANCE|OFFLINE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(lt,{status:t.status?t.status.toUpperCase():void 0});s(t,e.labListInstruments.items,{headers:["ID","Name","Model","Location","Status","Approval"],rows:e.labListInstruments.items.map(n=>[d(n.id,12),n.name,n.model??"-",n.location??"-",n.status,n.requiresApproval?"yes":"no"])});}catch(e){i(e);}}),r.command("get").description("Get an instrument by id").argument("<id>","Instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(mt,{id:t});if(!n.labInstrument)throw new u(`Instrument ${t} not found`);s(e,n.labInstrument);}catch(n){i(n);}}),r.command("create").description("Create an instrument").requiredOption("--name <name>","Instrument name").option("--model <s>","Model").option("--location <s>","Location").option("--custodian <id>","Custodian user ID").option("--requires-approval","Bookings require approval").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.model&&(e.model=t.model),t.location&&(e.location=t.location),t.custodian&&(e.custodianId=t.custodian),t.requiresApproval&&(e.requiresApproval=!0),t.tags&&(e.tags=l(t.tags));let n=await a(gt,{input:e});c(`Instrument created: ${n.labCreateInstrument.name}`),s(t,n.labCreateInstrument);}catch(e){i(e);}}),r.command("book").description("Reserve an instrument for a time window").requiredOption("--instrument <id>","Instrument ID").requiredOption("--start <iso>","Start time (ISO)").requiredOption("--end <iso>","End time (ISO)").option("--experiment <id>","Experiment ID").option("--purpose <s>","Booking purpose").option("-f, --format <format>","Output format").action(async t=>{try{let e={instrumentId:t.instrument,startTime:t.start,endTime:t.end};t.experiment&&(e.experimentId=t.experiment),t.purpose&&(e.purpose=t.purpose);let n=await a(ft,{input:e});c(`Instrument booked: ${n.labBookInstrument.status}`),s(t,n.labBookInstrument);}catch(e){i(e);}}),r.command("cancel-booking").description("Cancel an instrument booking").argument("<id>","Booking ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(It,{id:t});c(`Booking cancelled: ${n.labCancelBooking.status}`),s(e,n.labCancelBooking);}catch(n){i(n);}});}function vt(o){o.command("health").description("Labsofscience service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await k(bt);c(t.labHealth),s(r,{health:t.labHealth});}catch(t){i(t);}});}var Ut={id:"labsofscience",version:"1.0.0",displayName:"Labsofscience",dependsOn:["auth","workspaces"],register(o,r){T(r);let t=o.command("labsofscience").description("Labsofscience science & discovery platform");yt(t),Ct(t),Et(t),ht(t),At(t),wt(t),Lt(t),kt(t),xt(t),vt(t);}},jn=Ut;module.exports=jn;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a,b,h as h$1,
|
|
1
|
+
import {a,b,i,r,h as h$1,k as k$1,q as q$1,d as d$1}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.js';var P=`
|
|
2
2
|
query LabProject($id: ID!) {
|
|
3
3
|
labProject(id: $id) {
|
|
4
4
|
id workspaceId name code description field status visibility
|
|
@@ -220,8 +220,11 @@ import {a,b,h as h$1,p,g,i,o as o$1,d as d$1}from'../../chunk-W4JZR7RJ.js';impor
|
|
|
220
220
|
`,X=`
|
|
221
221
|
query LabListPipelines {
|
|
222
222
|
labListPipelines {
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
items {
|
|
224
|
+
id workspaceId projectId name description engine version isActive definition tags
|
|
225
|
+
createdAt updatedAt
|
|
226
|
+
}
|
|
227
|
+
pageInfo { cursor hasMore }
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
`,Q=`
|
|
@@ -313,7 +316,8 @@ import {a,b,h as h$1,p,g,i,o as o$1,d as d$1}from'../../chunk-W4JZR7RJ.js';impor
|
|
|
313
316
|
`,pt=`
|
|
314
317
|
query LabListInstruments($status: LabInstrumentStatus) {
|
|
315
318
|
labListInstruments(status: $status) {
|
|
316
|
-
id name model location status requiresApproval custodianId tags createdAt
|
|
319
|
+
items { id name model location status requiresApproval custodianId tags createdAt }
|
|
320
|
+
pageInfo { cursor hasMore }
|
|
317
321
|
}
|
|
318
322
|
}
|
|
319
323
|
`,dt=`
|
|
@@ -340,4 +344,4 @@ import {a,b,h as h$1,p,g,i,o as o$1,d as d$1}from'../../chunk-W4JZR7RJ.js';impor
|
|
|
340
344
|
query LabHealth {
|
|
341
345
|
labHealth
|
|
342
346
|
}
|
|
343
|
-
`;function y(p,i){try{return JSON.parse(i)}catch{throw new o(`--${p} must be valid JSON`)}}function d(p){let i=Number.parseInt(p,10);if(Number.isNaN(i))throw new o(`Expected an integer but got "${p}"`);return i}function A(p){let i=Number.parseFloat(p);if(Number.isNaN(i))throw new o(`Expected a number but got "${p}"`);return i}function c(p){return p.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function l(p,i){return {limit:p,offset:i}}function lt(p$1){let i$1=p$1.command("projects").description("Labsofscience research projects");i$1.command("list").description("List research projects").option("--status <s>","Filter by project status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(h,{status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListProjects.items,{headers:["ID","Name","Code","Field","Status","Visibility"],rows:e.labListProjects.items.map(n=>[p(n.id,12),n.name,n.code??"-",n.field??"-",n.status,n.visibility])});}catch(e){g(e);}}),i$1.command("get").description("Get a research project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(P,{id:t});if(!n.labProject)throw new o(`Project ${t} not found`);h$1(e,n.labProject);}catch(n){g(n);}}),i$1.command("create").description("Create a research project").requiredOption("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","PLANNING|ACTIVE|ON_HOLD|COMPLETED|ARCHIVED","PLANNING").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,status:(t.status??"PLANNING").toUpperCase(),visibility:(t.visibility??"WORKSPACE").toUpperCase()};t.code&&(e.code=t.code),t.description&&(e.description=t.description),t.field&&(e.field=t.field),t.pi&&(e.principalInvestigatorId=t.pi),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=c(t.tags));let n=await b(N,{input:e});i(`Project created: ${n.labCreateProject.name}`),h$1(t,n.labCreateProject);}catch(e){g(e);}}),i$1.command("update").description("Update a research project").argument("<id>","Project ID").option("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","Project status").option("--visibility <v>","Visibility").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.code&&(n.code=e.code),e.description!==void 0&&(n.description=e.description),e.field&&(n.field=e.field),e.pi&&(n.principalInvestigatorId=e.pi),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.status&&(n.status=e.status.toUpperCase()),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(v,{id:t,input:n});i("Project updated"),h$1(e,g.labUpdateProject);}catch(n){g(n);}}),i$1.command("archive").description("Archive a research project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(O,{id:t});i(`Project archived: ${n.labArchiveProject}`),h$1(e,{archived:n.labArchiveProject});}catch(n){g(n);}});}function gt(p$1){let i$1=p$1.command("experiments").description("Labsofscience experiments");i$1.command("list").description("List experiments").option("--project <id>","Filter by project ID").option("--status <s>","Filter by experiment status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(T,{projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListExperiments.items,{headers:["ID","Title","Status","Project","Lead"],rows:e.labListExperiments.items.map(n=>[p(n.id,12),n.title,n.status,p(n.projectId,12),n.leadResearcherId?p(n.leadResearcherId,12):"-"])});}catch(e){g(e);}}),i$1.command("get").description("Get an experiment by id").argument("<id>","Experiment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(D,{id:t});if(!n.labExperiment)throw new o(`Experiment ${t} not found`);h$1(e,n.labExperiment);}catch(n){g(n);}}),i$1.command("create").description("Create an experiment").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.description&&(e.description=t.description),t.hypothesis&&(e.hypothesis=t.hypothesis),t.lead&&(e.leadResearcherId=t.lead),t.protocol&&(e.protocolId=t.protocol),t.variables&&(e.variables=y("variables",t.variables)),t.tags&&(e.tags=c(t.tags));let n=await b(w,{input:e});i(`Experiment created: ${n.labCreateExperiment.title}`),h$1(t,n.labCreateExperiment);}catch(e){g(e);}}),i$1.command("update").description("Update an experiment").argument("<id>","Experiment ID").option("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.hypothesis!==void 0&&(n.hypothesis=e.hypothesis),e.lead&&(n.leadResearcherId=e.lead),e.protocol&&(n.protocolId=e.protocol),e.variables&&(n.variables=y("variables",e.variables)),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(S,{id:t,input:n});i("Experiment updated"),h$1(e,g.labUpdateExperiment);}catch(n){g(n);}}),i$1.command("transition").description("Advance an experiment through its lifecycle").argument("<id>","Experiment ID").requiredOption("--status <s>","DESIGN|RUNNING|ANALYSIS|COMPLETE|ABANDONED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(_,{id:t,status:e.status.toUpperCase()});i(`Experiment moved to ${n.labTransitionExperiment.status}`),h$1(e,n.labTransitionExperiment);}catch(n){g(n);}});}function ft(p$1){let i$1=p$1.command("runs").description("Labsofscience reproducible experiment runs");i$1.command("list").description("List experiment runs").option("--experiment <id>","Filter by experiment ID").option("--status <s>","Filter by run status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(x,{experimentId:t.experiment,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListRuns.items,{headers:["ID","Run #","Status","Experiment","Started","Completed"],rows:e.labListRuns.items.map(n=>[p(n.id,12),String(n.runNumber),n.status,p(n.experimentId,12),o$1(n.startedAt),o$1(n.completedAt)])});}catch(e){g(e);}}),i$1.command("start").description("Start a new reproducible run of an experiment").requiredOption("--experiment <id>","Experiment ID").option("--notes <s>","Run notes").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={experimentId:t.experiment};t.notes&&(e.notes=t.notes),t.parameters&&(e.parameters=y("parameters",t.parameters));let n=await b(k,{input:e});i(`Run #${n.labStartRun.runNumber} started`),h$1(t,n.labStartRun);}catch(e){g(e);}}),i$1.command("complete").description("Record observations and complete a run with a terminal status").argument("<id>","Run ID").requiredOption("--status <s>","SUCCEEDED|FAILED|CANCELLED").option("--notes <s>","Result notes").option("--observations <json>","Observations JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={id:t,status:e.status.toUpperCase()},g={};e.notes&&(g.notes=e.notes),e.observations&&(g.observations=y("observations",e.observations)),Object.keys(g).length&&(n.input=g);let L=await b($,n);i(`Run #${L.labCompleteRun.runNumber} completed: ${L.labCompleteRun.status}`),h$1(e,L.labCompleteRun);}catch(n){g(n);}});}function It(p$1){let i$1=p$1.command("notebook").description("Labsofscience electronic lab notebook (ELN)");i$1.command("list").description("List notebook entries").option("--experiment <id>","Filter by experiment ID").option("--project <id>","Filter by project ID").option("--status <s>","Filter by entry status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(B,{experimentId:t.experiment,projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListNotebookEntries.items,{headers:["ID","Title","Status","Project","Author"],rows:e.labListNotebookEntries.items.map(n=>[p(n.id,12),n.title,n.status,p(n.projectId,12),p(n.authorId,12)])});}catch(e){g(e);}}),i$1.command("create").description("Create a notebook entry").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Entry title").option("--body <s>","Entry body").option("--experiment <id>","Experiment ID").option("--run <id>","Run ID").option("--file-ids <csv>","Comma-separated wspace-files-svc File ids").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.body&&(e.body=t.body),t.experiment&&(e.experimentId=t.experiment),t.run&&(e.runId=t.run),t.fileIds&&(e.fileIds=c(t.fileIds)),t.tags&&(e.tags=c(t.tags));let n=await b(j,{input:e});i(`Notebook entry created: ${n.labCreateNotebookEntry.title}`),h$1(t,n.labCreateNotebookEntry);}catch(e){g(e);}}),i$1.command("sign").description("Sign a notebook entry (locks editable content)").argument("<id>","Entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(U,{id:t});i(`Notebook entry signed: ${n.labSignNotebookEntry.status}`),h$1(e,n.labSignNotebookEntry);}catch(n){g(n);}});}function bt(p$1){let i$1=p$1.command("protocols").description("Labsofscience versioned protocols");i$1.command("list").description("List protocols").option("--status <s>","DRAFT|PUBLISHED|DEPRECATED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(q,{status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListProtocols.items,{headers:["ID","Name","Status","Version","Est. min"],rows:e.labListProtocols.items.map(n=>[p(n.id,12),n.name,n.status,String(n.version),n.estimatedMinutes!=null?String(n.estimatedMinutes):"-"])});}catch(e){g(e);}}),i$1.command("get").description("Get a protocol by id").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(M,{id:t});if(!n.labProtocol)throw new o(`Protocol ${t} not found`);h$1(e,n.labProtocol);}catch(n){g(n);}}),i$1.command("create").description("Create a protocol").requiredOption("--name <name>","Protocol name").option("--summary <s>","Summary").option("--author <id>","Author user ID").option("--estimated-minutes <n>","Estimated minutes",d).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.summary&&(e.summary=t.summary),t.author&&(e.authorId=t.author),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.materials&&(e.materials=c(t.materials)),t.safetyNotes&&(e.safetyNotes=t.safetyNotes),t.tags&&(e.tags=c(t.tags));let n=await b(V,{input:e});i(`Protocol created: ${n.labCreateProtocol.name}`),h$1(t,n.labCreateProtocol);}catch(e){g(e);}}),i$1.command("update").description("Update a protocol").argument("<id>","Protocol ID").option("--name <name>","Protocol name").option("--summary <s>","Summary").option("--estimated-minutes <n>","Estimated minutes",d).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.summary!==void 0&&(n.summary=e.summary),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.materials&&(n.materials=c(e.materials)),e.safetyNotes!==void 0&&(n.safetyNotes=e.safetyNotes),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(F,{id:t,input:n});i("Protocol updated"),h$1(e,g.labUpdateProtocol);}catch(n){g(n);}}),i$1.command("publish").description("Publish a draft protocol, freezing its version").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(H,{id:t});i(`Protocol published: v${n.labPublishProtocol.version}`),h$1(e,n.labPublishProtocol);}catch(n){g(n);}}),i$1.command("add-step").description("Append a step to a protocol").requiredOption("--protocol <id>","Protocol ID").requiredOption("--instruction <s>","Step instruction").option("--kind <k>","PREPARATION|INCUBATION|MEASUREMENT|ANALYSIS|CLEANUP|SAFETY","PREPARATION").option("--ordinal <n>","Step ordinal",d).option("--duration-minutes <n>","Duration (minutes)",d).option("--critical","Mark step as critical").option("-f, --format <format>","Output format").action(async t=>{try{let e={protocolId:t.protocol,instruction:t.instruction,kind:(t.kind??"PREPARATION").toUpperCase()};t.ordinal!==void 0&&(e.ordinal=t.ordinal),t.durationMinutes!==void 0&&(e.durationMinutes=t.durationMinutes),t.critical&&(e.isCritical=!0);let n=await b(J,{input:e});i(`Step added at ordinal ${n.labAddProtocolStep.ordinal}`),h$1(t,n.labAddProtocolStep);}catch(e){g(e);}});}function yt(p$1){let i$1=p$1.command("datasets").description("Labsofscience versioned datasets");i$1.command("list").description("List datasets").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE").option("--status <s>","ACTIVE|LOCKED|ARCHIVED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(W,{kind:t.kind?t.kind.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListDatasets.items,{headers:["ID","Name","Kind","Status","Latest v"],rows:e.labListDatasets.items.map(n=>[p(n.id,12),n.name,n.kind,n.status,String(n.latestVersion)])});}catch(e){g(e);}}),i$1.command("get").description("Get a dataset by id").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(G,{id:t});if(!n.labDataset)throw new o(`Dataset ${t} not found`);h$1(e,n.labDataset);}catch(n){g(n);}}),i$1.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--description <s>","Description").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE","RAW").option("--experiment <id>","Experiment ID").option("--project <id>","Project ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"RAW").toUpperCase()};t.description&&(e.description=t.description),t.experiment&&(e.experimentId=t.experiment),t.project&&(e.projectId=t.project),t.tags&&(e.tags=c(t.tags));let n=await b(z,{input:e});i(`Dataset created: ${n.labCreateDataset.name}`),h$1(t,n.labCreateDataset);}catch(e){g(e);}}),i$1.command("add-version").description("Append an immutable version to a dataset").requiredOption("--dataset <id>","Dataset ID").option("--file <id>","wspace-files-svc File id holding the snapshot bytes").option("--size-bytes <s>","Size in bytes").option("--row-count <n>","Row count",d).option("--checksum <s>","Checksum").option("--change-note <s>","Change note").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset};t.file&&(e.fileId=t.file),t.sizeBytes&&(e.sizeBytes=t.sizeBytes),t.rowCount!==void 0&&(e.rowCount=t.rowCount),t.checksum&&(e.checksum=t.checksum),t.changeNote&&(e.changeNote=t.changeNote);let n=await b(K,{input:e});i(`Dataset version added: v${n.labAddDatasetVersion.version}`),h$1(t,n.labAddDatasetVersion);}catch(e){g(e);}}),i$1.command("archive").description("Archive a dataset").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(Y,{id:t});i(`Dataset archived: ${n.labArchiveDataset}`),h$1(e,{archived:n.labArchiveDataset});}catch(n){g(n);}});}function Et(p$1){let i$1=p$1.command("pipelines").description("Labsofscience reproducible analysis pipelines");i$1.command("list").description("List analysis pipelines").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(X);h$1(t,e.labListPipelines,{headers:["ID","Name","Engine","Version","Active"],rows:e.labListPipelines.map(n=>[p(n.id,12),n.name,n.engine,String(n.version),n.isActive?"yes":"no"])});}catch(e){g(e);}}),i$1.command("create").description("Create an analysis pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--engine <s>","Execution engine").option("--project <id>","Project ID").option("--definition <json>","Pipeline definition JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.engine&&(e.engine=t.engine),t.project&&(e.projectId=t.project),t.definition&&(e.definition=y("definition",t.definition)),t.tags&&(e.tags=c(t.tags));let n=await b(Q,{input:e});i(`Pipeline created: ${n.labCreatePipeline.name}`),h$1(t,n.labCreatePipeline);}catch(e){g(e);}}),i$1.command("run").description("Queue a reproducible pipeline run over a dataset version").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--dataset-version <id>","Dataset version ID").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.datasetVersion&&(e.datasetVersionId=t.datasetVersion),t.parameters&&(e.parameters=y("parameters",t.parameters));let n=await b(Z,{input:e});i(`Pipeline run queued: ${n.labRunPipeline.status}`),h$1(t,n.labRunPipeline);}catch(e){g(e);}}),i$1.command("list-runs").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(tt,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListPipelineRuns.items,{headers:["ID","Pipeline","Status","Started","Finished"],rows:e.labListPipelineRuns.items.map(n=>[p(n.id,12),p(n.pipelineId,12),n.status,o$1(n.startedAt),o$1(n.finishedAt)])});}catch(e){g(e);}}),i$1.command("transition-run").description("Advance a pipeline run through its execution lifecycle").argument("<id>","Pipeline run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--log <s>","Execution log").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(et,{id:t,status:e.status.toUpperCase(),log:e.log});i(`Pipeline run moved to ${n.labTransitionPipelineRun.status}`),h$1(e,n.labTransitionPipelineRun);}catch(n){g(n);}});}function At(p$1){let i$1=p$1.command("inventory").description("Labsofscience lab inventory (reagents, samples, consumables)");i$1.command("list").description("List inventory items").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE").option("--status <s>","IN_STOCK|LOW|OUT_OF_STOCK|EXPIRED|QUARANTINED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(it,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});h$1(t,e.labListInventoryItems.items,{headers:["ID","Name","Category","Status","Qty","Unit"],rows:e.labListInventoryItems.items.map(n=>[p(n.id,12),n.name,n.category,n.status,String(n.quantity),n.unit])});}catch(e){g(e);}}),i$1.command("get").description("Get an inventory item by id").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(nt,{id:t});if(!n.labInventoryItem)throw new o(`Inventory item ${t} not found`);h$1(e,n.labInventoryItem);}catch(n){g(n);}}),i$1.command("create").description("Create an inventory item").requiredOption("--name <name>","Item name").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE","REAGENT").option("--quantity <n>","Quantity",A).option("--unit <s>","Unit of measure").option("--reorder-level <n>","Reorder level",A).option("--location <s>","Storage location").option("--vendor <s>","Vendor").option("--catalog-number <s>","Catalog number").option("--lot-number <s>","Lot number").option("--expires-at <iso>","Expiry date (ISO)").option("--sds-file <id>","wspace-files-svc File id for the SDS").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"REAGENT").toUpperCase()};t.quantity!==void 0&&(e.quantity=t.quantity),t.unit&&(e.unit=t.unit),t.reorderLevel!==void 0&&(e.reorderLevel=t.reorderLevel),t.location&&(e.location=t.location),t.vendor&&(e.vendor=t.vendor),t.catalogNumber&&(e.catalogNumber=t.catalogNumber),t.lotNumber&&(e.lotNumber=t.lotNumber),t.expiresAt&&(e.expiresAt=t.expiresAt),t.sdsFile&&(e.sdsFileId=t.sdsFile),t.tags&&(e.tags=c(t.tags));let n=await b(ot,{input:e});i(`Inventory item created: ${n.labCreateInventoryItem.name}`),h$1(t,n.labCreateInventoryItem);}catch(e){g(e);}}),i$1.command("adjust").description("Apply a signed quantity delta and recompute stock status").argument("<id>","Inventory item ID").requiredOption("--delta <n>","Signed quantity delta (positive = restock)",A).option("--reason <s>","Reason for adjustment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={delta:e.delta};e.reason&&(n.reason=e.reason);let g=await b(at,{id:t,input:n});i(`Inventory adjusted: ${g.labAdjustInventory.quantity} ${g.labAdjustInventory.unit}`),h$1(e,g.labAdjustInventory);}catch(n){g(n);}}),i$1.command("archive").description("Archive an inventory item").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(rt,{id:t});i(`Inventory item archived: ${n.labArchiveInventoryItem}`),h$1(e,{archived:n.labArchiveInventoryItem});}catch(n){g(n);}});}function Lt(p$1){let i$1=p$1.command("instruments").description("Labsofscience instruments & bookings");i$1.command("list").description("List instruments").option("--status <s>","AVAILABLE|IN_USE|MAINTENANCE|OFFLINE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(pt,{status:t.status?t.status.toUpperCase():void 0});h$1(t,e.labListInstruments,{headers:["ID","Name","Model","Location","Status","Approval"],rows:e.labListInstruments.map(n=>[p(n.id,12),n.name,n.model??"-",n.location??"-",n.status,n.requiresApproval?"yes":"no"])});}catch(e){g(e);}}),i$1.command("get").description("Get an instrument by id").argument("<id>","Instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(st,{id:t});if(!n.labInstrument)throw new o(`Instrument ${t} not found`);h$1(e,n.labInstrument);}catch(n){g(n);}}),i$1.command("create").description("Create an instrument").requiredOption("--name <name>","Instrument name").option("--model <s>","Model").option("--location <s>","Location").option("--custodian <id>","Custodian user ID").option("--requires-approval","Bookings require approval").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.model&&(e.model=t.model),t.location&&(e.location=t.location),t.custodian&&(e.custodianId=t.custodian),t.requiresApproval&&(e.requiresApproval=!0),t.tags&&(e.tags=c(t.tags));let n=await b(dt,{input:e});i(`Instrument created: ${n.labCreateInstrument.name}`),h$1(t,n.labCreateInstrument);}catch(e){g(e);}}),i$1.command("book").description("Reserve an instrument for a time window").requiredOption("--instrument <id>","Instrument ID").requiredOption("--start <iso>","Start time (ISO)").requiredOption("--end <iso>","End time (ISO)").option("--experiment <id>","Experiment ID").option("--purpose <s>","Booking purpose").option("-f, --format <format>","Output format").action(async t=>{try{let e={instrumentId:t.instrument,startTime:t.start,endTime:t.end};t.experiment&&(e.experimentId=t.experiment),t.purpose&&(e.purpose=t.purpose);let n=await b(mt,{input:e});i(`Instrument booked: ${n.labBookInstrument.status}`),h$1(t,n.labBookInstrument);}catch(e){g(e);}}),i$1.command("cancel-booking").description("Cancel an instrument booking").argument("<id>","Booking ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(ct,{id:t});i(`Booking cancelled: ${n.labCancelBooking.status}`),h$1(e,n.labCancelBooking);}catch(n){g(n);}});}function Ct(p){p.command("health").description("Labsofscience service health check (public)").option("-f, --format <format>","Output format").action(async i$1=>{try{let t=await d$1(ut);i(t.labHealth),h$1(i$1,{health:t.labHealth});}catch(t){g(t);}});}var Rt={id:"labsofscience",version:"1.0.0",displayName:"Labsofscience",dependsOn:["auth","workspaces"],register(p,i){a(i);let t=p.command("labsofscience").description("Labsofscience science & discovery platform");lt(t),gt(t),ft(t),It(t),bt(t),yt(t),Et(t),At(t),Lt(t),Ct(t);}},Ie=Rt;export{Ie as default};
|
|
347
|
+
`;function y(p,i){try{return JSON.parse(i)}catch{throw new o(`--${p} must be valid JSON`)}}function d(p){let i=Number.parseInt(p,10);if(Number.isNaN(i))throw new o(`Expected an integer but got "${p}"`);return i}function A(p){let i=Number.parseFloat(p);if(Number.isNaN(i))throw new o(`Expected a number but got "${p}"`);return i}function c(p){return p.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function l(p,i){return {limit:p,offset:i}}function lt(p){let i$1=p.command("projects").description("Labsofscience research projects");i$1.command("list").description("List research projects").option("--status <s>","Filter by project status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(h,{status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListProjects.items,{headers:["ID","Name","Code","Field","Status","Visibility"],rows:e.labListProjects.items.map(n=>[r(n.id,12),n.name,n.code??"-",n.field??"-",n.status,n.visibility])});}catch(e){h$1(e);}}),i$1.command("get").description("Get a research project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(P,{id:t});if(!n.labProject)throw new o(`Project ${t} not found`);i(e,n.labProject);}catch(n){h$1(n);}}),i$1.command("create").description("Create a research project").requiredOption("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","PLANNING|ACTIVE|ON_HOLD|COMPLETED|ARCHIVED","PLANNING").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,status:(t.status??"PLANNING").toUpperCase(),visibility:(t.visibility??"WORKSPACE").toUpperCase()};t.code&&(e.code=t.code),t.description&&(e.description=t.description),t.field&&(e.field=t.field),t.pi&&(e.principalInvestigatorId=t.pi),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=c(t.tags));let n=await b(N,{input:e});k$1(`Project created: ${n.labCreateProject.name}`),i(t,n.labCreateProject);}catch(e){h$1(e);}}),i$1.command("update").description("Update a research project").argument("<id>","Project ID").option("--name <name>","Project name").option("--code <code>","Project code").option("--description <s>","Description").option("--field <s>","Research field").option("--pi <id>","Principal investigator user ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--status <s>","Project status").option("--visibility <v>","Visibility").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.code&&(n.code=e.code),e.description!==void 0&&(n.description=e.description),e.field&&(n.field=e.field),e.pi&&(n.principalInvestigatorId=e.pi),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.status&&(n.status=e.status.toUpperCase()),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(v,{id:t,input:n});k$1("Project updated"),i(e,g.labUpdateProject);}catch(n){h$1(n);}}),i$1.command("archive").description("Archive a research project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(O,{id:t});k$1(`Project archived: ${n.labArchiveProject}`),i(e,{archived:n.labArchiveProject});}catch(n){h$1(n);}});}function gt(p){let i$1=p.command("experiments").description("Labsofscience experiments");i$1.command("list").description("List experiments").option("--project <id>","Filter by project ID").option("--status <s>","Filter by experiment status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(T,{projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListExperiments.items,{headers:["ID","Title","Status","Project","Lead"],rows:e.labListExperiments.items.map(n=>[r(n.id,12),n.title,n.status,r(n.projectId,12),n.leadResearcherId?r(n.leadResearcherId,12):"-"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get an experiment by id").argument("<id>","Experiment ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(D,{id:t});if(!n.labExperiment)throw new o(`Experiment ${t} not found`);i(e,n.labExperiment);}catch(n){h$1(n);}}),i$1.command("create").description("Create an experiment").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.description&&(e.description=t.description),t.hypothesis&&(e.hypothesis=t.hypothesis),t.lead&&(e.leadResearcherId=t.lead),t.protocol&&(e.protocolId=t.protocol),t.variables&&(e.variables=y("variables",t.variables)),t.tags&&(e.tags=c(t.tags));let n=await b(w,{input:e});k$1(`Experiment created: ${n.labCreateExperiment.title}`),i(t,n.labCreateExperiment);}catch(e){h$1(e);}}),i$1.command("update").description("Update an experiment").argument("<id>","Experiment ID").option("--title <t>","Experiment title").option("--description <s>","Description").option("--hypothesis <s>","Hypothesis").option("--lead <id>","Lead researcher user ID").option("--protocol <id>","Protocol ID").option("--variables <json>","Variables JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.hypothesis!==void 0&&(n.hypothesis=e.hypothesis),e.lead&&(n.leadResearcherId=e.lead),e.protocol&&(n.protocolId=e.protocol),e.variables&&(n.variables=y("variables",e.variables)),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(S,{id:t,input:n});k$1("Experiment updated"),i(e,g.labUpdateExperiment);}catch(n){h$1(n);}}),i$1.command("transition").description("Advance an experiment through its lifecycle").argument("<id>","Experiment ID").requiredOption("--status <s>","DESIGN|RUNNING|ANALYSIS|COMPLETE|ABANDONED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(_,{id:t,status:e.status.toUpperCase()});k$1(`Experiment moved to ${n.labTransitionExperiment.status}`),i(e,n.labTransitionExperiment);}catch(n){h$1(n);}});}function ft(p){let i$1=p.command("runs").description("Labsofscience reproducible experiment runs");i$1.command("list").description("List experiment runs").option("--experiment <id>","Filter by experiment ID").option("--status <s>","Filter by run status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(x,{experimentId:t.experiment,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListRuns.items,{headers:["ID","Run #","Status","Experiment","Started","Completed"],rows:e.labListRuns.items.map(n=>[r(n.id,12),String(n.runNumber),n.status,r(n.experimentId,12),q$1(n.startedAt),q$1(n.completedAt)])});}catch(e){h$1(e);}}),i$1.command("start").description("Start a new reproducible run of an experiment").requiredOption("--experiment <id>","Experiment ID").option("--notes <s>","Run notes").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={experimentId:t.experiment};t.notes&&(e.notes=t.notes),t.parameters&&(e.parameters=y("parameters",t.parameters));let n=await b(k,{input:e});k$1(`Run #${n.labStartRun.runNumber} started`),i(t,n.labStartRun);}catch(e){h$1(e);}}),i$1.command("complete").description("Record observations and complete a run with a terminal status").argument("<id>","Run ID").requiredOption("--status <s>","SUCCEEDED|FAILED|CANCELLED").option("--notes <s>","Result notes").option("--observations <json>","Observations JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={id:t,status:e.status.toUpperCase()},g={};e.notes&&(g.notes=e.notes),e.observations&&(g.observations=y("observations",e.observations)),Object.keys(g).length&&(n.input=g);let L=await b($,n);k$1(`Run #${L.labCompleteRun.runNumber} completed: ${L.labCompleteRun.status}`),i(e,L.labCompleteRun);}catch(n){h$1(n);}});}function It(p){let i$1=p.command("notebook").description("Labsofscience electronic lab notebook (ELN)");i$1.command("list").description("List notebook entries").option("--experiment <id>","Filter by experiment ID").option("--project <id>","Filter by project ID").option("--status <s>","Filter by entry status").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(B,{experimentId:t.experiment,projectId:t.project,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListNotebookEntries.items,{headers:["ID","Title","Status","Project","Author"],rows:e.labListNotebookEntries.items.map(n=>[r(n.id,12),n.title,n.status,r(n.projectId,12),r(n.authorId,12)])});}catch(e){h$1(e);}}),i$1.command("create").description("Create a notebook entry").requiredOption("--project <id>","Project ID").requiredOption("--title <t>","Entry title").option("--body <s>","Entry body").option("--experiment <id>","Experiment ID").option("--run <id>","Run ID").option("--file-ids <csv>","Comma-separated wspace-files-svc File ids").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title};t.body&&(e.body=t.body),t.experiment&&(e.experimentId=t.experiment),t.run&&(e.runId=t.run),t.fileIds&&(e.fileIds=c(t.fileIds)),t.tags&&(e.tags=c(t.tags));let n=await b(j,{input:e});k$1(`Notebook entry created: ${n.labCreateNotebookEntry.title}`),i(t,n.labCreateNotebookEntry);}catch(e){h$1(e);}}),i$1.command("sign").description("Sign a notebook entry (locks editable content)").argument("<id>","Entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(U,{id:t});k$1(`Notebook entry signed: ${n.labSignNotebookEntry.status}`),i(e,n.labSignNotebookEntry);}catch(n){h$1(n);}});}function bt(p){let i$1=p.command("protocols").description("Labsofscience versioned protocols");i$1.command("list").description("List protocols").option("--status <s>","DRAFT|PUBLISHED|DEPRECATED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(q,{status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListProtocols.items,{headers:["ID","Name","Status","Version","Est. min"],rows:e.labListProtocols.items.map(n=>[r(n.id,12),n.name,n.status,String(n.version),n.estimatedMinutes!=null?String(n.estimatedMinutes):"-"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get a protocol by id").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(M,{id:t});if(!n.labProtocol)throw new o(`Protocol ${t} not found`);i(e,n.labProtocol);}catch(n){h$1(n);}}),i$1.command("create").description("Create a protocol").requiredOption("--name <name>","Protocol name").option("--summary <s>","Summary").option("--author <id>","Author user ID").option("--estimated-minutes <n>","Estimated minutes",d).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.summary&&(e.summary=t.summary),t.author&&(e.authorId=t.author),t.estimatedMinutes!==void 0&&(e.estimatedMinutes=t.estimatedMinutes),t.materials&&(e.materials=c(t.materials)),t.safetyNotes&&(e.safetyNotes=t.safetyNotes),t.tags&&(e.tags=c(t.tags));let n=await b(V,{input:e});k$1(`Protocol created: ${n.labCreateProtocol.name}`),i(t,n.labCreateProtocol);}catch(e){h$1(e);}}),i$1.command("update").description("Update a protocol").argument("<id>","Protocol ID").option("--name <name>","Protocol name").option("--summary <s>","Summary").option("--estimated-minutes <n>","Estimated minutes",d).option("--materials <csv>","Comma-separated materials").option("--safety-notes <s>","Safety notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.summary!==void 0&&(n.summary=e.summary),e.estimatedMinutes!==void 0&&(n.estimatedMinutes=e.estimatedMinutes),e.materials&&(n.materials=c(e.materials)),e.safetyNotes!==void 0&&(n.safetyNotes=e.safetyNotes),e.tags&&(n.tags=c(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let g=await b(F,{id:t,input:n});k$1("Protocol updated"),i(e,g.labUpdateProtocol);}catch(n){h$1(n);}}),i$1.command("publish").description("Publish a draft protocol, freezing its version").argument("<id>","Protocol ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(H,{id:t});k$1(`Protocol published: v${n.labPublishProtocol.version}`),i(e,n.labPublishProtocol);}catch(n){h$1(n);}}),i$1.command("add-step").description("Append a step to a protocol").requiredOption("--protocol <id>","Protocol ID").requiredOption("--instruction <s>","Step instruction").option("--kind <k>","PREPARATION|INCUBATION|MEASUREMENT|ANALYSIS|CLEANUP|SAFETY","PREPARATION").option("--ordinal <n>","Step ordinal",d).option("--duration-minutes <n>","Duration (minutes)",d).option("--critical","Mark step as critical").option("-f, --format <format>","Output format").action(async t=>{try{let e={protocolId:t.protocol,instruction:t.instruction,kind:(t.kind??"PREPARATION").toUpperCase()};t.ordinal!==void 0&&(e.ordinal=t.ordinal),t.durationMinutes!==void 0&&(e.durationMinutes=t.durationMinutes),t.critical&&(e.isCritical=!0);let n=await b(J,{input:e});k$1(`Step added at ordinal ${n.labAddProtocolStep.ordinal}`),i(t,n.labAddProtocolStep);}catch(e){h$1(e);}});}function yt(p){let i$1=p.command("datasets").description("Labsofscience versioned datasets");i$1.command("list").description("List datasets").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE").option("--status <s>","ACTIVE|LOCKED|ARCHIVED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(W,{kind:t.kind?t.kind.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListDatasets.items,{headers:["ID","Name","Kind","Status","Latest v"],rows:e.labListDatasets.items.map(n=>[r(n.id,12),n.name,n.kind,n.status,String(n.latestVersion)])});}catch(e){h$1(e);}}),i$1.command("get").description("Get a dataset by id").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(G,{id:t});if(!n.labDataset)throw new o(`Dataset ${t} not found`);i(e,n.labDataset);}catch(n){h$1(n);}}),i$1.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--description <s>","Description").option("--kind <k>","RAW|PROCESSED|RESULT|REFERENCE","RAW").option("--experiment <id>","Experiment ID").option("--project <id>","Project ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"RAW").toUpperCase()};t.description&&(e.description=t.description),t.experiment&&(e.experimentId=t.experiment),t.project&&(e.projectId=t.project),t.tags&&(e.tags=c(t.tags));let n=await b(z,{input:e});k$1(`Dataset created: ${n.labCreateDataset.name}`),i(t,n.labCreateDataset);}catch(e){h$1(e);}}),i$1.command("add-version").description("Append an immutable version to a dataset").requiredOption("--dataset <id>","Dataset ID").option("--file <id>","wspace-files-svc File id holding the snapshot bytes").option("--size-bytes <s>","Size in bytes").option("--row-count <n>","Row count",d).option("--checksum <s>","Checksum").option("--change-note <s>","Change note").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset};t.file&&(e.fileId=t.file),t.sizeBytes&&(e.sizeBytes=t.sizeBytes),t.rowCount!==void 0&&(e.rowCount=t.rowCount),t.checksum&&(e.checksum=t.checksum),t.changeNote&&(e.changeNote=t.changeNote);let n=await b(K,{input:e});k$1(`Dataset version added: v${n.labAddDatasetVersion.version}`),i(t,n.labAddDatasetVersion);}catch(e){h$1(e);}}),i$1.command("archive").description("Archive a dataset").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(Y,{id:t});k$1(`Dataset archived: ${n.labArchiveDataset}`),i(e,{archived:n.labArchiveDataset});}catch(n){h$1(n);}});}function Et(p){let i$1=p.command("pipelines").description("Labsofscience reproducible analysis pipelines");i$1.command("list").description("List analysis pipelines").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(X);i(t,e.labListPipelines.items,{headers:["ID","Name","Engine","Version","Active"],rows:e.labListPipelines.items.map(n=>[r(n.id,12),n.name,n.engine,String(n.version),n.isActive?"yes":"no"])});}catch(e){h$1(e);}}),i$1.command("create").description("Create an analysis pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--engine <s>","Execution engine").option("--project <id>","Project ID").option("--definition <json>","Pipeline definition JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.engine&&(e.engine=t.engine),t.project&&(e.projectId=t.project),t.definition&&(e.definition=y("definition",t.definition)),t.tags&&(e.tags=c(t.tags));let n=await b(Q,{input:e});k$1(`Pipeline created: ${n.labCreatePipeline.name}`),i(t,n.labCreatePipeline);}catch(e){h$1(e);}}),i$1.command("run").description("Queue a reproducible pipeline run over a dataset version").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--dataset-version <id>","Dataset version ID").option("--parameters <json>","Parameters JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.datasetVersion&&(e.datasetVersionId=t.datasetVersion),t.parameters&&(e.parameters=y("parameters",t.parameters));let n=await b(Z,{input:e});k$1(`Pipeline run queued: ${n.labRunPipeline.status}`),i(t,n.labRunPipeline);}catch(e){h$1(e);}}),i$1.command("list-runs").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(tt,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListPipelineRuns.items,{headers:["ID","Pipeline","Status","Started","Finished"],rows:e.labListPipelineRuns.items.map(n=>[r(n.id,12),r(n.pipelineId,12),n.status,q$1(n.startedAt),q$1(n.finishedAt)])});}catch(e){h$1(e);}}),i$1.command("transition-run").description("Advance a pipeline run through its execution lifecycle").argument("<id>","Pipeline run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--log <s>","Execution log").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(et,{id:t,status:e.status.toUpperCase(),log:e.log});k$1(`Pipeline run moved to ${n.labTransitionPipelineRun.status}`),i(e,n.labTransitionPipelineRun);}catch(n){h$1(n);}});}function At(p){let i$1=p.command("inventory").description("Labsofscience lab inventory (reagents, samples, consumables)");i$1.command("list").description("List inventory items").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE").option("--status <s>","IN_STOCK|LOW|OUT_OF_STOCK|EXPIRED|QUARANTINED").option("--limit <n>","Page size",d,50).option("--offset <n>","Offset",d,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(it,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:l(t.limit,t.offset)});i(t,e.labListInventoryItems.items,{headers:["ID","Name","Category","Status","Qty","Unit"],rows:e.labListInventoryItems.items.map(n=>[r(n.id,12),n.name,n.category,n.status,String(n.quantity),n.unit])});}catch(e){h$1(e);}}),i$1.command("get").description("Get an inventory item by id").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(nt,{id:t});if(!n.labInventoryItem)throw new o(`Inventory item ${t} not found`);i(e,n.labInventoryItem);}catch(n){h$1(n);}}),i$1.command("create").description("Create an inventory item").requiredOption("--name <name>","Item name").option("--category <c>","REAGENT|CHEMICAL|BIOLOGICAL|CONSUMABLE|EQUIPMENT_PART|SAMPLE","REAGENT").option("--quantity <n>","Quantity",A).option("--unit <s>","Unit of measure").option("--reorder-level <n>","Reorder level",A).option("--location <s>","Storage location").option("--vendor <s>","Vendor").option("--catalog-number <s>","Catalog number").option("--lot-number <s>","Lot number").option("--expires-at <iso>","Expiry date (ISO)").option("--sds-file <id>","wspace-files-svc File id for the SDS").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"REAGENT").toUpperCase()};t.quantity!==void 0&&(e.quantity=t.quantity),t.unit&&(e.unit=t.unit),t.reorderLevel!==void 0&&(e.reorderLevel=t.reorderLevel),t.location&&(e.location=t.location),t.vendor&&(e.vendor=t.vendor),t.catalogNumber&&(e.catalogNumber=t.catalogNumber),t.lotNumber&&(e.lotNumber=t.lotNumber),t.expiresAt&&(e.expiresAt=t.expiresAt),t.sdsFile&&(e.sdsFileId=t.sdsFile),t.tags&&(e.tags=c(t.tags));let n=await b(ot,{input:e});k$1(`Inventory item created: ${n.labCreateInventoryItem.name}`),i(t,n.labCreateInventoryItem);}catch(e){h$1(e);}}),i$1.command("adjust").description("Apply a signed quantity delta and recompute stock status").argument("<id>","Inventory item ID").requiredOption("--delta <n>","Signed quantity delta (positive = restock)",A).option("--reason <s>","Reason for adjustment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={delta:e.delta};e.reason&&(n.reason=e.reason);let g=await b(at,{id:t,input:n});k$1(`Inventory adjusted: ${g.labAdjustInventory.quantity} ${g.labAdjustInventory.unit}`),i(e,g.labAdjustInventory);}catch(n){h$1(n);}}),i$1.command("archive").description("Archive an inventory item").argument("<id>","Inventory item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(rt,{id:t});k$1(`Inventory item archived: ${n.labArchiveInventoryItem}`),i(e,{archived:n.labArchiveInventoryItem});}catch(n){h$1(n);}});}function Lt(p){let i$1=p.command("instruments").description("Labsofscience instruments & bookings");i$1.command("list").description("List instruments").option("--status <s>","AVAILABLE|IN_USE|MAINTENANCE|OFFLINE").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b(pt,{status:t.status?t.status.toUpperCase():void 0});i(t,e.labListInstruments.items,{headers:["ID","Name","Model","Location","Status","Approval"],rows:e.labListInstruments.items.map(n=>[r(n.id,12),n.name,n.model??"-",n.location??"-",n.status,n.requiresApproval?"yes":"no"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get an instrument by id").argument("<id>","Instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(st,{id:t});if(!n.labInstrument)throw new o(`Instrument ${t} not found`);i(e,n.labInstrument);}catch(n){h$1(n);}}),i$1.command("create").description("Create an instrument").requiredOption("--name <name>","Instrument name").option("--model <s>","Model").option("--location <s>","Location").option("--custodian <id>","Custodian user ID").option("--requires-approval","Bookings require approval").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.model&&(e.model=t.model),t.location&&(e.location=t.location),t.custodian&&(e.custodianId=t.custodian),t.requiresApproval&&(e.requiresApproval=!0),t.tags&&(e.tags=c(t.tags));let n=await b(dt,{input:e});k$1(`Instrument created: ${n.labCreateInstrument.name}`),i(t,n.labCreateInstrument);}catch(e){h$1(e);}}),i$1.command("book").description("Reserve an instrument for a time window").requiredOption("--instrument <id>","Instrument ID").requiredOption("--start <iso>","Start time (ISO)").requiredOption("--end <iso>","End time (ISO)").option("--experiment <id>","Experiment ID").option("--purpose <s>","Booking purpose").option("-f, --format <format>","Output format").action(async t=>{try{let e={instrumentId:t.instrument,startTime:t.start,endTime:t.end};t.experiment&&(e.experimentId=t.experiment),t.purpose&&(e.purpose=t.purpose);let n=await b(mt,{input:e});k$1(`Instrument booked: ${n.labBookInstrument.status}`),i(t,n.labBookInstrument);}catch(e){h$1(e);}}),i$1.command("cancel-booking").description("Cancel an instrument booking").argument("<id>","Booking ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b(ct,{id:t});k$1(`Booking cancelled: ${n.labCancelBooking.status}`),i(e,n.labCancelBooking);}catch(n){h$1(n);}});}function Ct(p){p.command("health").description("Labsofscience service health check (public)").option("-f, --format <format>","Output format").action(async i$1=>{try{let t=await d$1(ut);k$1(t.labHealth),i(i$1,{health:t.labHealth});}catch(t){h$1(t);}});}var Rt={id:"labsofscience",version:"1.0.0",displayName:"Labsofscience",dependsOn:["auth","workspaces"],register(p,i){a(i);let t=p.command("labsofscience").description("Labsofscience science & discovery platform");lt(t),gt(t),ft(t),It(t),bt(t),yt(t),Et(t),At(t),Lt(t),Ct(t);}},Ie=Rt;export{Ie as default};
|