@burdenoff/cli-sdk 2026.1021.1 → 2026.1031.1

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.
Files changed (95) hide show
  1. package/dist/{chunk-NLEVVDXR.js → chunk-SQSFZFQZ.js} +1 -1
  2. package/dist/{chunk-IZXPWPKX.js → chunk-UAFYTYK6.js} +7 -7
  3. package/dist/core/index.cjs +7 -7
  4. package/dist/core/index.js +1 -1
  5. package/dist/index.cjs +7 -7
  6. package/dist/index.js +1 -1
  7. package/dist/modules/adaptercloud/index.js +1 -1
  8. package/dist/modules/artistrybase/index.cjs +3 -3
  9. package/dist/modules/artistrybase/index.js +1 -1
  10. package/dist/modules/assethandler/index.cjs +1 -1
  11. package/dist/modules/assethandler/index.js +1 -1
  12. package/dist/modules/atheletebridge/index.cjs +6 -6
  13. package/dist/modules/atheletebridge/index.js +1 -1
  14. package/dist/modules/auth/index.cjs +39 -17
  15. package/dist/modules/auth/index.js +42 -20
  16. package/dist/modules/billing/index.js +1 -1
  17. package/dist/modules/brainyrich/index.cjs +2 -2
  18. package/dist/modules/brainyrich/index.js +1 -1
  19. package/dist/modules/buildmyiq/index.cjs +1 -1
  20. package/dist/modules/buildmyiq/index.js +1 -1
  21. package/dist/modules/channels/index.cjs +13 -14
  22. package/dist/modules/channels/index.js +11 -12
  23. package/dist/modules/collabkin/index.js +1 -1
  24. package/dist/modules/comradecircle/index.cjs +3 -3
  25. package/dist/modules/comradecircle/index.js +1 -1
  26. package/dist/modules/conversations/index.cjs +1 -1
  27. package/dist/modules/conversations/index.js +5 -5
  28. package/dist/modules/coolandlovely/index.js +1 -1
  29. package/dist/modules/cosmicintersection/index.cjs +4 -4
  30. package/dist/modules/cosmicintersection/index.js +1 -1
  31. package/dist/modules/crewfoundry/index.cjs +4 -4
  32. package/dist/modules/crewfoundry/index.js +1 -1
  33. package/dist/modules/devportal/index.cjs +3 -3
  34. package/dist/modules/devportal/index.js +1 -1
  35. package/dist/modules/ecoimpacthub/index.js +1 -1
  36. package/dist/modules/eventfullymanaged/index.js +1 -1
  37. package/dist/modules/export/index.cjs +2 -2
  38. package/dist/modules/export/index.js +1 -1
  39. package/dist/modules/files/index.cjs +4 -4
  40. package/dist/modules/files/index.js +1 -1
  41. package/dist/modules/fluidgrids/index.js +1 -1
  42. package/dist/modules/ggnomad/index.cjs +3 -3
  43. package/dist/modules/ggnomad/index.js +1 -1
  44. package/dist/modules/govcitizenhub/index.cjs +2 -2
  45. package/dist/modules/govcitizenhub/index.js +1 -1
  46. package/dist/modules/groups/index.cjs +16 -15
  47. package/dist/modules/groups/index.js +15 -14
  48. package/dist/modules/headshotmarketing/index.js +1 -1
  49. package/dist/modules/hookmovies/index.js +1 -1
  50. package/dist/modules/housingvista/index.cjs +6 -6
  51. package/dist/modules/housingvista/index.js +1 -1
  52. package/dist/modules/integrations/index.cjs +1 -1
  53. package/dist/modules/integrations/index.js +1 -1
  54. package/dist/modules/intelwatchtower/index.cjs +3 -3
  55. package/dist/modules/intelwatchtower/index.js +1 -1
  56. package/dist/modules/kadaikodi/index.js +1 -1
  57. package/dist/modules/labsofscience/index.cjs +3 -3
  58. package/dist/modules/labsofscience/index.js +1 -1
  59. package/dist/modules/manufacturedops/index.js +1 -1
  60. package/dist/modules/movethewheels/index.js +1 -1
  61. package/dist/modules/mybodyshield/index.cjs +4 -4
  62. package/dist/modules/mybodyshield/index.js +1 -1
  63. package/dist/modules/notifications/index.cjs +2 -2
  64. package/dist/modules/notifications/index.js +1 -1
  65. package/dist/modules/organizations/index.js +1 -1
  66. package/dist/modules/planmagnet/index.js +1 -1
  67. package/dist/modules/products/index.cjs +5 -5
  68. package/dist/modules/products/index.js +5 -5
  69. package/dist/modules/proserviceworld/index.js +1 -1
  70. package/dist/modules/rbac/index.cjs +8 -19
  71. package/dist/modules/rbac/index.js +6 -17
  72. package/dist/modules/sandbox/index.cjs +3 -3
  73. package/dist/modules/sandbox/index.js +1 -1
  74. package/dist/modules/scheduler/index.cjs +4 -4
  75. package/dist/modules/scheduler/index.js +1 -1
  76. package/dist/modules/security/index.cjs +2 -2
  77. package/dist/modules/security/index.js +1 -1
  78. package/dist/modules/semanticfed/index.js +1 -1
  79. package/dist/modules/store/index.cjs +2 -2
  80. package/dist/modules/store/index.js +1 -1
  81. package/dist/modules/subscriberbot/index.js +1 -1
  82. package/dist/modules/support/index.js +1 -1
  83. package/dist/modules/tags/index.cjs +2 -2
  84. package/dist/modules/tags/index.js +1 -1
  85. package/dist/modules/technospam/index.cjs +2 -2
  86. package/dist/modules/technospam/index.js +1 -1
  87. package/dist/modules/theculturepost/index.js +1 -1
  88. package/dist/modules/theglobalfuel/index.js +1 -1
  89. package/dist/modules/timecampus/index.js +1 -1
  90. package/dist/modules/tours/index.cjs +2 -2
  91. package/dist/modules/tours/index.js +1 -1
  92. package/dist/modules/vibecontrols/index.js +1 -1
  93. package/dist/modules/workspaces/index.cjs +10 -10
  94. package/dist/modules/workspaces/index.js +12 -12
  95. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(o,t){super(o),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},E=class extends u{constructor(o,t){super(o,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(o,t){super(o),this.name="CliInternalError",this.cause=t;}};var S=null;function R(r){S=r;}function h(){if(!S)throw new I("vibecontrols module helpers used before setHelpersContext was called");return S}function Pt(){let r=h();if(!r.auth.isAuthenticated())throw new E("Authentication required.",{hint:`Run \`${r.productName} auth login\` to authenticate.`})}async function a(r,o){return Pt(),h().gql.workspace.request(r,o)}async function y(r,o){return h().gql.workspaceAuthOnly.request(r,o)}function s(r){let o=r instanceof Error?r.message:String(r);throw new u(o)}function i(r,o,t){h().output.formatAndOutput(r,o,t);}function c(r){h().output.printSuccess(r);}function A(r){return h().output.formatDate(r)}function d(r,o){return h().output.truncate(r,o)}var b=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(o,t){super(o),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},E=class extends u{constructor(o,t){super(o,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(o,t){super(o),this.name="CliInternalError",this.cause=t;}};var y=null;function R(r){y=r;}function h(){if(!y)throw new I("vibecontrols module helpers used before setHelpersContext was called");return y}function Pt(){let r=h();if(!r.auth.isAuthenticated())throw new E("Authentication required.",{hint:`Run \`${r.productName} auth login\` to authenticate.`})}async function a(r,o){return Pt(),h().gql.workspace.request(r,o)}async function S(r,o){return h().gql.workspaceAuthOnly.request(r,o)}function s(r){let o=r instanceof Error?r.message:String(r);throw new u(o)}function i(r,o,t){h().output.formatAndOutput(r,o,t);}function c(r){h().output.printSuccess(r);}function A(r){return h().output.formatDate(r)}function d(r,o){return h().output.truncate(r,o)}var b=`
2
2
  query CosListCollections {
3
3
  cosListCollections {
4
4
  id name slug description isPublic tags
@@ -83,7 +83,7 @@
83
83
  description createdAt workspaceId
84
84
  }
85
85
  }
86
- `,U=`
86
+ `,_=`
87
87
  query CosGetSource($id: ID!) {
88
88
  cosSource(id: $id) {
89
89
  id name type status endpoint description config tags
@@ -92,7 +92,7 @@
92
92
  createdAt updatedAt workspaceId
93
93
  }
94
94
  }
95
- `,_=`
95
+ `,U=`
96
96
  query CosListSources(
97
97
  $type: CosSourceType
98
98
  $status: CosSourceStatus
@@ -331,4 +331,4 @@
331
331
  query CosHealth {
332
332
  cosHealth
333
333
  }
334
- `;function f(r,o){try{return JSON.parse(o)}catch{throw new u(`--${r} must be valid JSON`)}}function m(r){let o=Number.parseInt(r,10);if(Number.isNaN(o))throw new u(`Expected an integer but got "${r}"`);return o}function l(r){return r.split(",").map(o=>o.trim()).filter(o=>o.length>0)}function ft(r){let o=r.command("collections").description("Cosmicintersection dataset collections");o.command("list").description("List collections").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(b);i(t,e.cosListCollections,{headers:["ID","Name","Slug","Public","Tags"],rows:e.cosListCollections.map(n=>[d(n.id,12),n.name,n.slug??"-",n.isPublic?"yes":"no",(n.tags??[]).join(", ")])});}catch(e){s(e);}}),o.command("create").description("Create a collection").requiredOption("--name <name>","Collection name").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--public","Mark the collection public").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.slug&&(e.slug=t.slug),t.description&&(e.description=t.description),t.public&&(e.isPublic=!0),t.tags&&(e.tags=l(t.tags));let n=await a(T,{input:e});c(`Collection created: ${n.cosCreateCollection.name}`),i(t,n.cosCreateCollection);}catch(e){s(e);}});}function gt(r){let o=r.command("datasets").description("Cosmicintersection datasets");o.command("list").description("List datasets").option("--collection <id>","Filter by collection ID").option("--source <id>","Filter by source ID").option("--status <s>","DRAFT|INGESTING|AVAILABLE|DEPRECATED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(O,{collectionId:t.collection,sourceId:t.source,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListDatasets.items,{headers:["ID","Name","Access","Status","Format","Rows"],rows:e.cosListDatasets.items.map(n=>[d(n.id,12),n.name,n.accessLevel??"-",n.status??"-",n.format??"-",n.rowCount??"-"])});}catch(e){s(e);}}),o.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(D,{id:t});if(!n.cosDataset)throw new u(`Dataset ${t} not found`);i(e,n.cosDataset);}catch(n){s(n);}}),o.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--access-level <a>","EMBARGOED|PUBLIC|RESTRICTED|WORKSPACE").option("--collection <id>","Collection ID").option("--source <id>","Source ID").option("--file <id>","File ID (wspace-files-svc)").option("--format <fmt>","Data format").option("--description <s>","Description").option("--status <s>","DRAFT|INGESTING|AVAILABLE|DEPRECATED|ARCHIVED").option("--coverage <json>","Coverage JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format-out <format>","Output format").action(async t=>{try{let e={name:t.name};t.accessLevel&&(e.accessLevel=t.accessLevel.toUpperCase()),t.collection&&(e.collectionId=t.collection),t.source&&(e.sourceId=t.source),t.file&&(e.fileId=t.file),t.format&&(e.format=t.format),t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.coverage&&(e.coverage=f("coverage",t.coverage)),t.tags&&(e.tags=l(t.tags));let n=await a(v,{input:e});c(`Dataset created: ${n.cosCreateDataset.name}`),i({format:t.formatOut},n.cosCreateDataset);}catch(e){s(e);}}),o.command("update").description("Update a dataset").argument("<id>","Dataset ID").option("--name <name>","Dataset name").option("--access-level <a>","EMBARGOED|PUBLIC|RESTRICTED|WORKSPACE").option("--collection <id>","Collection ID").option("--format <fmt>","Data format").option("--description <s>","Description").option("--coverage <json>","Coverage JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format-out <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.accessLevel&&(n.accessLevel=e.accessLevel.toUpperCase()),e.collection&&(n.collectionId=e.collection),e.format&&(n.format=e.format),e.description!==void 0&&(n.description=e.description),e.coverage&&(n.coverage=f("coverage",e.coverage)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(L,{id:t,input:n});c("Dataset updated"),i({format:e.formatOut},C.cosUpdateDataset);}catch(n){s(n);}}),o.command("publish").description("Mark a dataset AVAILABLE once ingestion completes").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(x,{id:t});c(`Dataset published: ${n.cosPublishDataset.status}`),i(e,n.cosPublishDataset);}catch(n){s(n);}}),o.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(N,{id:t});c(`Dataset archived: ${String(n.cosArchiveDataset)}`),i(e,{archived:n.cosArchiveDataset});}catch(n){s(n);}}),o.command("schema-fields").description("List schema fields for a dataset").requiredOption("--dataset <id>","Dataset ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a($,{datasetId:t.dataset});i(t,e.cosListSchemaFields,{headers:["ID","Name","Type","Nullable","Pos","Unit"],rows:e.cosListSchemaFields.map(n=>[d(n.id,12),n.name,n.fieldType,n.nullable?"yes":"no",n.position!=null?String(n.position):"-",n.unit??"-"])});}catch(e){s(e);}}),o.command("add-field").description("Add a schema field to a dataset").requiredOption("--dataset <id>","Dataset ID").requiredOption("--name <name>","Field name").option("--field-type <t>","STRING|INTEGER|FLOAT|BOOLEAN|TIMESTAMP|...").option("--description <s>","Description").option("--unit <u>","Unit").option("--provenance <p>","Provenance").option("--position <n>","Position",m).option("--not-nullable","Mark the field as not nullable").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset,name:t.name};t.fieldType&&(e.fieldType=t.fieldType.toUpperCase()),t.description&&(e.description=t.description),t.unit&&(e.unit=t.unit),t.provenance&&(e.provenance=t.provenance),t.position!==void 0&&(e.position=t.position),t.notNullable&&(e.nullable=!1);let n=await a(P,{input:e});c(`Schema field added: ${n.cosAddSchemaField.name}`),i(t,n.cosAddSchemaField);}catch(e){s(e);}});}function Ct(r){let o=r.command("sources").description("Cosmicintersection data sources");o.command("list").description("List data sources").option("--type <t>","ARCHIVE|API|FILE_DROP|GROUND_SENSOR|SATELLITE|SIMULATION|STREAM|TELESCOPE").option("--status <s>","CONFIGURING|CONNECTED|SYNCING|DEGRADED|DISABLED|ERROR").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(_,{type:t.type?t.type.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListSources.items,{headers:["ID","Name","Type","Status","Last Synced"],rows:e.cosListSources.items.map(n=>[d(n.id,12),n.name,n.type??"-",n.status??"-",A(n.lastSyncedAt)])});}catch(e){s(e);}}),o.command("get").description("Get a data source by id").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(U,{id:t});if(!n.cosSource)throw new u(`Source ${t} not found`);i(e,n.cosSource);}catch(n){s(n);}}),o.command("create").description("Create a data source").requiredOption("--name <name>","Source name").option("--type <t>","ARCHIVE|API|FILE_DROP|GROUND_SENSOR|SATELLITE|SIMULATION|STREAM|TELESCOPE").option("--status <s>","Source status").option("--endpoint <url>","Endpoint URL").option("--description <s>","Description").option("--credential-ref <ref>","Credential reference").option("--config <json>","Config JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.endpoint&&(e.endpoint=t.endpoint),t.description&&(e.description=t.description),t.credentialRef&&(e.credentialRef=t.credentialRef),t.config&&(e.config=f("config",t.config)),t.tags&&(e.tags=l(t.tags));let n=await a(q,{input:e});c(`Source created: ${n.cosCreateSource.name}`),i(t,n.cosCreateSource);}catch(e){s(e);}}),o.command("update").description("Update a data source").argument("<id>","Source ID").option("--name <name>","Source name").option("--type <t>","Source type").option("--status <s>","Source status").option("--endpoint <url>","Endpoint URL").option("--description <s>","Description").option("--credential-ref <ref>","Credential reference").option("--config <json>","Config JSON").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.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.endpoint!==void 0&&(n.endpoint=e.endpoint),e.description!==void 0&&(n.description=e.description),e.credentialRef&&(n.credentialRef=e.credentialRef),e.config&&(n.config=f("config",e.config)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(G,{id:t,input:n});c("Source updated"),i(e,C.cosUpdateSource);}catch(n){s(n);}}),o.command("mark-synced").description("Record a successful sync (sets status CONNECTED + lastSyncedAt)").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(F,{id:t});c(`Source synced: ${n.cosMarkSourceSynced.status}`),i(e,n.cosMarkSourceSynced);}catch(n){s(n);}}),o.command("archive").description("Archive a data source").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t});c(`Source archived: ${String(n.cosArchiveSource)}`),i(e,{archived:n.cosArchiveSource});}catch(n){s(n);}});}function It(r){let o=r.command("notebooks").description("Cosmicintersection computational notebooks");o.command("list").description("List notebooks").option("--status <s>","DRAFT|RUNNING|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(W,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListNotebooks.items,{headers:["ID","Title","Status","Runtime","Shared"],rows:e.cosListNotebooks.items.map(n=>[d(n.id,12),n.title,n.status??"-",n.runtime??"-",n.isShared?"yes":"no"])});}catch(e){s(e);}}),o.command("get").description("Get a notebook by id").argument("<id>","Notebook ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(H,{id:t});if(!n.cosNotebook)throw new u(`Notebook ${t} not found`);i(e,n.cosNotebook);}catch(n){s(n);}}),o.command("create").description("Create a notebook").requiredOption("--title <t>","Notebook title").option("--description <s>","Description").option("--runtime <r>","Runtime").option("--file <id>","File ID (notebook document)").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("--environment <json>","Environment JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.description&&(e.description=t.description),t.runtime&&(e.runtime=t.runtime),t.file&&(e.fileId=t.file),t.datasetIds&&(e.datasetIds=l(t.datasetIds)),t.environment&&(e.environment=f("environment",t.environment)),t.tags&&(e.tags=l(t.tags));let n=await a(j,{input:e});c(`Notebook created: ${n.cosCreateNotebook.title}`),i(t,n.cosCreateNotebook);}catch(e){s(e);}}),o.command("update").description("Update a notebook").argument("<id>","Notebook ID").option("--title <t>","Notebook title").option("--description <s>","Description").option("--runtime <r>","Runtime").option("--status <s>","DRAFT|RUNNING|PUBLISHED|ARCHIVED").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("--environment <json>","Environment JSON").option("--shared <bool>","true|false",t=>t==="true").option("--share-slug <slug>","Share slug").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.runtime&&(n.runtime=e.runtime),e.status&&(n.status=e.status.toUpperCase()),e.datasetIds&&(n.datasetIds=l(e.datasetIds)),e.environment&&(n.environment=f("environment",e.environment)),e.shared!==void 0&&(n.isShared=e.shared),e.shareSlug&&(n.shareSlug=e.shareSlug),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(V,{id:t,input:n});c("Notebook updated"),i(e,C.cosUpdateNotebook);}catch(n){s(n);}}),o.command("archive").description("Archive a notebook").argument("<id>","Notebook ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(B,{id:t});c(`Notebook archived: ${String(n.cosArchiveNotebook)}`),i(e,{archived:n.cosArchiveNotebook});}catch(n){s(n);}});}function ht(r){let o=r.command("pipelines").description("Cosmicintersection data pipelines");o.command("list").description("List pipelines").option("--status <s>","DRAFT|ACTIVE|PAUSED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListPipelines.items,{headers:["ID","Name","Status","Trigger","Schedule","Version"],rows:e.cosListPipelines.items.map(n=>[d(n.id,12),n.name,n.status??"-",n.trigger??"-",n.schedule??"-",n.version!=null?String(n.version):"-"])});}catch(e){s(e);}}),o.command("get").description("Get a pipeline by id").argument("<id>","Pipeline ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});if(!n.cosPipeline)throw new u(`Pipeline ${t} not found`);i(e,n.cosPipeline);}catch(n){s(n);}}),o.command("create").description("Create a pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--trigger <t>","MANUAL|SCHEDULED|ON_INGEST|WEBHOOK").option("--schedule <cron>","Schedule (cron)").option("--definition <json>","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.trigger&&(e.trigger=t.trigger.toUpperCase()),t.schedule&&(e.schedule=t.schedule),t.definition&&(e.definition=f("definition",t.definition)),t.tags&&(e.tags=l(t.tags));let n=await a(z,{input:e});c(`Pipeline created: ${n.cosCreatePipeline.name}`),i(t,n.cosCreatePipeline);}catch(e){s(e);}}),o.command("update").description("Update a pipeline").argument("<id>","Pipeline ID").option("--name <name>","Pipeline name").option("--description <s>","Description").option("--status <s>","DRAFT|ACTIVE|PAUSED|ARCHIVED").option("--trigger <t>","MANUAL|SCHEDULED|ON_INGEST|WEBHOOK").option("--schedule <cron>","Schedule (cron)").option("--definition <json>","Definition JSON").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.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.trigger&&(n.trigger=e.trigger.toUpperCase()),e.schedule&&(n.schedule=e.schedule),e.definition&&(n.definition=f("definition",e.definition)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(Y,{id:t,input:n});c("Pipeline updated"),i(e,C.cosUpdatePipeline);}catch(n){s(n);}}),o.command("archive").description("Archive a pipeline").argument("<id>","Pipeline ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Q,{id:t});c(`Pipeline archived: ${String(n.cosArchivePipeline)}`),i(e,{archived:n.cosArchivePipeline});}catch(n){s(n);}});}function At(r){let o=r.command("runs").description("Cosmicintersection pipeline runs & steps");o.command("list").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Z,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListRuns.items,{headers:["ID","Pipeline","Run #","Status","Started"],rows:e.cosListRuns.items.map(n=>[d(n.id,12),d(n.pipelineId,12),String(n.runNumber),n.status??"-",A(n.startedAt)])});}catch(e){s(e);}}),o.command("get").description("Get a run by id").argument("<id>","Run ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(X,{id:t});if(!n.cosRun)throw new u(`Run ${t} not found`);i(e,n.cosRun);}catch(n){s(n);}}),o.command("start").description("Queue a new run of a pipeline").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--params <json>","Params JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.params&&(e.params=f("params",t.params));let n=await a(tt,{input:e});c(`Run started: #${n.cosStartRun.runNumber}`),i(t,n.cosStartRun);}catch(e){s(e);}}),o.command("transition").description("Advance a run through its lifecycle").argument("<id>","Run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(et,{id:t,status:e.status.toUpperCase()});c(`Run transitioned to ${n.cosTransitionRun.status}`),i(e,n.cosTransitionRun);}catch(n){s(n);}}),o.command("steps").description("List steps for a run").requiredOption("--run <id>","Run ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(nt,{runId:t.run});i(t,e.cosListRunSteps,{headers:["ID","Name","Kind","Status","Pos"],rows:e.cosListRunSteps.map(n=>[d(n.id,12),n.name,n.kind,n.status??"-",n.position!=null?String(n.position):"-"])});}catch(e){s(e);}}),o.command("add-step").description("Append a step to a run").requiredOption("--run <id>","Run ID").requiredOption("--name <name>","Step name").option("--kind <k>","INGEST|TRANSFORM|ANALYZE|CALIBRATE|EXPORT|NOTIFY").option("--position <n>","Position",m).option("--inputs <json>","Inputs JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={runId:t.run,name:t.name};t.kind&&(e.kind=t.kind.toUpperCase()),t.position!==void 0&&(e.position=t.position),t.inputs&&(e.inputs=f("inputs",t.inputs));let n=await a(ot,{input:e});c(`Step added: ${n.cosAddRunStep.name}`),i(t,n.cosAddRunStep);}catch(e){s(e);}});}function Et(r){let o=r.command("analyses").description("Cosmicintersection analyses");o.command("list").description("List analyses").option("--dataset <id>","Filter by dataset ID").option("--notebook <id>","Filter by notebook ID").option("--status <s>","PENDING|RUNNING|COMPLETED|FAILED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(st,{datasetId:t.dataset,notebookId:t.notebook,status:t.status?t.status.toUpperCase():void 0});i(t,e.cosListAnalyses,{headers:["ID","Title","Status","Method","AI"],rows:e.cosListAnalyses.map(n=>[d(n.id,12),n.title,n.status??"-",n.method??"-",n.aiAssisted?"yes":"no"])});}catch(e){s(e);}}),o.command("run").description("Start an analysis run").requiredOption("--title <t>","Analysis title").option("--dataset <id>","Dataset ID").option("--notebook <id>","Notebook ID").option("--method <m>","Analysis method").option("--ai-assisted","Mark the analysis as AI-assisted").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.dataset&&(e.datasetId=t.dataset),t.notebook&&(e.notebookId=t.notebook),t.method&&(e.method=t.method),t.aiAssisted&&(e.aiAssisted=!0);let n=await a(it,{input:e});c(`Analysis started: ${n.cosRunAnalysis.title}`),i(t,n.cosRunAnalysis);}catch(e){s(e);}}),o.command("complete").description("Record the terminal outcome of an analysis run").argument("<id>","Analysis ID").requiredOption("--status <s>","COMPLETED|FAILED").option("--results <json>","Results JSON").option("--output-file <id>","Output file ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(rt,{id:t,status:e.status.toUpperCase(),results:e.results?f("results",e.results):void 0,outputFileId:e.outputFile});c(`Analysis completed: ${n.cosCompleteAnalysis.status}`),i(e,n.cosCompleteAnalysis);}catch(n){s(n);}});}function St(r){let o=r.command("releases").description("Cosmicintersection citable releases");o.command("list").description("List releases").option("--status <s>","DRAFT|UNDER_REVIEW|PUBLISHED|RETRACTED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(at,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListReleases.items,{headers:["ID","Title","Version","Status","DOI"],rows:e.cosListReleases.items.map(n=>[d(n.id,12),n.title,n.version,n.status??"-",n.doi??"-"])});}catch(e){s(e);}}),o.command("create").description("Create a release").requiredOption("--title <t>","Release title").option("--version <v>","Version").option("--abstract <s>","Abstract").option("--license <l>","License").option("--notebook <id>","Notebook ID").option("--authors <csv>","Comma-separated authors").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.version&&(e.version=t.version),t.abstract&&(e.abstract=t.abstract),t.license&&(e.license=t.license),t.notebook&&(e.notebookId=t.notebook),t.authors&&(e.authors=l(t.authors)),t.datasetIds&&(e.datasetIds=l(t.datasetIds));let n=await a(ct,{input:e});c(`Release created: ${n.cosCreateRelease.title}`),i(t,n.cosCreateRelease);}catch(e){s(e);}}),o.command("publish").description("Publish a citable release and stamp it with a DOI").argument("<id>","Release ID").option("--doi <doi>","DOI to stamp").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(ut,{id:t,doi:e.doi});c(`Release published: ${n.cosPublishRelease.version}`),i(e,n.cosPublishRelease);}catch(n){s(n);}});}function yt(r){let o=r.command("grants").description("Cosmicintersection data-access grants");o.command("list").description("List data-access grants").option("--dataset <id>","Filter by dataset ID").option("--status <s>","PENDING|ACTIVE|REVOKED|EXPIRED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(pt,{datasetId:t.dataset,status:t.status?t.status.toUpperCase():void 0});i(t,e.cosListAccessGrants,{headers:["ID","Dataset","Grantee","Status","Scopes","Expires"],rows:e.cosListAccessGrants.map(n=>[d(n.id,12),d(n.datasetId,12),d(n.granteeId,12),n.status??"-",(n.scopes??[]).join(", "),A(n.expiresAt)])});}catch(e){s(e);}}),o.command("grant").description("Grant a grantee access to a dataset").requiredOption("--dataset <id>","Dataset ID").requiredOption("--grantee <id>","Grantee ID").option("--scopes <csv>","Comma-separated scopes").option("--reason <s>","Reason").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset,granteeId:t.grantee};t.scopes&&(e.scopes=l(t.scopes)),t.reason&&(e.reason=t.reason),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(dt,{input:e});c(`Access granted to ${n.cosGrantAccess.granteeId}`),i(t,n.cosGrantAccess);}catch(e){s(e);}}),o.command("revoke").description("Revoke a data-access grant").argument("<id>","Grant ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(lt,{id:t});c(`Access revoked: ${n.cosRevokeAccess.status}`),i(e,n.cosRevokeAccess);}catch(n){s(n);}});}function kt(r){r.command("health").description("Cosmicintersection service health check (public)").option("-f, --format <format>","Output format").action(async o=>{try{let t=await y(mt);c(t.cosHealth),i(o,{health:t.cosHealth});}catch(t){s(t);}});}var Ut={id:"cosmicintersection",version:"1.0.0",displayName:"Cosmicintersection",dependsOn:["auth","workspaces"],register(r,o){R(o);let t=r.command("cosmicintersection").description("Cosmicintersection open-science data platform");ft(t),gt(t),Ct(t),It(t),ht(t),At(t),Et(t),St(t),yt(t),kt(t);}},Nn=Ut;module.exports=Nn;
334
+ `;function f(r,o){try{return JSON.parse(o)}catch{throw new u(`--${r} must be valid JSON`)}}function m(r){let o=Number.parseInt(r,10);if(Number.isNaN(o))throw new u(`Expected an integer but got "${r}"`);return o}function l(r){return r.split(",").map(o=>o.trim()).filter(o=>o.length>0)}function ft(r){let o=r.command("collections").description("Cosmicintersection dataset collections");o.command("list").description("List collections").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(b);i(t,e.cosListCollections,{headers:["ID","Name","Slug","Public","Tags"],rows:e.cosListCollections.map(n=>[d(n.id,12),n.name,n.slug??"-",n.isPublic?"yes":"no",(n.tags??[]).join(", ")])});}catch(e){s(e);}}),o.command("create").description("Create a collection").requiredOption("--name <name>","Collection name").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--public","Mark the collection public").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.slug&&(e.slug=t.slug),t.description&&(e.description=t.description),t.public&&(e.isPublic=!0),t.tags&&(e.tags=l(t.tags));let n=await a(T,{input:e});c(`Collection created: ${n.cosCreateCollection.name}`),i(t,n.cosCreateCollection);}catch(e){s(e);}});}function gt(r){let o=r.command("datasets").description("Cosmicintersection datasets");o.command("list").description("List datasets").option("--collection <id>","Filter by collection ID").option("--source <id>","Filter by source ID").option("--status <s>","DRAFT|INGESTING|AVAILABLE|DEPRECATED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(O,{collectionId:t.collection,sourceId:t.source,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListDatasets.items,{headers:["ID","Name","Access","Status","Format","Rows"],rows:e.cosListDatasets.items.map(n=>[d(n.id,12),n.name,n.accessLevel??"-",n.status??"-",n.format??"-",n.rowCount??"-"])});}catch(e){s(e);}}),o.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(D,{id:t});if(!n.cosDataset)throw new u(`Dataset ${t} not found`);i(e,n.cosDataset);}catch(n){s(n);}}),o.command("create").description("Create a dataset").requiredOption("--name <name>","Dataset name").option("--access-level <a>","EMBARGOED|PUBLIC|RESTRICTED|WORKSPACE").option("--collection <id>","Collection ID").option("--source <id>","Source ID").option("--file <id>","File ID (wspace-files-svc)").option("--format <fmt>","Data format").option("--description <s>","Description").option("--status <s>","DRAFT|INGESTING|AVAILABLE|DEPRECATED|ARCHIVED").option("--coverage <json>","Coverage JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format-out <format>","Output format").action(async t=>{try{let e={name:t.name};t.accessLevel&&(e.accessLevel=t.accessLevel.toUpperCase()),t.collection&&(e.collectionId=t.collection),t.source&&(e.sourceId=t.source),t.file&&(e.fileId=t.file),t.format&&(e.format=t.format),t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.coverage&&(e.coverage=f("coverage",t.coverage)),t.tags&&(e.tags=l(t.tags));let n=await a(v,{input:e});c(`Dataset created: ${n.cosCreateDataset.name}`),i({format:t.formatOut},n.cosCreateDataset);}catch(e){s(e);}}),o.command("update").description("Update a dataset").argument("<id>","Dataset ID").option("--name <name>","Dataset name").option("--access-level <a>","EMBARGOED|PUBLIC|RESTRICTED|WORKSPACE").option("--collection <id>","Collection ID").option("--format <fmt>","Data format").option("--description <s>","Description").option("--coverage <json>","Coverage JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format-out <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.accessLevel&&(n.accessLevel=e.accessLevel.toUpperCase()),e.collection&&(n.collectionId=e.collection),e.format&&(n.format=e.format),e.description!==void 0&&(n.description=e.description),e.coverage&&(n.coverage=f("coverage",e.coverage)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(L,{id:t,input:n});c("Dataset updated"),i({format:e.formatOut},C.cosUpdateDataset);}catch(n){s(n);}}),o.command("publish").description("Mark a dataset AVAILABLE once ingestion completes").argument("<id>","Dataset ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(x,{id:t});c(`Dataset published: ${n.cosPublishDataset.status}`),i(e,n.cosPublishDataset);}catch(n){s(n);}}),o.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(N,{id:t});c(`Dataset archived: ${String(n.cosArchiveDataset)}`),i(e,{archived:n.cosArchiveDataset});}catch(n){s(n);}}),o.command("schema-fields").description("List schema fields for a dataset").requiredOption("--dataset <id>","Dataset ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a($,{datasetId:t.dataset});i(t,e.cosListSchemaFields,{headers:["ID","Name","Type","Nullable","Pos","Unit"],rows:e.cosListSchemaFields.map(n=>[d(n.id,12),n.name,n.fieldType,n.nullable?"yes":"no",n.position!=null?String(n.position):"-",n.unit??"-"])});}catch(e){s(e);}}),o.command("add-field").description("Add a schema field to a dataset").requiredOption("--dataset <id>","Dataset ID").requiredOption("--name <name>","Field name").option("--field-type <t>","STRING|INTEGER|FLOAT|BOOLEAN|TIMESTAMP|...").option("--description <s>","Description").option("--unit <u>","Unit").option("--provenance <p>","Provenance").option("--position <n>","Position",m).option("--not-nullable","Mark the field as not nullable").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset,name:t.name};t.fieldType&&(e.fieldType=t.fieldType.toUpperCase()),t.description&&(e.description=t.description),t.unit&&(e.unit=t.unit),t.provenance&&(e.provenance=t.provenance),t.position!==void 0&&(e.position=t.position),t.notNullable&&(e.nullable=!1);let n=await a(P,{input:e});c(`Schema field added: ${n.cosAddSchemaField.name}`),i(t,n.cosAddSchemaField);}catch(e){s(e);}});}function Ct(r){let o=r.command("sources").description("Cosmicintersection data sources");o.command("list").description("List data sources").option("--type <t>","ARCHIVE|API|FILE_DROP|GROUND_SENSOR|SATELLITE|SIMULATION|STREAM|TELESCOPE").option("--status <s>","CONFIGURING|CONNECTED|SYNCING|DEGRADED|DISABLED|ERROR").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(U,{type:t.type?t.type.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListSources.items,{headers:["ID","Name","Type","Status","Last Synced"],rows:e.cosListSources.items.map(n=>[d(n.id,12),n.name,n.type??"-",n.status??"-",A(n.lastSyncedAt)])});}catch(e){s(e);}}),o.command("get").description("Get a data source by id").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(_,{id:t});if(!n.cosSource)throw new u(`Source ${t} not found`);i(e,n.cosSource);}catch(n){s(n);}}),o.command("create").description("Create a data source").requiredOption("--name <name>","Source name").option("--type <t>","ARCHIVE|API|FILE_DROP|GROUND_SENSOR|SATELLITE|SIMULATION|STREAM|TELESCOPE").option("--status <s>","Source status").option("--endpoint <url>","Endpoint URL").option("--description <s>","Description").option("--credential-ref <ref>","Credential reference").option("--config <json>","Config JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.endpoint&&(e.endpoint=t.endpoint),t.description&&(e.description=t.description),t.credentialRef&&(e.credentialRef=t.credentialRef),t.config&&(e.config=f("config",t.config)),t.tags&&(e.tags=l(t.tags));let n=await a(q,{input:e});c(`Source created: ${n.cosCreateSource.name}`),i(t,n.cosCreateSource);}catch(e){s(e);}}),o.command("update").description("Update a data source").argument("<id>","Source ID").option("--name <name>","Source name").option("--type <t>","Source type").option("--status <s>","Source status").option("--endpoint <url>","Endpoint URL").option("--description <s>","Description").option("--credential-ref <ref>","Credential reference").option("--config <json>","Config JSON").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.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.endpoint!==void 0&&(n.endpoint=e.endpoint),e.description!==void 0&&(n.description=e.description),e.credentialRef&&(n.credentialRef=e.credentialRef),e.config&&(n.config=f("config",e.config)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(G,{id:t,input:n});c("Source updated"),i(e,C.cosUpdateSource);}catch(n){s(n);}}),o.command("mark-synced").description("Record a successful sync (sets status CONNECTED + lastSyncedAt)").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(F,{id:t});c(`Source synced: ${n.cosMarkSourceSynced.status}`),i(e,n.cosMarkSourceSynced);}catch(n){s(n);}}),o.command("archive").description("Archive a data source").argument("<id>","Source ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t});c(`Source archived: ${String(n.cosArchiveSource)}`),i(e,{archived:n.cosArchiveSource});}catch(n){s(n);}});}function It(r){let o=r.command("notebooks").description("Cosmicintersection computational notebooks");o.command("list").description("List notebooks").option("--status <s>","DRAFT|RUNNING|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(W,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListNotebooks.items,{headers:["ID","Title","Status","Runtime","Shared"],rows:e.cosListNotebooks.items.map(n=>[d(n.id,12),n.title,n.status??"-",n.runtime??"-",n.isShared?"yes":"no"])});}catch(e){s(e);}}),o.command("get").description("Get a notebook by id").argument("<id>","Notebook ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(H,{id:t});if(!n.cosNotebook)throw new u(`Notebook ${t} not found`);i(e,n.cosNotebook);}catch(n){s(n);}}),o.command("create").description("Create a notebook").requiredOption("--title <t>","Notebook title").option("--description <s>","Description").option("--runtime <r>","Runtime").option("--file <id>","File ID (notebook document)").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("--environment <json>","Environment JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.description&&(e.description=t.description),t.runtime&&(e.runtime=t.runtime),t.file&&(e.fileId=t.file),t.datasetIds&&(e.datasetIds=l(t.datasetIds)),t.environment&&(e.environment=f("environment",t.environment)),t.tags&&(e.tags=l(t.tags));let n=await a(j,{input:e});c(`Notebook created: ${n.cosCreateNotebook.title}`),i(t,n.cosCreateNotebook);}catch(e){s(e);}}),o.command("update").description("Update a notebook").argument("<id>","Notebook ID").option("--title <t>","Notebook title").option("--description <s>","Description").option("--runtime <r>","Runtime").option("--status <s>","DRAFT|RUNNING|PUBLISHED|ARCHIVED").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("--environment <json>","Environment JSON").option("--shared <bool>","true|false",t=>t==="true").option("--share-slug <slug>","Share slug").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.runtime&&(n.runtime=e.runtime),e.status&&(n.status=e.status.toUpperCase()),e.datasetIds&&(n.datasetIds=l(e.datasetIds)),e.environment&&(n.environment=f("environment",e.environment)),e.shared!==void 0&&(n.isShared=e.shared),e.shareSlug&&(n.shareSlug=e.shareSlug),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(V,{id:t,input:n});c("Notebook updated"),i(e,C.cosUpdateNotebook);}catch(n){s(n);}}),o.command("archive").description("Archive a notebook").argument("<id>","Notebook ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(B,{id:t});c(`Notebook archived: ${String(n.cosArchiveNotebook)}`),i(e,{archived:n.cosArchiveNotebook});}catch(n){s(n);}});}function ht(r){let o=r.command("pipelines").description("Cosmicintersection data pipelines");o.command("list").description("List pipelines").option("--status <s>","DRAFT|ACTIVE|PAUSED|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListPipelines.items,{headers:["ID","Name","Status","Trigger","Schedule","Version"],rows:e.cosListPipelines.items.map(n=>[d(n.id,12),n.name,n.status??"-",n.trigger??"-",n.schedule??"-",n.version!=null?String(n.version):"-"])});}catch(e){s(e);}}),o.command("get").description("Get a pipeline by id").argument("<id>","Pipeline ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});if(!n.cosPipeline)throw new u(`Pipeline ${t} not found`);i(e,n.cosPipeline);}catch(n){s(n);}}),o.command("create").description("Create a pipeline").requiredOption("--name <name>","Pipeline name").option("--description <s>","Description").option("--trigger <t>","MANUAL|SCHEDULED|ON_INGEST|WEBHOOK").option("--schedule <cron>","Schedule (cron)").option("--definition <json>","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.trigger&&(e.trigger=t.trigger.toUpperCase()),t.schedule&&(e.schedule=t.schedule),t.definition&&(e.definition=f("definition",t.definition)),t.tags&&(e.tags=l(t.tags));let n=await a(z,{input:e});c(`Pipeline created: ${n.cosCreatePipeline.name}`),i(t,n.cosCreatePipeline);}catch(e){s(e);}}),o.command("update").description("Update a pipeline").argument("<id>","Pipeline ID").option("--name <name>","Pipeline name").option("--description <s>","Description").option("--status <s>","DRAFT|ACTIVE|PAUSED|ARCHIVED").option("--trigger <t>","MANUAL|SCHEDULED|ON_INGEST|WEBHOOK").option("--schedule <cron>","Schedule (cron)").option("--definition <json>","Definition JSON").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.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.trigger&&(n.trigger=e.trigger.toUpperCase()),e.schedule&&(n.schedule=e.schedule),e.definition&&(n.definition=f("definition",e.definition)),e.tags&&(n.tags=l(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let C=await a(Y,{id:t,input:n});c("Pipeline updated"),i(e,C.cosUpdatePipeline);}catch(n){s(n);}}),o.command("archive").description("Archive a pipeline").argument("<id>","Pipeline ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Q,{id:t});c(`Pipeline archived: ${String(n.cosArchivePipeline)}`),i(e,{archived:n.cosArchivePipeline});}catch(n){s(n);}});}function At(r){let o=r.command("runs").description("Cosmicintersection pipeline runs & steps");o.command("list").description("List pipeline runs").option("--pipeline <id>","Filter by pipeline ID").option("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Z,{pipelineId:t.pipeline,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListRuns.items,{headers:["ID","Pipeline","Run #","Status","Started"],rows:e.cosListRuns.items.map(n=>[d(n.id,12),d(n.pipelineId,12),String(n.runNumber),n.status??"-",A(n.startedAt)])});}catch(e){s(e);}}),o.command("get").description("Get a run by id").argument("<id>","Run ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(X,{id:t});if(!n.cosRun)throw new u(`Run ${t} not found`);i(e,n.cosRun);}catch(n){s(n);}}),o.command("start").description("Queue a new run of a pipeline").requiredOption("--pipeline <id>","Pipeline ID").option("--dataset <id>","Dataset ID").option("--params <json>","Params JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={pipelineId:t.pipeline};t.dataset&&(e.datasetId=t.dataset),t.params&&(e.params=f("params",t.params));let n=await a(tt,{input:e});c(`Run started: #${n.cosStartRun.runNumber}`),i(t,n.cosStartRun);}catch(e){s(e);}}),o.command("transition").description("Advance a run through its lifecycle").argument("<id>","Run ID").requiredOption("--status <s>","QUEUED|RUNNING|SUCCEEDED|FAILED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(et,{id:t,status:e.status.toUpperCase()});c(`Run transitioned to ${n.cosTransitionRun.status}`),i(e,n.cosTransitionRun);}catch(n){s(n);}}),o.command("steps").description("List steps for a run").requiredOption("--run <id>","Run ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(nt,{runId:t.run});i(t,e.cosListRunSteps,{headers:["ID","Name","Kind","Status","Pos"],rows:e.cosListRunSteps.map(n=>[d(n.id,12),n.name,n.kind,n.status??"-",n.position!=null?String(n.position):"-"])});}catch(e){s(e);}}),o.command("add-step").description("Append a step to a run").requiredOption("--run <id>","Run ID").requiredOption("--name <name>","Step name").option("--kind <k>","INGEST|TRANSFORM|ANALYZE|CALIBRATE|EXPORT|NOTIFY").option("--position <n>","Position",m).option("--inputs <json>","Inputs JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={runId:t.run,name:t.name};t.kind&&(e.kind=t.kind.toUpperCase()),t.position!==void 0&&(e.position=t.position),t.inputs&&(e.inputs=f("inputs",t.inputs));let n=await a(ot,{input:e});c(`Step added: ${n.cosAddRunStep.name}`),i(t,n.cosAddRunStep);}catch(e){s(e);}});}function Et(r){let o=r.command("analyses").description("Cosmicintersection analyses");o.command("list").description("List analyses").option("--dataset <id>","Filter by dataset ID").option("--notebook <id>","Filter by notebook ID").option("--status <s>","PENDING|RUNNING|COMPLETED|FAILED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(st,{datasetId:t.dataset,notebookId:t.notebook,status:t.status?t.status.toUpperCase():void 0});i(t,e.cosListAnalyses,{headers:["ID","Title","Status","Method","AI"],rows:e.cosListAnalyses.map(n=>[d(n.id,12),n.title,n.status??"-",n.method??"-",n.aiAssisted?"yes":"no"])});}catch(e){s(e);}}),o.command("run").description("Start an analysis run").requiredOption("--title <t>","Analysis title").option("--dataset <id>","Dataset ID").option("--notebook <id>","Notebook ID").option("--method <m>","Analysis method").option("--ai-assisted","Mark the analysis as AI-assisted").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.dataset&&(e.datasetId=t.dataset),t.notebook&&(e.notebookId=t.notebook),t.method&&(e.method=t.method),t.aiAssisted&&(e.aiAssisted=!0);let n=await a(it,{input:e});c(`Analysis started: ${n.cosRunAnalysis.title}`),i(t,n.cosRunAnalysis);}catch(e){s(e);}}),o.command("complete").description("Record the terminal outcome of an analysis run").argument("<id>","Analysis ID").requiredOption("--status <s>","COMPLETED|FAILED").option("--results <json>","Results JSON").option("--output-file <id>","Output file ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(rt,{id:t,status:e.status.toUpperCase(),results:e.results?f("results",e.results):void 0,outputFileId:e.outputFile});c(`Analysis completed: ${n.cosCompleteAnalysis.status}`),i(e,n.cosCompleteAnalysis);}catch(n){s(n);}});}function yt(r){let o=r.command("releases").description("Cosmicintersection citable releases");o.command("list").description("List releases").option("--status <s>","DRAFT|UNDER_REVIEW|PUBLISHED|RETRACTED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(at,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.cosListReleases.items,{headers:["ID","Title","Version","Status","DOI"],rows:e.cosListReleases.items.map(n=>[d(n.id,12),n.title,n.version,n.status??"-",n.doi??"-"])});}catch(e){s(e);}}),o.command("create").description("Create a release").requiredOption("--title <t>","Release title").option("--version <v>","Version").option("--abstract <s>","Abstract").option("--license <l>","License").option("--notebook <id>","Notebook ID").option("--authors <csv>","Comma-separated authors").option("--dataset-ids <csv>","Comma-separated dataset IDs").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.version&&(e.version=t.version),t.abstract&&(e.abstract=t.abstract),t.license&&(e.license=t.license),t.notebook&&(e.notebookId=t.notebook),t.authors&&(e.authors=l(t.authors)),t.datasetIds&&(e.datasetIds=l(t.datasetIds));let n=await a(ct,{input:e});c(`Release created: ${n.cosCreateRelease.title}`),i(t,n.cosCreateRelease);}catch(e){s(e);}}),o.command("publish").description("Publish a citable release and stamp it with a DOI").argument("<id>","Release ID").option("--doi <doi>","DOI to stamp").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(ut,{id:t,doi:e.doi});c(`Release published: ${n.cosPublishRelease.version}`),i(e,n.cosPublishRelease);}catch(n){s(n);}});}function St(r){let o=r.command("grants").description("Cosmicintersection data-access grants");o.command("list").description("List data-access grants").option("--dataset <id>","Filter by dataset ID").option("--status <s>","PENDING|ACTIVE|REVOKED|EXPIRED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(pt,{datasetId:t.dataset,status:t.status?t.status.toUpperCase():void 0});i(t,e.cosListAccessGrants,{headers:["ID","Dataset","Grantee","Status","Scopes","Expires"],rows:e.cosListAccessGrants.map(n=>[d(n.id,12),d(n.datasetId,12),d(n.granteeId,12),n.status??"-",(n.scopes??[]).join(", "),A(n.expiresAt)])});}catch(e){s(e);}}),o.command("grant").description("Grant a grantee access to a dataset").requiredOption("--dataset <id>","Dataset ID").requiredOption("--grantee <id>","Grantee ID").option("--scopes <csv>","Comma-separated scopes").option("--reason <s>","Reason").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={datasetId:t.dataset,granteeId:t.grantee};t.scopes&&(e.scopes=l(t.scopes)),t.reason&&(e.reason=t.reason),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(dt,{input:e});c(`Access granted to ${n.cosGrantAccess.granteeId}`),i(t,n.cosGrantAccess);}catch(e){s(e);}}),o.command("revoke").description("Revoke a data-access grant").argument("<id>","Grant ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(lt,{id:t});c(`Access revoked: ${n.cosRevokeAccess.status}`),i(e,n.cosRevokeAccess);}catch(n){s(n);}});}function kt(r){r.command("health").description("Cosmicintersection service health check (public)").option("-f, --format <format>","Output format").action(async o=>{try{let t=await S(mt);c(t.cosHealth),i(o,{health:t.cosHealth});}catch(t){s(t);}});}var _t={id:"cosmicintersection",version:"1.0.0",displayName:"Cosmicintersection",dependsOn:["auth","workspaces"],register(r,o){R(o);let t=r.command("cosmicintersection").description("Cosmicintersection open-science data platform");ft(t),gt(t),Ct(t),It(t),ht(t),At(t),Et(t),yt(t),St(t),kt(t);}},Nn=_t;module.exports=Nn;
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var E=`
1
+ import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var E=`
2
2
  query CosListCollections {
3
3
  cosListCollections {
4
4
  id name slug description isPublic tags
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(o,n){super(o),this.name="CliUserError",this.exitCode=n?.exitCode??1,this.hint=n?.hint;}},h=class extends u{constructor(o,n){super(o,{exitCode:2,hint:n?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},E=class extends Error{cause;constructor(o,n){super(o),this.name="CliInternalError",this.cause=n;}};var x=null;function F(s){x=s;}function I(){if(!x)throw new E("vibecontrols module helpers used before setHelpersContext was called");return x}function Ge(){let s=I();if(!s.auth.isAuthenticated())throw new h("Authentication required.",{hint:`Run \`${s.productName} auth login\` to authenticate.`})}async function p(s,o){return Ge(),I().gql.workspace.request(s,o)}async function O(s,o){return I().gql.workspaceAuthOnly.request(s,o)}function a(s){let o=s instanceof Error?s.message:String(s);throw new u(o)}function c(s,o,n){I().output.formatAndOutput(s,o,n);}function l(s){I().output.printSuccess(s);}function d(s,o){return I().output.truncate(s,o)}var v=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(o,n){super(o),this.name="CliUserError",this.exitCode=n?.exitCode??1,this.hint=n?.hint;}},h=class extends u{constructor(o,n){super(o,{exitCode:2,hint:n?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},E=class extends Error{cause;constructor(o,n){super(o),this.name="CliInternalError",this.cause=n;}};var x=null;function F(s){x=s;}function I(){if(!x)throw new E("vibecontrols module helpers used before setHelpersContext was called");return x}function Ge(){let s=I();if(!s.auth.isAuthenticated())throw new h("Authentication required.",{hint:`Run \`${s.productName} auth login\` to authenticate.`})}async function c(s,o){return Ge(),I().gql.workspace.request(s,o)}async function O(s,o){return I().gql.workspaceAuthOnly.request(s,o)}function a(s){let o=s instanceof Error?s.message:String(s);throw new u(o)}function p(s,o,n){I().output.formatAndOutput(s,o,n);}function l(s){I().output.printSuccess(s);}function d(s,o){return I().output.truncate(s,o)}var v=`
2
2
  id firstName lastName email phone position department location type status
3
3
  salary performanceScore managerId avatar startDate workspaceId
4
4
  `,T=`
@@ -125,11 +125,11 @@
125
125
  query CrewfoundryListPayrollRecords {
126
126
  crewfoundryBootstrap { payrollRecords { ${Y} } }
127
127
  }
128
- `,ce=`
128
+ `,pe=`
129
129
  query CrewfoundryListProjects {
130
130
  crewfoundryBootstrap { projects { ${K} } }
131
131
  }
132
- `,pe=`
132
+ `,ce=`
133
133
  query CrewfoundryListTeams {
134
134
  crewfoundryBootstrap { teams { ${z} } }
135
135
  }
@@ -193,4 +193,4 @@
193
193
  query CrewfoundryHealth {
194
194
  _empty
195
195
  }
196
- `;function y(s){let o=Number.parseInt(s,10);if(Number.isNaN(o))throw new u(`Expected an integer but got "${s}"`);return o}function g(s){let o=Number.parseFloat(s);if(Number.isNaN(o))throw new u(`Expected a number but got "${s}"`);return o}function w(s){return s.split(",").map(o=>o.trim()).filter(o=>o.length>0)}function Se(s){let o=s.command("employees").description("Crewfoundry employees");o.command("list").description("List employees").option("--department <d>","Filter by department").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(L)).crewfoundryBootstrap.employees;n.department&&(e=e.filter(r=>r.department===n.department)),n.status&&(e=e.filter(r=>r.status===n.status)),c(n,e,{headers:["ID","Name","Email","Department","Position","Status"],rows:e.map(r=>[d(r.id,12),`${r.firstName} ${r.lastName}`,r.email,r.department,r.position,r.status])});}catch(t){a(t);}}),o.command("get").description("Get an employee by id").argument("<id>","Employee ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await p(L)).crewfoundryBootstrap.employees.find(f=>f.id===n);if(!r)throw new u(`Employee ${n} not found`);c(t,r);}catch(e){a(e);}}),o.command("create").description("Create an employee").requiredOption("--first-name <s>","First name").requiredOption("--last-name <s>","Last name").requiredOption("--email <s>","Email").requiredOption("--phone <s>","Phone").requiredOption("--position <s>","Position").requiredOption("--department <s>","Department").requiredOption("--location <s>","Location").requiredOption("--salary <n>","Salary",g).option("--type <s>","Employment type (e.g. full-time)","full-time").option("--status <s>","Status","active").option("--performance-score <n>","Performance score",g,0).option("--manager-id <id>","Manager ID").option("--avatar <url>","Avatar URL").option("--start-date <iso>","Start date (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={firstName:n.firstName,lastName:n.lastName,email:n.email,phone:n.phone,position:n.position,department:n.department,location:n.location,salary:n.salary,type:n.type??"full-time",status:n.status??"active",performanceScore:n.performanceScore??0,startDate:n.startDate??new Date().toISOString()};n.managerId&&(t.managerId=n.managerId),n.avatar&&(t.avatar=n.avatar);let e=await p(me,{input:t});l(`Employee created: ${e.createCrewEmployee.firstName} ${e.createCrewEmployee.lastName}`),c(n,e.createCrewEmployee);}catch(t){a(t);}}),o.command("update").description("Update an employee").argument("<id>","Employee ID").option("--first-name <s>","First name").option("--last-name <s>","Last name").option("--email <s>","Email").option("--phone <s>","Phone").option("--position <s>","Position").option("--department <s>","Department").option("--location <s>","Location").option("--salary <n>","Salary",g).option("--type <s>","Employment type").option("--status <s>","Status").option("--performance-score <n>","Performance score",g).option("--manager-id <id>","Manager ID").option("--avatar <url>","Avatar URL").option("--start-date <iso>","Start date (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.firstName&&(e.firstName=t.firstName),t.lastName&&(e.lastName=t.lastName),t.email&&(e.email=t.email),t.phone&&(e.phone=t.phone),t.position&&(e.position=t.position),t.department&&(e.department=t.department),t.location&&(e.location=t.location),t.salary!==void 0&&(e.salary=t.salary),t.type&&(e.type=t.type),t.status&&(e.status=t.status),t.performanceScore!==void 0&&(e.performanceScore=t.performanceScore),t.managerId&&(e.managerId=t.managerId),t.avatar&&(e.avatar=t.avatar),t.startDate&&(e.startDate=t.startDate),!Object.keys(e).length)throw new u("No updates specified");let r=await p(le,{id:n,input:e});l("Employee updated"),c(t,r.updateCrewEmployee);}catch(e){a(e);}}),o.command("remove").description("Remove an employee").argument("<id>","Employee ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e=await p(fe,{id:n});if(!e.removeCrewEmployee)throw new u(`Employee ${n} could not be removed`);l(`Employee ${n} removed`),c(t,{removed:e.removeCrewEmployee});}catch(e){a(e);}});}function be(s){let o=s.command("candidates").description("Crewfoundry recruiting candidates");o.command("list").description("List candidates").option("--status <s>","Filter by status").option("--position <p>","Filter by position").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(N)).crewfoundryBootstrap.candidates;n.status&&(e=e.filter(r=>r.status===n.status)),n.position&&(e=e.filter(r=>r.position===n.position)),c(n,e,{headers:["ID","Name","Position","Source","Status","Rating"],rows:e.map(r=>[d(r.id,12),`${r.firstName} ${r.lastName}`,r.position,r.source,r.status,String(r.rating)])});}catch(t){a(t);}}),o.command("get").description("Get a candidate by id").argument("<id>","Candidate ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await p(N)).crewfoundryBootstrap.candidates.find(f=>f.id===n);if(!r)throw new u(`Candidate ${n} not found`);c(t,r);}catch(e){a(e);}}),o.command("create").description("Create a candidate").requiredOption("--first-name <s>","First name").requiredOption("--last-name <s>","Last name").requiredOption("--email <s>","Email").requiredOption("--phone <s>","Phone").requiredOption("--position <s>","Position").requiredOption("--source <s>","Source").option("--experience <n>","Years of experience",y,0).option("--rating <n>","Rating",g,0).option("--status <s>","Status","new").option("--current-company <s>","Current company").option("--skills <csv>","Comma-separated skills").option("--resume-url <url>","Resume URL").option("--notes <s>","Notes").option("--applied-date <iso>","Applied date (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={firstName:n.firstName,lastName:n.lastName,email:n.email,phone:n.phone,position:n.position,source:n.source,experience:n.experience??0,rating:n.rating??0,status:n.status??"new",skills:n.skills?w(n.skills):[],appliedDate:n.appliedDate??new Date().toISOString()};n.currentCompany&&(t.currentCompany=n.currentCompany),n.resumeUrl&&(t.resumeUrl=n.resumeUrl),n.notes&&(t.notes=n.notes);let e=await p(ge,{input:t});l(`Candidate created: ${e.createCrewCandidate.firstName} ${e.createCrewCandidate.lastName}`),c(n,e.createCrewCandidate);}catch(t){a(t);}}),o.command("update").description("Update a candidate").argument("<id>","Candidate ID").option("--first-name <s>","First name").option("--last-name <s>","Last name").option("--email <s>","Email").option("--phone <s>","Phone").option("--position <s>","Position").option("--source <s>","Source").option("--experience <n>","Years of experience",y).option("--rating <n>","Rating",g).option("--status <s>","Status").option("--current-company <s>","Current company").option("--skills <csv>","Comma-separated skills").option("--resume-url <url>","Resume URL").option("--notes <s>","Notes").option("--applied-date <iso>","Applied date (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.firstName&&(e.firstName=t.firstName),t.lastName&&(e.lastName=t.lastName),t.email&&(e.email=t.email),t.phone&&(e.phone=t.phone),t.position&&(e.position=t.position),t.source&&(e.source=t.source),t.experience!==void 0&&(e.experience=t.experience),t.rating!==void 0&&(e.rating=t.rating),t.status&&(e.status=t.status),t.currentCompany&&(e.currentCompany=t.currentCompany),t.skills&&(e.skills=w(t.skills)),t.resumeUrl&&(e.resumeUrl=t.resumeUrl),t.notes&&(e.notes=t.notes),t.appliedDate&&(e.appliedDate=t.appliedDate),!Object.keys(e).length)throw new u("No updates specified");let r=await p(ye,{id:n,input:e});l("Candidate updated"),c(t,r.updateCrewCandidate);}catch(e){a(e);}});}function xe(s){let o=s.command("job-postings").description("Crewfoundry job postings");o.command("list").description("List job postings").option("--department <d>","Filter by department").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(D)).crewfoundryBootstrap.jobPostings;n.department&&(e=e.filter(r=>r.department===n.department)),n.status&&(e=e.filter(r=>r.status===n.status)),c(n,e,{headers:["ID","Title","Department","Type","Applicants","Status"],rows:e.map(r=>[d(r.id,12),r.title,r.department,r.type,String(r.applicants),r.status])});}catch(t){a(t);}}),o.command("get").description("Get a job posting by id").argument("<id>","Job posting ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await p(D)).crewfoundryBootstrap.jobPostings.find(f=>f.id===n);if(!r)throw new u(`Job posting ${n} not found`);c(t,r);}catch(e){a(e);}}),o.command("create").description("Create a job posting").requiredOption("--title <s>","Title").requiredOption("--department <s>","Department").requiredOption("--description <s>","Description").requiredOption("--experience-level <s>","Experience level").requiredOption("--location <s>","Location").requiredOption("--type <s>","Employment type (e.g. full-time)").option("--applicants <n>","Applicant count",y,0).option("--salary-min <n>","Minimum salary",g,0).option("--salary-max <n>","Maximum salary",g,0).option("--status <s>","Status","open").option("--requirements <csv>","Comma-separated requirements").option("--benefits <csv>","Comma-separated benefits").option("--posted-date <iso>","Posted date (ISO)").option("--deadline <iso>","Deadline (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={title:n.title,department:n.department,description:n.description,experienceLevel:n.experienceLevel,location:n.location,type:n.type,applicants:n.applicants??0,salaryMin:n.salaryMin??0,salaryMax:n.salaryMax??0,status:n.status??"open",requirements:n.requirements?w(n.requirements):[],benefits:n.benefits?w(n.benefits):[],postedDate:n.postedDate??new Date().toISOString()};n.deadline&&(t.deadline=n.deadline);let e=await p(we,{input:t});l(`Job posting created: ${e.createCrewJobPosting.title}`),c(n,e.createCrewJobPosting);}catch(t){a(t);}}),o.command("update").description("Update a job posting").argument("<id>","Job posting ID").option("--title <s>","Title").option("--department <s>","Department").option("--description <s>","Description").option("--experience-level <s>","Experience level").option("--location <s>","Location").option("--type <s>","Employment type").option("--applicants <n>","Applicant count",y).option("--salary-min <n>","Minimum salary",g).option("--salary-max <n>","Maximum salary",g).option("--status <s>","Status").option("--requirements <csv>","Comma-separated requirements").option("--benefits <csv>","Comma-separated benefits").option("--posted-date <iso>","Posted date (ISO)").option("--deadline <iso>","Deadline (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.title&&(e.title=t.title),t.department&&(e.department=t.department),t.description&&(e.description=t.description),t.experienceLevel&&(e.experienceLevel=t.experienceLevel),t.location&&(e.location=t.location),t.type&&(e.type=t.type),t.applicants!==void 0&&(e.applicants=t.applicants),t.salaryMin!==void 0&&(e.salaryMin=t.salaryMin),t.salaryMax!==void 0&&(e.salaryMax=t.salaryMax),t.status&&(e.status=t.status),t.requirements&&(e.requirements=w(t.requirements)),t.benefits&&(e.benefits=w(t.benefits)),t.postedDate&&(e.postedDate=t.postedDate),t.deadline&&(e.deadline=t.deadline),!Object.keys(e).length)throw new u("No updates specified");let r=await p(Ce,{id:n,input:e});l("Job posting updated"),c(t,r.updateCrewJobPosting);}catch(e){a(e);}});}function Oe(s){let o=s.command("leave-requests").description("Crewfoundry leave requests");o.command("list").description("List leave requests").option("--employee <id>","Filter by employee ID").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(_)).crewfoundryBootstrap.leaveRequests;n.employee&&(e=e.filter(r=>r.employeeId===n.employee)),n.status&&(e=e.filter(r=>r.status===n.status)),c(n,e,{headers:["ID","Employee","Type","Days","Status"],rows:e.map(r=>[d(r.id,12),r.employeeName,r.type,String(r.days),r.status])});}catch(t){a(t);}}),o.command("get").description("Get a leave request by id").argument("<id>","Leave request ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await p(_)).crewfoundryBootstrap.leaveRequests.find(f=>f.id===n);if(!r)throw new u(`Leave request ${n} not found`);c(t,r);}catch(e){a(e);}}),o.command("create").description("Create a leave request").requiredOption("--employee-id <id>","Employee ID").requiredOption("--employee-name <s>","Employee name").requiredOption("--department <s>","Department").requiredOption("--type <s>","Leave type").requiredOption("--reason <s>","Reason").requiredOption("--start-date <iso>","Start date (ISO)").requiredOption("--end-date <iso>","End date (ISO)").option("--days <n>","Number of days",y,1).option("--status <s>","Status","pending").option("--approver-name <s>","Approver name").option("-f, --format <format>","Output format").action(async n=>{try{let t={employeeId:n.employeeId,employeeName:n.employeeName,department:n.department,type:n.type,reason:n.reason,startDate:n.startDate,endDate:n.endDate,days:n.days??1,status:n.status??"pending"};n.approverName&&(t.approverName=n.approverName);let e=await p(Ee,{input:t});l(`Leave request created for ${e.createCrewLeaveRequest.employeeName}`),c(n,e.createCrewLeaveRequest);}catch(t){a(t);}}),o.command("update").description("Update a leave request").argument("<id>","Leave request ID").option("--employee-id <id>","Employee ID").option("--employee-name <s>","Employee name").option("--department <s>","Department").option("--type <s>","Leave type").option("--reason <s>","Reason").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--days <n>","Number of days",y).option("--status <s>","Status").option("--approver-name <s>","Approver name").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.employeeId&&(e.employeeId=t.employeeId),t.employeeName&&(e.employeeName=t.employeeName),t.department&&(e.department=t.department),t.type&&(e.type=t.type),t.reason&&(e.reason=t.reason),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.days!==void 0&&(e.days=t.days),t.status&&(e.status=t.status),t.approverName&&(e.approverName=t.approverName),!Object.keys(e).length)throw new u("No updates specified");let r=await p(he,{id:n,input:e});l("Leave request updated"),c(t,r.updateCrewLeaveRequest);}catch(e){a(e);}});}function Re(s){let o=s.command("announcements").description("Crewfoundry announcements");o.command("list").description("List announcements").option("--category <c>","Filter by category").option("--pinned-only","Only pinned announcements").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(P)).crewfoundryBootstrap.announcements;n.category&&(e=e.filter(r=>r.category===n.category)),n.pinnedOnly&&(e=e.filter(r=>r.isPinned)),c(n,e,{headers:["ID","Title","Author","Category","Priority","Pinned"],rows:e.map(r=>[d(r.id,12),r.title,r.author,r.category,r.priority,r.isPinned?"yes":"no"])});}catch(t){a(t);}}),o.command("get").description("Get an announcement by id").argument("<id>","Announcement ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await p(P)).crewfoundryBootstrap.announcements.find(f=>f.id===n);if(!r)throw new u(`Announcement ${n} not found`);c(t,r);}catch(e){a(e);}}),o.command("create").description("Create an announcement").requiredOption("--title <s>","Title").requiredOption("--content <s>","Content").requiredOption("--author <s>","Author").requiredOption("--author-role <s>","Author role").requiredOption("--category <s>","Category").requiredOption("--priority <s>","Priority").option("--pinned","Pin the announcement").option("--view-count <n>","Initial view count",y,0).option("--tags <csv>","Comma-separated tags").option("--created-at <iso>","Created at (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={title:n.title,content:n.content,author:n.author,authorRole:n.authorRole,category:n.category,priority:n.priority,isPinned:n.pinned??!1,viewCount:n.viewCount??0,tags:n.tags?w(n.tags):[],createdAt:n.createdAt??new Date().toISOString()},e=await p(Ie,{input:t});l(`Announcement created: ${e.createCrewAnnouncement.title}`),c(n,e.createCrewAnnouncement);}catch(t){a(t);}});}function Ae(s){let o=s.command("notifications").description("Crewfoundry notifications");o.command("list").description("List notifications").option("--category <c>","Filter by category").option("--unread-only","Only unread notifications").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(Z)).crewfoundryBootstrap.notifications;n.category&&(e=e.filter(r=>r.category===n.category)),n.unreadOnly&&(e=e.filter(r=>!r.read)),c(n,e,{headers:["ID","Title","Type","Category","Read"],rows:e.map(r=>[d(r.id,12),r.title,r.type,r.category,r.read?"yes":"no"])});}catch(t){a(t);}}),o.command("mark-read").description("Mark a notification as read").argument("<id>","Notification ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e=await p(ke,{id:n});if(!e.markCrewNotificationRead)throw new u(`Notification ${n} could not be marked read`);l(`Notification ${n} marked read`),c(t,{read:e.markCrewNotificationRead});}catch(e){a(e);}}),o.command("mark-all-read").description("Mark all notifications as read").option("-f, --format <format>","Output format").action(async n=>{try{let t=await p(ve);l("All notifications marked read"),c(n,{read:t.markAllCrewNotificationsRead});}catch(t){a(t);}});}function i(s){return s==null?"-":String(s)}function Le(s){let o=s.command("directory").description("Crewfoundry read-only collections (clients, projects, teams, finance, learning)"),n=async(t,e,r,f)=>{try{let q=(await p(t)).crewfoundryBootstrap[e];c(r,q,{headers:f.headers,rows:q.map(f.row)});}catch(k){a(k);}};o.command("clients").description("List clients").option("-f, --format <format>","Output format").action(t=>n(ee,"clients",t,{headers:["ID","Name","Industry","Status","Projects","Revenue"],row:e=>[d(e.id,12),i(e.name),i(e.industry),i(e.status),i(e.projects),i(e.revenue)]})),o.command("courses").description("List training courses").option("-f, --format <format>","Output format").action(t=>n(te,"courses",t,{headers:["ID","Title","Category","Level","Enrolled","Status"],row:e=>[d(e.id,12),i(e.title),i(e.category),i(e.level),i(e.enrolled),i(e.status)]})),o.command("departments").description("List departments").option("-f, --format <format>","Output format").action(t=>n(ne,"departments",t,{headers:["ID","Name","Head","Employees","Budget","Status"],row:e=>[d(e.id,12),i(e.name),i(e.headName),i(e.employeeCount),i(e.budget),i(e.status)]})),o.command("interviews").description("List interviews").option("-f, --format <format>","Output format").action(t=>n(re,"interviews",t,{headers:["ID","Candidate","Position","Type","Status","Interviewer"],row:e=>[d(e.id,12),i(e.candidateName),i(e.position),i(e.type),i(e.status),i(e.interviewerName)]})),o.command("invoices").description("List invoices").option("-f, --format <format>","Output format").action(t=>n(oe,"invoices",t,{headers:["ID","Number","Client","Amount","Status"],row:e=>[d(e.id,12),i(e.number),i(e.clientName),i(e.amount),i(e.status)]})),o.command("learning-paths").description("List learning paths").option("-f, --format <format>","Output format").action(t=>n(ie,"learningPaths",t,{headers:["ID","Title","Level","Enrolled","Completion %"],row:e=>[d(e.id,12),i(e.title),i(e.level),i(e.enrolled),i(e.completionRate)]})),o.command("marketplace-services").description("List marketplace services").option("-f, --format <format>","Output format").action(t=>n(se,"marketplaceServices",t,{headers:["ID","Title","Category","Provider","Price","Rating"],row:e=>[d(e.id,12),i(e.title),i(e.category),i(e.provider),i(e.price),i(e.rating)]})),o.command("payroll").description("List payroll records").option("-f, --format <format>","Output format").action(t=>n(ae,"payrollRecords",t,{headers:["ID","Employee","Period","Gross","Net","Status"],row:e=>[d(e.id,12),i(e.employeeName),i(e.period),i(e.grossPay),i(e.netPay),i(e.status)]})),o.command("projects").description("List projects").option("-f, --format <format>","Output format").action(t=>n(ce,"projects",t,{headers:["ID","Name","Status","Priority","Progress","Budget"],row:e=>[d(e.id,12),i(e.name),i(e.status),i(e.priority),i(e.progress),i(e.budget)]})),o.command("teams").description("List teams").option("-f, --format <format>","Output format").action(t=>n(pe,"teams",t,{headers:["ID","Name","Department","Lead","Members","Status"],row:e=>[d(e.id,12),i(e.name),i(e.department),i(e.leadName),i(e.memberCount),i(e.status)]})),o.command("time-entries").description("List time entries").option("-f, --format <format>","Output format").action(t=>n(ue,"timeEntries",t,{headers:["ID","Employee","Date","Hours","Overtime","Status"],row:e=>[d(e.id,12),i(e.employeeName),i(e.date),i(e.totalHours),i(e.overtime),i(e.status)]})),o.command("vendors").description("List vendors").option("-f, --format <format>","Output format").action(t=>n(de,"vendors",t,{headers:["ID","Name","Category","Contract Value","Rating","Status"],row:e=>[d(e.id,12),i(e.name),i(e.category),i(e.contractValue),i(e.rating),i(e.status)]}));}function Ne(s){let o=s.command("analytics").description("Crewfoundry analytics & bootstrap");o.command("bootstrap").description("Fetch the full Crewfoundry workspace snapshot (all collections)").option("-f, --format <format>","Output format").action(async n=>{try{let t=await p(A);c(n,t.crewfoundryBootstrap);}catch(t){a(t);}}),o.command("summary").description("Per-collection counts derived from the bootstrap snapshot").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await p(A)).crewfoundryBootstrap,r={employees:e.employees.length,candidates:e.candidates.length,jobPostings:e.jobPostings.length,leaveRequests:e.leaveRequests.length,announcements:e.announcements.length,notifications:e.notifications.length,clients:e.clients.length,courses:e.courses.length,departments:e.departments.length,interviews:e.interviews.length,invoices:e.invoices.length,learningPaths:e.learningPaths.length,marketplaceServices:e.marketplaceServices.length,payrollRecords:e.payrollRecords.length,projects:e.projects.length,teams:e.teams.length,timeEntries:e.timeEntries.length,vendors:e.vendors.length};c(n,r,{headers:["Collection","Count"],rows:Object.entries(r).map(([f,k])=>[f,String(k)])});}catch(t){a(t);}}),s.command("health").description("Crewfoundry service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await O(Te))._empty??"ok";l(`crewfoundry: ${e}`),c(n,{health:e});}catch(t){a(t);}});}var Je={id:"crewfoundry",version:"1.0.0",displayName:"Crewfoundry",dependsOn:["auth","workspaces"],register(s,o){F(o);let n=s.command("crewfoundry").description("Crewfoundry workforce & HR operations");Se(n),be(n),xe(n),Oe(n),Re(n),Ae(n),Le(n),Ne(n);}},Pn=Je;module.exports=Pn;
196
+ `;function y(s){let o=Number.parseInt(s,10);if(Number.isNaN(o))throw new u(`Expected an integer but got "${s}"`);return o}function g(s){let o=Number.parseFloat(s);if(Number.isNaN(o))throw new u(`Expected a number but got "${s}"`);return o}function w(s){return s.split(",").map(o=>o.trim()).filter(o=>o.length>0)}function Se(s){let o=s.command("employees").description("Crewfoundry employees");o.command("list").description("List employees").option("--department <d>","Filter by department").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(L)).crewfoundryBootstrap.employees;n.department&&(e=e.filter(r=>r.department===n.department)),n.status&&(e=e.filter(r=>r.status===n.status)),p(n,e,{headers:["ID","Name","Email","Department","Position","Status"],rows:e.map(r=>[d(r.id,12),`${r.firstName} ${r.lastName}`,r.email,r.department,r.position,r.status])});}catch(t){a(t);}}),o.command("get").description("Get an employee by id").argument("<id>","Employee ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await c(L)).crewfoundryBootstrap.employees.find(f=>f.id===n);if(!r)throw new u(`Employee ${n} not found`);p(t,r);}catch(e){a(e);}}),o.command("create").description("Create an employee").requiredOption("--first-name <s>","First name").requiredOption("--last-name <s>","Last name").requiredOption("--email <s>","Email").requiredOption("--phone <s>","Phone").requiredOption("--position <s>","Position").requiredOption("--department <s>","Department").requiredOption("--location <s>","Location").requiredOption("--salary <n>","Salary",g).option("--type <s>","Employment type (e.g. full-time)","full-time").option("--status <s>","Status","active").option("--performance-score <n>","Performance score",g,0).option("--manager-id <id>","Manager ID").option("--avatar <url>","Avatar URL").option("--start-date <iso>","Start date (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={firstName:n.firstName,lastName:n.lastName,email:n.email,phone:n.phone,position:n.position,department:n.department,location:n.location,salary:n.salary,type:n.type??"full-time",status:n.status??"active",performanceScore:n.performanceScore??0,startDate:n.startDate??new Date().toISOString()};n.managerId&&(t.managerId=n.managerId),n.avatar&&(t.avatar=n.avatar);let e=await c(me,{input:t});l(`Employee created: ${e.createCrewEmployee.firstName} ${e.createCrewEmployee.lastName}`),p(n,e.createCrewEmployee);}catch(t){a(t);}}),o.command("update").description("Update an employee").argument("<id>","Employee ID").option("--first-name <s>","First name").option("--last-name <s>","Last name").option("--email <s>","Email").option("--phone <s>","Phone").option("--position <s>","Position").option("--department <s>","Department").option("--location <s>","Location").option("--salary <n>","Salary",g).option("--type <s>","Employment type").option("--status <s>","Status").option("--performance-score <n>","Performance score",g).option("--manager-id <id>","Manager ID").option("--avatar <url>","Avatar URL").option("--start-date <iso>","Start date (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.firstName&&(e.firstName=t.firstName),t.lastName&&(e.lastName=t.lastName),t.email&&(e.email=t.email),t.phone&&(e.phone=t.phone),t.position&&(e.position=t.position),t.department&&(e.department=t.department),t.location&&(e.location=t.location),t.salary!==void 0&&(e.salary=t.salary),t.type&&(e.type=t.type),t.status&&(e.status=t.status),t.performanceScore!==void 0&&(e.performanceScore=t.performanceScore),t.managerId&&(e.managerId=t.managerId),t.avatar&&(e.avatar=t.avatar),t.startDate&&(e.startDate=t.startDate),!Object.keys(e).length)throw new u("No updates specified");let r=await c(le,{id:n,input:e});l("Employee updated"),p(t,r.updateCrewEmployee);}catch(e){a(e);}}),o.command("remove").description("Remove an employee").argument("<id>","Employee ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e=await c(fe,{id:n});if(!e.removeCrewEmployee)throw new u(`Employee ${n} could not be removed`);l(`Employee ${n} removed`),p(t,{removed:e.removeCrewEmployee});}catch(e){a(e);}});}function be(s){let o=s.command("candidates").description("Crewfoundry recruiting candidates");o.command("list").description("List candidates").option("--status <s>","Filter by status").option("--position <p>","Filter by position").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(N)).crewfoundryBootstrap.candidates;n.status&&(e=e.filter(r=>r.status===n.status)),n.position&&(e=e.filter(r=>r.position===n.position)),p(n,e,{headers:["ID","Name","Position","Source","Status","Rating"],rows:e.map(r=>[d(r.id,12),`${r.firstName} ${r.lastName}`,r.position,r.source,r.status,String(r.rating)])});}catch(t){a(t);}}),o.command("get").description("Get a candidate by id").argument("<id>","Candidate ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await c(N)).crewfoundryBootstrap.candidates.find(f=>f.id===n);if(!r)throw new u(`Candidate ${n} not found`);p(t,r);}catch(e){a(e);}}),o.command("create").description("Create a candidate").requiredOption("--first-name <s>","First name").requiredOption("--last-name <s>","Last name").requiredOption("--email <s>","Email").requiredOption("--phone <s>","Phone").requiredOption("--position <s>","Position").requiredOption("--source <s>","Source").option("--experience <n>","Years of experience",y,0).option("--rating <n>","Rating",g,0).option("--status <s>","Status","new").option("--current-company <s>","Current company").option("--skills <csv>","Comma-separated skills").option("--resume-url <url>","Resume URL").option("--notes <s>","Notes").option("--applied-date <iso>","Applied date (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={firstName:n.firstName,lastName:n.lastName,email:n.email,phone:n.phone,position:n.position,source:n.source,experience:n.experience??0,rating:n.rating??0,status:n.status??"new",skills:n.skills?w(n.skills):[],appliedDate:n.appliedDate??new Date().toISOString()};n.currentCompany&&(t.currentCompany=n.currentCompany),n.resumeUrl&&(t.resumeUrl=n.resumeUrl),n.notes&&(t.notes=n.notes);let e=await c(ge,{input:t});l(`Candidate created: ${e.createCrewCandidate.firstName} ${e.createCrewCandidate.lastName}`),p(n,e.createCrewCandidate);}catch(t){a(t);}}),o.command("update").description("Update a candidate").argument("<id>","Candidate ID").option("--first-name <s>","First name").option("--last-name <s>","Last name").option("--email <s>","Email").option("--phone <s>","Phone").option("--position <s>","Position").option("--source <s>","Source").option("--experience <n>","Years of experience",y).option("--rating <n>","Rating",g).option("--status <s>","Status").option("--current-company <s>","Current company").option("--skills <csv>","Comma-separated skills").option("--resume-url <url>","Resume URL").option("--notes <s>","Notes").option("--applied-date <iso>","Applied date (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.firstName&&(e.firstName=t.firstName),t.lastName&&(e.lastName=t.lastName),t.email&&(e.email=t.email),t.phone&&(e.phone=t.phone),t.position&&(e.position=t.position),t.source&&(e.source=t.source),t.experience!==void 0&&(e.experience=t.experience),t.rating!==void 0&&(e.rating=t.rating),t.status&&(e.status=t.status),t.currentCompany&&(e.currentCompany=t.currentCompany),t.skills&&(e.skills=w(t.skills)),t.resumeUrl&&(e.resumeUrl=t.resumeUrl),t.notes&&(e.notes=t.notes),t.appliedDate&&(e.appliedDate=t.appliedDate),!Object.keys(e).length)throw new u("No updates specified");let r=await c(ye,{id:n,input:e});l("Candidate updated"),p(t,r.updateCrewCandidate);}catch(e){a(e);}});}function xe(s){let o=s.command("job-postings").description("Crewfoundry job postings");o.command("list").description("List job postings").option("--department <d>","Filter by department").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(D)).crewfoundryBootstrap.jobPostings;n.department&&(e=e.filter(r=>r.department===n.department)),n.status&&(e=e.filter(r=>r.status===n.status)),p(n,e,{headers:["ID","Title","Department","Type","Applicants","Status"],rows:e.map(r=>[d(r.id,12),r.title,r.department,r.type,String(r.applicants),r.status])});}catch(t){a(t);}}),o.command("get").description("Get a job posting by id").argument("<id>","Job posting ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await c(D)).crewfoundryBootstrap.jobPostings.find(f=>f.id===n);if(!r)throw new u(`Job posting ${n} not found`);p(t,r);}catch(e){a(e);}}),o.command("create").description("Create a job posting").requiredOption("--title <s>","Title").requiredOption("--department <s>","Department").requiredOption("--description <s>","Description").requiredOption("--experience-level <s>","Experience level").requiredOption("--location <s>","Location").requiredOption("--type <s>","Employment type (e.g. full-time)").option("--applicants <n>","Applicant count",y,0).option("--salary-min <n>","Minimum salary",g,0).option("--salary-max <n>","Maximum salary",g,0).option("--status <s>","Status","open").option("--requirements <csv>","Comma-separated requirements").option("--benefits <csv>","Comma-separated benefits").option("--posted-date <iso>","Posted date (ISO)").option("--deadline <iso>","Deadline (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={title:n.title,department:n.department,description:n.description,experienceLevel:n.experienceLevel,location:n.location,type:n.type,applicants:n.applicants??0,salaryMin:n.salaryMin??0,salaryMax:n.salaryMax??0,status:n.status??"open",requirements:n.requirements?w(n.requirements):[],benefits:n.benefits?w(n.benefits):[],postedDate:n.postedDate??new Date().toISOString()};n.deadline&&(t.deadline=n.deadline);let e=await c(we,{input:t});l(`Job posting created: ${e.createCrewJobPosting.title}`),p(n,e.createCrewJobPosting);}catch(t){a(t);}}),o.command("update").description("Update a job posting").argument("<id>","Job posting ID").option("--title <s>","Title").option("--department <s>","Department").option("--description <s>","Description").option("--experience-level <s>","Experience level").option("--location <s>","Location").option("--type <s>","Employment type").option("--applicants <n>","Applicant count",y).option("--salary-min <n>","Minimum salary",g).option("--salary-max <n>","Maximum salary",g).option("--status <s>","Status").option("--requirements <csv>","Comma-separated requirements").option("--benefits <csv>","Comma-separated benefits").option("--posted-date <iso>","Posted date (ISO)").option("--deadline <iso>","Deadline (ISO)").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.title&&(e.title=t.title),t.department&&(e.department=t.department),t.description&&(e.description=t.description),t.experienceLevel&&(e.experienceLevel=t.experienceLevel),t.location&&(e.location=t.location),t.type&&(e.type=t.type),t.applicants!==void 0&&(e.applicants=t.applicants),t.salaryMin!==void 0&&(e.salaryMin=t.salaryMin),t.salaryMax!==void 0&&(e.salaryMax=t.salaryMax),t.status&&(e.status=t.status),t.requirements&&(e.requirements=w(t.requirements)),t.benefits&&(e.benefits=w(t.benefits)),t.postedDate&&(e.postedDate=t.postedDate),t.deadline&&(e.deadline=t.deadline),!Object.keys(e).length)throw new u("No updates specified");let r=await c(Ce,{id:n,input:e});l("Job posting updated"),p(t,r.updateCrewJobPosting);}catch(e){a(e);}});}function Oe(s){let o=s.command("leave-requests").description("Crewfoundry leave requests");o.command("list").description("List leave requests").option("--employee <id>","Filter by employee ID").option("--status <s>","Filter by status").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(_)).crewfoundryBootstrap.leaveRequests;n.employee&&(e=e.filter(r=>r.employeeId===n.employee)),n.status&&(e=e.filter(r=>r.status===n.status)),p(n,e,{headers:["ID","Employee","Type","Days","Status"],rows:e.map(r=>[d(r.id,12),r.employeeName,r.type,String(r.days),r.status])});}catch(t){a(t);}}),o.command("get").description("Get a leave request by id").argument("<id>","Leave request ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await c(_)).crewfoundryBootstrap.leaveRequests.find(f=>f.id===n);if(!r)throw new u(`Leave request ${n} not found`);p(t,r);}catch(e){a(e);}}),o.command("create").description("Create a leave request").requiredOption("--employee-id <id>","Employee ID").requiredOption("--employee-name <s>","Employee name").requiredOption("--department <s>","Department").requiredOption("--type <s>","Leave type").requiredOption("--reason <s>","Reason").requiredOption("--start-date <iso>","Start date (ISO)").requiredOption("--end-date <iso>","End date (ISO)").option("--days <n>","Number of days",y,1).option("--status <s>","Status","pending").option("--approver-name <s>","Approver name").option("-f, --format <format>","Output format").action(async n=>{try{let t={employeeId:n.employeeId,employeeName:n.employeeName,department:n.department,type:n.type,reason:n.reason,startDate:n.startDate,endDate:n.endDate,days:n.days??1,status:n.status??"pending"};n.approverName&&(t.approverName=n.approverName);let e=await c(Ee,{input:t});l(`Leave request created for ${e.createCrewLeaveRequest.employeeName}`),p(n,e.createCrewLeaveRequest);}catch(t){a(t);}}),o.command("update").description("Update a leave request").argument("<id>","Leave request ID").option("--employee-id <id>","Employee ID").option("--employee-name <s>","Employee name").option("--department <s>","Department").option("--type <s>","Leave type").option("--reason <s>","Reason").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--days <n>","Number of days",y).option("--status <s>","Status").option("--approver-name <s>","Approver name").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e={};if(t.employeeId&&(e.employeeId=t.employeeId),t.employeeName&&(e.employeeName=t.employeeName),t.department&&(e.department=t.department),t.type&&(e.type=t.type),t.reason&&(e.reason=t.reason),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.days!==void 0&&(e.days=t.days),t.status&&(e.status=t.status),t.approverName&&(e.approverName=t.approverName),!Object.keys(e).length)throw new u("No updates specified");let r=await c(he,{id:n,input:e});l("Leave request updated"),p(t,r.updateCrewLeaveRequest);}catch(e){a(e);}});}function Re(s){let o=s.command("announcements").description("Crewfoundry announcements");o.command("list").description("List announcements").option("--category <c>","Filter by category").option("--pinned-only","Only pinned announcements").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(P)).crewfoundryBootstrap.announcements;n.category&&(e=e.filter(r=>r.category===n.category)),n.pinnedOnly&&(e=e.filter(r=>r.isPinned)),p(n,e,{headers:["ID","Title","Author","Category","Priority","Pinned"],rows:e.map(r=>[d(r.id,12),r.title,r.author,r.category,r.priority,r.isPinned?"yes":"no"])});}catch(t){a(t);}}),o.command("get").description("Get an announcement by id").argument("<id>","Announcement ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let r=(await c(P)).crewfoundryBootstrap.announcements.find(f=>f.id===n);if(!r)throw new u(`Announcement ${n} not found`);p(t,r);}catch(e){a(e);}}),o.command("create").description("Create an announcement").requiredOption("--title <s>","Title").requiredOption("--content <s>","Content").requiredOption("--author <s>","Author").requiredOption("--author-role <s>","Author role").requiredOption("--category <s>","Category").requiredOption("--priority <s>","Priority").option("--pinned","Pin the announcement").option("--view-count <n>","Initial view count",y,0).option("--tags <csv>","Comma-separated tags").option("--created-at <iso>","Created at (ISO)").option("-f, --format <format>","Output format").action(async n=>{try{let t={title:n.title,content:n.content,author:n.author,authorRole:n.authorRole,category:n.category,priority:n.priority,isPinned:n.pinned??!1,viewCount:n.viewCount??0,tags:n.tags?w(n.tags):[],createdAt:n.createdAt??new Date().toISOString()},e=await c(Ie,{input:t});l(`Announcement created: ${e.createCrewAnnouncement.title}`),p(n,e.createCrewAnnouncement);}catch(t){a(t);}});}function Ae(s){let o=s.command("notifications").description("Crewfoundry notifications");o.command("list").description("List notifications").option("--category <c>","Filter by category").option("--unread-only","Only unread notifications").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(Z)).crewfoundryBootstrap.notifications;n.category&&(e=e.filter(r=>r.category===n.category)),n.unreadOnly&&(e=e.filter(r=>!r.read)),p(n,e,{headers:["ID","Title","Type","Category","Read"],rows:e.map(r=>[d(r.id,12),r.title,r.type,r.category,r.read?"yes":"no"])});}catch(t){a(t);}}),o.command("mark-read").description("Mark a notification as read").argument("<id>","Notification ID").option("-f, --format <format>","Output format").action(async(n,t)=>{try{let e=await c(ke,{id:n});if(!e.markCrewNotificationRead)throw new u(`Notification ${n} could not be marked read`);l(`Notification ${n} marked read`),p(t,{read:e.markCrewNotificationRead});}catch(e){a(e);}}),o.command("mark-all-read").description("Mark all notifications as read").option("-f, --format <format>","Output format").action(async n=>{try{let t=await c(ve);l("All notifications marked read"),p(n,{read:t.markAllCrewNotificationsRead});}catch(t){a(t);}});}function i(s){return s==null?"-":String(s)}function Le(s){let o=s.command("directory").description("Crewfoundry read-only collections (clients, projects, teams, finance, learning)"),n=async(t,e,r,f)=>{try{let q=(await c(t)).crewfoundryBootstrap[e];p(r,q,{headers:f.headers,rows:q.map(f.row)});}catch(k){a(k);}};o.command("clients").description("List clients").option("-f, --format <format>","Output format").action(t=>n(ee,"clients",t,{headers:["ID","Name","Industry","Status","Projects","Revenue"],row:e=>[d(e.id,12),i(e.name),i(e.industry),i(e.status),i(e.projects),i(e.revenue)]})),o.command("courses").description("List training courses").option("-f, --format <format>","Output format").action(t=>n(te,"courses",t,{headers:["ID","Title","Category","Level","Enrolled","Status"],row:e=>[d(e.id,12),i(e.title),i(e.category),i(e.level),i(e.enrolled),i(e.status)]})),o.command("departments").description("List departments").option("-f, --format <format>","Output format").action(t=>n(ne,"departments",t,{headers:["ID","Name","Head","Employees","Budget","Status"],row:e=>[d(e.id,12),i(e.name),i(e.headName),i(e.employeeCount),i(e.budget),i(e.status)]})),o.command("interviews").description("List interviews").option("-f, --format <format>","Output format").action(t=>n(re,"interviews",t,{headers:["ID","Candidate","Position","Type","Status","Interviewer"],row:e=>[d(e.id,12),i(e.candidateName),i(e.position),i(e.type),i(e.status),i(e.interviewerName)]})),o.command("invoices").description("List invoices").option("-f, --format <format>","Output format").action(t=>n(oe,"invoices",t,{headers:["ID","Number","Client","Amount","Status"],row:e=>[d(e.id,12),i(e.number),i(e.clientName),i(e.amount),i(e.status)]})),o.command("learning-paths").description("List learning paths").option("-f, --format <format>","Output format").action(t=>n(ie,"learningPaths",t,{headers:["ID","Title","Level","Enrolled","Completion %"],row:e=>[d(e.id,12),i(e.title),i(e.level),i(e.enrolled),i(e.completionRate)]})),o.command("marketplace-services").description("List marketplace services").option("-f, --format <format>","Output format").action(t=>n(se,"marketplaceServices",t,{headers:["ID","Title","Category","Provider","Price","Rating"],row:e=>[d(e.id,12),i(e.title),i(e.category),i(e.provider),i(e.price),i(e.rating)]})),o.command("payroll").description("List payroll records").option("-f, --format <format>","Output format").action(t=>n(ae,"payrollRecords",t,{headers:["ID","Employee","Period","Gross","Net","Status"],row:e=>[d(e.id,12),i(e.employeeName),i(e.period),i(e.grossPay),i(e.netPay),i(e.status)]})),o.command("projects").description("List projects").option("-f, --format <format>","Output format").action(t=>n(pe,"projects",t,{headers:["ID","Name","Status","Priority","Progress","Budget"],row:e=>[d(e.id,12),i(e.name),i(e.status),i(e.priority),i(e.progress),i(e.budget)]})),o.command("teams").description("List teams").option("-f, --format <format>","Output format").action(t=>n(ce,"teams",t,{headers:["ID","Name","Department","Lead","Members","Status"],row:e=>[d(e.id,12),i(e.name),i(e.department),i(e.leadName),i(e.memberCount),i(e.status)]})),o.command("time-entries").description("List time entries").option("-f, --format <format>","Output format").action(t=>n(ue,"timeEntries",t,{headers:["ID","Employee","Date","Hours","Overtime","Status"],row:e=>[d(e.id,12),i(e.employeeName),i(e.date),i(e.totalHours),i(e.overtime),i(e.status)]})),o.command("vendors").description("List vendors").option("-f, --format <format>","Output format").action(t=>n(de,"vendors",t,{headers:["ID","Name","Category","Contract Value","Rating","Status"],row:e=>[d(e.id,12),i(e.name),i(e.category),i(e.contractValue),i(e.rating),i(e.status)]}));}function Ne(s){let o=s.command("analytics").description("Crewfoundry analytics & bootstrap");o.command("bootstrap").description("Fetch the full Crewfoundry workspace snapshot (all collections)").option("-f, --format <format>","Output format").action(async n=>{try{let t=await c(A);p(n,t.crewfoundryBootstrap);}catch(t){a(t);}}),o.command("summary").description("Per-collection counts derived from the bootstrap snapshot").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await c(A)).crewfoundryBootstrap,r={employees:e.employees.length,candidates:e.candidates.length,jobPostings:e.jobPostings.length,leaveRequests:e.leaveRequests.length,announcements:e.announcements.length,notifications:e.notifications.length,clients:e.clients.length,courses:e.courses.length,departments:e.departments.length,interviews:e.interviews.length,invoices:e.invoices.length,learningPaths:e.learningPaths.length,marketplaceServices:e.marketplaceServices.length,payrollRecords:e.payrollRecords.length,projects:e.projects.length,teams:e.teams.length,timeEntries:e.timeEntries.length,vendors:e.vendors.length};p(n,r,{headers:["Collection","Count"],rows:Object.entries(r).map(([f,k])=>[f,String(k)])});}catch(t){a(t);}}),s.command("health").description("Crewfoundry service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=(await O(Te))._empty??"ok";l(`crewfoundry: ${e}`),p(n,{health:e});}catch(t){a(t);}});}var Je={id:"crewfoundry",version:"1.0.0",displayName:"Crewfoundry",dependsOn:["auth","workspaces"],register(s,o){F(o);let n=s.command("crewfoundry").description("Crewfoundry workforce & HR operations");Se(n),be(n),xe(n),Oe(n),Re(n),Ae(n),Le(n),Ne(n);}},Pn=Je;module.exports=Pn;
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';var S=`
1
+ import {a,b as b$1,h as h$1,p,g,i,d}from'../../chunk-SQSFZFQZ.js';import {o as o$1}from'../../chunk-UAFYTYK6.js';var S=`
2
2
  id firstName lastName email phone position department location type status
3
3
  salary performanceScore managerId avatar startDate workspaceId
4
4
  `,R=`
@@ -89,13 +89,13 @@
89
89
  id name url events isActive status failureCount
90
90
  }
91
91
  }
92
- `,F=`
92
+ `,V=`
93
93
  mutation CreateDevportalWebhook($input: CreateWebhookInput!) {
94
94
  createWebhook(input: $input) {
95
95
  id name url status
96
96
  }
97
97
  }
98
- `,V=`
98
+ `,F=`
99
99
  mutation DeleteDevportalWebhook($id: ID!) {
100
100
  deleteWebhook(id: $id) { success }
101
101
  }
@@ -130,4 +130,4 @@
130
130
  id status reviewStatus reviewNotes
131
131
  }
132
132
  }
133
- `;function K(s){let a=s.command("devportal").description("Developer portal: orgs, apps, webhooks, revenue"),d=a.command("orgs").description("Publisher organizations");d.command("list").description("List devportal organizations").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await r(O,{limit:t.limit,offset:0})).organizations.items;c(t,n,{headers:["ID","Name","Slug","Status"],rows:n.map(o=>[m(o.id,12),o.name,o.slug??"-",w(o.status)])});}catch(e){i(e);}}),d.command("get").description("Get an organization").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r(b,{id:t});if(!n.organization)throw new l(`Organization ${t} not found`);c(e,n.organization);}catch(n){i(n);}}),d.command("create").description("Create a publisher organization").requiredOption("--name <s>").requiredOption("--slug <s>","Unique slug (required by schema)").option("--description <s>").option("--tier <t>","INDIVIDUAL|ORGANIZATION|ENTERPRISE","ORGANIZATION").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,tier:(t.tier??"ORGANIZATION").toUpperCase()},n=await r(S,{input:e});u(`Organization created: ${n.createOrganization.name}`),c(t,n.createOrganization);}catch(e){i(e);}}),d.command("update").description("Update an organization").argument("<id>").option("--name <s>").option("--description <s>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),!Object.keys(n).length)throw new l("No updates specified");let o=await r(R,{id:t,input:n});u("Organization updated"),c(e,o.updateOrganization);}catch(n){i(n);}}),d.command("delete").description("Delete an organization").argument("<id>").action(async t=>{try{await r(P,{id:t}),u("Organization deleted");}catch(e){i(e);}});let g=a.command("apps").description("Applications");g.command("list").description("List applications").option("--organization <id>").option("--status <s>","DRAFT|REVIEW|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await r(D,{organizationId:t.organization,status:t.status?.toUpperCase(),limit:t.limit})).applications.edges.map(o=>o.node);c(t,n,{headers:["ID","Name","Status","Installs","Rating"],rows:n.map(o=>[m(o.id,12),o.name,w(o.status),String(o.installCount??0),String(o.averageRating??"-")])});}catch(e){i(e);}}),g.command("get").description("Get an application").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r($,{id:t});if(!n.application)throw new l(`Application ${t} not found`);c(e,n.application);}catch(n){i(n);}}),g.command("create").description("Create an application").requiredOption("--name <s>").requiredOption("--organization <id>").option("--type <t>","API_INTEGRATION|WEB_APP|MOBILE_APP","API_INTEGRATION").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,developerOrganizationId:t.organization,appType:(t.type??"API_INTEGRATION").toUpperCase(),description:t.description},n=await r(N,{input:e});u(`Application created: ${n.createApplication.name}`),c(t,n.createApplication);}catch(e){i(e);}}),g.command("update").description("Update an application").argument("<id>").option("--description <s>").option("--pricing <p>","FREE|PAID_ONETIME|SUBSCRIPTION").option("--docs-url <url>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.description!==void 0&&(n.description=e.description),e.pricing&&(n.pricingType=e.pricing.toUpperCase()),e.docsUrl&&(n.documentationUrl=e.docsUrl),!Object.keys(n).length)throw new l("No updates specified");let o=await r(L,{id:t,input:n});u("Application updated"),c(e,o.updateApplication);}catch(n){i(n);}}),g.command("submit-review").description("Submit an application for review").argument("<id>").option("--notes <s>").action(async(t,e)=>{try{await r(_,{id:t,notes:e.notes}),u("Submitted for review");}catch(n){i(n);}}),g.command("publish").description("Publish an application").argument("<id>").action(async t=>{try{await r(q,{id:t}),u("Application published");}catch(e){i(e);}}),g.command("delete").description("Delete an application").argument("<id>").action(async t=>{try{await r(z,{id:t}),u("Application deleted");}catch(e){i(e);}});let y=g.command("versions").description("Application versions");y.command("list").description("List versions for an application").argument("<applicationId>").option("-f, --format <format>").action(async(t,e)=>{try{let o=(await r(W,{applicationId:t})).application?.versions??[];c(e,o,{headers:["ID","Version","Status","Latest","Stable"],rows:o.map(I=>[m(I.id,12),I.version,w(I.status),String(!!I.isLatest),String(!!I.isStable)])});}catch(n){i(n);}}),y.command("create").description("Create an application version").requiredOption("--application <id>").requiredOption("--version <v>").option("--notes <s>").option("--package <url>","Package URL").option("-f, --format <format>").action(async t=>{try{let e={version:t.version,releaseNotes:t.notes,packageUrl:t.package},n=await r(G,{applicationId:t.application,input:e});u(`Version created: ${n.createApplicationVersion.version}`),c(t,n.createApplicationVersion);}catch(e){i(e);}});let h=g.command("webhooks").description("Application webhooks");h.command("list").description("List webhooks for an application").argument("<applicationId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r(U,{applicationId:t});c(e,n.webhooks,{headers:["ID","Name","URL","Active","Failures"],rows:n.webhooks.map(o=>[m(o.id,12),o.name,m(o.url,40),String(!!o.isActive),String(o.failureCount??0)])});}catch(n){i(n);}}),h.command("add").description("Add a webhook to an application").requiredOption("--application <id>").requiredOption("--name <s>").requiredOption("--url <url>").requiredOption("--events <s>","Comma-separated event names").option("--max-retries <n>","",t=>parseInt(t,10),5).option("-f, --format <format>").action(async t=>{try{let e={applicationId:t.application,name:t.name,url:t.url,events:t.events.split(","),retryEnabled:!0,maxRetries:t.maxRetries},n=await r(F,{input:e});u("Webhook created"),c(t,n.createWebhook);}catch(e){i(e);}}),h.command("remove").description("Remove a webhook").argument("<id>").action(async t=>{try{await r(V,{id:t}),u("Webhook removed");}catch(e){i(e);}}),g.command("analytics").description("Application analytics for a period").requiredOption("--application <id>").option("--period <p>","LAST_7_DAYS|LAST_30_DAYS|CUSTOM","LAST_30_DAYS").option("--from <iso>").option("--to <iso>").option("-f, --format <format>").action(async t=>{try{let e=await r(j,{applicationId:t.application,period:(t.period??"LAST_30_DAYS").toUpperCase(),startDate:t.from,endDate:t.to});c(t,e.applicationAnalytics);}catch(e){i(e);}}),a.command("revenue").description("Revenue for an organization").requiredOption("--organization <id>").option("--period <p>","LAST_7_DAYS|LAST_30_DAYS|YTD","LAST_30_DAYS").option("-f, --format <format>").action(async t=>{try{let e=await r(M,{organizationId:t.organization,period:(t.period??"LAST_30_DAYS").toUpperCase()});c(t,e.organizationRevenue);}catch(e){i(e);}});let C=a.command("admin").description("Admin operations").command("reviews").description("Application review queue");C.command("list").description("List applications pending review").option("--status <s>","PENDING|APPROVED|REJECTED","PENDING").option("-f, --format <format>").action(async t=>{try{let e=await r(B,{status:(t.status??"PENDING").toUpperCase()});c(t,e.adminReviews.edges.map(n=>n.node));}catch(e){i(e);}}),C.command("approve").description("Approve an application").argument("<applicationId>").option("--notes <s>").action(async(t,e)=>{try{await r(H,{id:t,notes:e.notes}),u("Application approved");}catch(n){i(n);}}),C.command("reject").description("Reject an application").argument("<applicationId>").requiredOption("--notes <s>","Reason for rejection").action(async(t,e)=>{try{await r(Y,{id:t,notes:e.notes}),u("Application rejected");}catch(n){i(n);}});}var ct={id:"devportal",version:"1.0.0",displayName:"Developer Portal",dependsOn:["auth"],register(s,a){E(a),K(s);}},Ce=ct;module.exports=Ce;
133
+ `;function K(s){let a=s.command("devportal").description("Developer portal: orgs, apps, webhooks, revenue"),d=a.command("orgs").description("Publisher organizations");d.command("list").description("List devportal organizations").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await r(O,{limit:t.limit,offset:0})).organizations.items;c(t,n,{headers:["ID","Name","Slug","Status"],rows:n.map(o=>[m(o.id,12),o.name,o.slug??"-",w(o.status)])});}catch(e){i(e);}}),d.command("get").description("Get an organization").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r(b,{id:t});if(!n.organization)throw new l(`Organization ${t} not found`);c(e,n.organization);}catch(n){i(n);}}),d.command("create").description("Create a publisher organization").requiredOption("--name <s>").requiredOption("--slug <s>","Unique slug (required by schema)").option("--description <s>").option("--tier <t>","INDIVIDUAL|ORGANIZATION|ENTERPRISE","ORGANIZATION").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,tier:(t.tier??"ORGANIZATION").toUpperCase()},n=await r(S,{input:e});u(`Organization created: ${n.createOrganization.name}`),c(t,n.createOrganization);}catch(e){i(e);}}),d.command("update").description("Update an organization").argument("<id>").option("--name <s>").option("--description <s>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),!Object.keys(n).length)throw new l("No updates specified");let o=await r(R,{id:t,input:n});u("Organization updated"),c(e,o.updateOrganization);}catch(n){i(n);}}),d.command("delete").description("Delete an organization").argument("<id>").action(async t=>{try{await r(P,{id:t}),u("Organization deleted");}catch(e){i(e);}});let g=a.command("apps").description("Applications");g.command("list").description("List applications").option("--organization <id>").option("--status <s>","DRAFT|REVIEW|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await r(D,{organizationId:t.organization,status:t.status?.toUpperCase(),limit:t.limit})).applications.edges.map(o=>o.node);c(t,n,{headers:["ID","Name","Status","Installs","Rating"],rows:n.map(o=>[m(o.id,12),o.name,w(o.status),String(o.installCount??0),String(o.averageRating??"-")])});}catch(e){i(e);}}),g.command("get").description("Get an application").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r($,{id:t});if(!n.application)throw new l(`Application ${t} not found`);c(e,n.application);}catch(n){i(n);}}),g.command("create").description("Create an application").requiredOption("--name <s>").requiredOption("--organization <id>").option("--type <t>","API_INTEGRATION|WEB_APP|MOBILE_APP","API_INTEGRATION").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,developerOrganizationId:t.organization,appType:(t.type??"API_INTEGRATION").toUpperCase(),description:t.description},n=await r(N,{input:e});u(`Application created: ${n.createApplication.name}`),c(t,n.createApplication);}catch(e){i(e);}}),g.command("update").description("Update an application").argument("<id>").option("--description <s>").option("--pricing <p>","FREE|PAID_ONETIME|SUBSCRIPTION").option("--docs-url <url>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.description!==void 0&&(n.description=e.description),e.pricing&&(n.pricingType=e.pricing.toUpperCase()),e.docsUrl&&(n.documentationUrl=e.docsUrl),!Object.keys(n).length)throw new l("No updates specified");let o=await r(L,{id:t,input:n});u("Application updated"),c(e,o.updateApplication);}catch(n){i(n);}}),g.command("submit-review").description("Submit an application for review").argument("<id>").option("--notes <s>").action(async(t,e)=>{try{await r(_,{id:t,notes:e.notes}),u("Submitted for review");}catch(n){i(n);}}),g.command("publish").description("Publish an application").argument("<id>").action(async t=>{try{await r(q,{id:t}),u("Application published");}catch(e){i(e);}}),g.command("delete").description("Delete an application").argument("<id>").action(async t=>{try{await r(z,{id:t}),u("Application deleted");}catch(e){i(e);}});let y=g.command("versions").description("Application versions");y.command("list").description("List versions for an application").argument("<applicationId>").option("-f, --format <format>").action(async(t,e)=>{try{let o=(await r(W,{applicationId:t})).application?.versions??[];c(e,o,{headers:["ID","Version","Status","Latest","Stable"],rows:o.map(I=>[m(I.id,12),I.version,w(I.status),String(!!I.isLatest),String(!!I.isStable)])});}catch(n){i(n);}}),y.command("create").description("Create an application version").requiredOption("--application <id>").requiredOption("--version <v>").option("--notes <s>").option("--package <url>","Package URL").option("-f, --format <format>").action(async t=>{try{let e={version:t.version,releaseNotes:t.notes,packageUrl:t.package},n=await r(G,{applicationId:t.application,input:e});u(`Version created: ${n.createApplicationVersion.version}`),c(t,n.createApplicationVersion);}catch(e){i(e);}});let h=g.command("webhooks").description("Application webhooks");h.command("list").description("List webhooks for an application").argument("<applicationId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await r(U,{applicationId:t});c(e,n.webhooks,{headers:["ID","Name","URL","Active","Failures"],rows:n.webhooks.map(o=>[m(o.id,12),o.name,m(o.url,40),String(!!o.isActive),String(o.failureCount??0)])});}catch(n){i(n);}}),h.command("add").description("Add a webhook to an application").requiredOption("--application <id>").requiredOption("--name <s>").requiredOption("--url <url>").requiredOption("--events <s>","Comma-separated event names").option("--max-retries <n>","",t=>parseInt(t,10),5).option("-f, --format <format>").action(async t=>{try{let e={applicationId:t.application,name:t.name,url:t.url,events:t.events.split(","),retryEnabled:!0,maxRetries:t.maxRetries},n=await r(V,{input:e});u("Webhook created"),c(t,n.createWebhook);}catch(e){i(e);}}),h.command("remove").description("Remove a webhook").argument("<id>").action(async t=>{try{await r(F,{id:t}),u("Webhook removed");}catch(e){i(e);}}),g.command("analytics").description("Application analytics for a period").requiredOption("--application <id>").option("--period <p>","LAST_7_DAYS|LAST_30_DAYS|CUSTOM","LAST_30_DAYS").option("--from <iso>").option("--to <iso>").option("-f, --format <format>").action(async t=>{try{let e=await r(j,{applicationId:t.application,period:(t.period??"LAST_30_DAYS").toUpperCase(),startDate:t.from,endDate:t.to});c(t,e.applicationAnalytics);}catch(e){i(e);}}),a.command("revenue").description("Revenue for an organization").requiredOption("--organization <id>").option("--period <p>","LAST_7_DAYS|LAST_30_DAYS|YTD","LAST_30_DAYS").option("-f, --format <format>").action(async t=>{try{let e=await r(M,{organizationId:t.organization,period:(t.period??"LAST_30_DAYS").toUpperCase()});c(t,e.organizationRevenue);}catch(e){i(e);}});let C=a.command("admin").description("Admin operations").command("reviews").description("Application review queue");C.command("list").description("List applications pending review").option("--status <s>","PENDING|APPROVED|REJECTED","PENDING").option("-f, --format <format>").action(async t=>{try{let e=await r(B,{status:(t.status??"PENDING").toUpperCase()});c(t,e.adminReviews.edges.map(n=>n.node));}catch(e){i(e);}}),C.command("approve").description("Approve an application").argument("<applicationId>").option("--notes <s>").action(async(t,e)=>{try{await r(H,{id:t,notes:e.notes}),u("Application approved");}catch(n){i(n);}}),C.command("reject").description("Reject an application").argument("<applicationId>").requiredOption("--notes <s>","Reason for rejection").action(async(t,e)=>{try{await r(Y,{id:t,notes:e.notes}),u("Application rejected");}catch(n){i(n);}});}var ct={id:"devportal",version:"1.0.0",displayName:"Developer Portal",dependsOn:["auth"],register(s,a){E(a),K(s);}},Ce=ct;module.exports=Ce;
@@ -1,4 +1,4 @@
1
- import {a,c,h as h$1,p,n,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var N=`
1
+ import {a,c,h as h$1,p,n,g,i}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var N=`
2
2
  query ListOrganizations($filter: OrganizationFilterInput, $limit: Int, $offset: Int) {
3
3
  organizations(filter: $filter, limit: $limit, offset: $offset) {
4
4
  items { id name slug status }
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1,d as d$1}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var O=`
1
+ import {a,b as b$1,h as h$1,p as p$1,g,i,o as o$1,d as d$1}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var O=`
2
2
  query EcoSite($id: ID!) {
3
3
  ecoSite(id: $id) {
4
4
  id name code description type status country region latitude longitude
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p,o,g,i}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';var v=`
1
+ import {a,b,h as h$1,p,o,g,i}from'../../chunk-SQSFZFQZ.js';import {o as o$1}from'../../chunk-UAFYTYK6.js';var v=`
2
2
  id name description type status visibility timezone startAt endAt capacity
3
3
  metadata createdAt updatedAt workspaceId
4
4
  `,$=`
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var promises=require('fs/promises');var s=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},E=class extends s{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},x=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var y=null;function k(o){y=o;}function f(){if(!y)throw new x("vibecontrols module helpers used before setHelpersContext was called");return y}function tt(){let o=f();if(!o.auth.isAuthenticated())throw new E("Authentication required.",{hint:`Run \`${o.productName} auth login\` to authenticate.`})}async function c(o,r){return tt(),f().gql.workspace.request(o,r)}function p(o){let r=o instanceof Error?o.message:String(o);throw new s(r)}function g(o,r,a){f().output.formatAndOutput(o,r,a);}function m(o){f().output.printSuccess(o);}function I(o){f().output.printInfo(o);}function v(o){return f().output.formatStatus(o)}function A(o){return f().output.formatDate(o)}function O(o,r){return f().output.truncate(o,r)}function $(){return f()}var P=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var promises=require('fs/promises');var s=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},E=class extends s{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},x=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var y=null;function k(o){y=o;}function f(){if(!y)throw new x("vibecontrols module helpers used before setHelpersContext was called");return y}function tt(){let o=f();if(!o.auth.isAuthenticated())throw new E("Authentication required.",{hint:`Run \`${o.productName} auth login\` to authenticate.`})}async function c(o,r){return tt(),f().gql.workspace.request(o,r)}function p(o){let r=o instanceof Error?o.message:String(o);throw new s(r)}function g(o,r,a){f().output.formatAndOutput(o,r,a);}function m(o){f().output.printSuccess(o);}function I(o){f().output.printInfo(o);}function A(o){return f().output.formatStatus(o)}function v(o){return f().output.formatDate(o)}function O(o,r){return f().output.truncate(o,r)}function $(){return f()}var P=`
2
2
  query ListExportJobs($context: ContextInput!, $filter: ExportJobFilterInput, $pagination: ExportPaginationInput) {
3
3
  listExportJobs(context: $context, filter: $filter, pagination: $pagination) {
4
4
  edges { node {
@@ -92,4 +92,4 @@
92
92
  downloadUrl downloadExpiresAt
93
93
  }
94
94
  }
95
- `;function d(){let o=$().auth.read();if(!o?.workspaceId)throw new s("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:o.workspaceId}}function F(o){let r=o.command("export").description("Workspace data export jobs"),a=r.command("jobs").description("Export job lifecycle");a.command("list").description("List export jobs").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.status&&(e.status=t.status.toUpperCase());let i=(await c(P,{context:d(),filter:Object.keys(e).length?e:void 0,pagination:{first:t.limit}})).listExportJobs.edges.map(l=>l.node);g(t,i,{headers:["ID","Name","Status","Progress","Started"],rows:i.map(l=>[O(l.id,12),l.name??"-",v(l.status),`${l.processedEntities??0}/${l.totalEntities??"-"}`,A(l.startedAt)])});}catch(e){p(e);}}),a.command("get").description("Get an export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(T,{context:d(),id:t});if(!n.getExportJob)throw new s(`Export job ${t} not found`);g(e,n.getExportJob);}catch(n){p(n);}}),a.command("create").description("Create an export job").requiredOption("--name <s>").requiredOption("--types <t>","Comma-separated entity types").option("--format <fmt>","JSON|CSV|ZIP","JSON").option("--include-media","Include media files",false).option("--include-metadata","Include metadata",true).option("--from <iso>","Date range start").option("--to <iso>","Date range end").option("-f, --format-output <format>").action(async t=>{try{let e={name:t.name,entityTypes:t.types.split(","),format:(t.format??"JSON").toUpperCase(),includeMedia:!!t.includeMedia,includeMetadata:t.includeMetadata!==!1,dateRangeStart:t.from,dateRangeEnd:t.to},n=await c(S,{context:d(),input:e});m(`Export job created: ${n.createExportJob.id}`),g({format:t.formatOutput},n.createExportJob);}catch(e){p(e);}}),a.command("cancel").description("Cancel a running export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(_,{context:d(),id:t});m(`Export job cancelled: ${n.cancelExportJob.id}`),g(e,n.cancelExportJob);}catch(n){p(n);}}),a.command("delete").description("Delete an export job").argument("<id>").action(async t=>{try{if(!(await c(L,{context:d(),id:t})).deleteExportJob)throw new s(`Failed to delete export job ${t}`);m(`Export job deleted: ${t}`);}catch(e){p(e);}}),a.command("retry").description("Retry a failed export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(N,{context:d(),id:t});m(`Export job retry queued: ${n.retryExportJob.id}`),g(e,n.retryExportJob);}catch(n){p(n);}}),r.command("entities").description("List entity types available for export").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await c(j,{context:d(),pagination:{first:t.limit}})).getAvailableExportEntities.edges.map(i=>i.node);g(t,n,{headers:["Type","Display","Enabled","DateRange","Media","Size"],rows:n.map(i=>[i.entityType,i.displayName,i.enabled?"yes":"no",i.supportsDateRange?"yes":"no",i.supportsMediaExport?"yes":"no",i.estimatedSize??"-"])});}catch(e){p(e);}}),r.command("part").description("Get an export part by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(G,{context:d(),id:t});if(!n.getExportPart)throw new s(`Export part ${t} not found`);g(e,n.getExportPart);}catch(n){p(n);}}),r.command("download").description("Download a completed export job to a local path").argument("<jobId>").requiredOption("--to <path>","Local file path to write").action(async(t,e)=>{try{let n=await c(T,{context:d(),id:t});if(!n.getExportJob)throw new s(`Export job ${t} not found`);let i=n.getExportJob.downloadUrl;if(!i)throw new s(`Job ${t} has no downloadUrl yet (status=${n.getExportJob.status??"UNKNOWN"}).`);I(`Downloading from ${i}`);let l=await fetch(i);if(!l.ok)throw new s(`Download failed: ${l.status} ${l.statusText}`);let h=Buffer.from(await l.arrayBuffer());await promises.writeFile(e.to,h),m(`Saved ${h.length} bytes to ${e.to}`);}catch(n){p(n);}});let w=r.command("templates").description("Export templates");w.command("list").description("List export templates").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e=await c(R,{context:d(),pagination:{first:t.limit}});g(t,e.listExportTemplates.edges.map(n=>n.node));}catch(e){p(e);}}),w.command("get").description("Get an export template").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(D,{context:d(),id:t});if(!n.getExportTemplate)throw new s(`Template ${t} not found`);g(e,n.getExportTemplate);}catch(n){p(n);}}),w.command("create").description("Create an export template").requiredOption("--name <s>").requiredOption("--types <t>","Comma-separated entity types").option("--description <s>").option("--format <fmt>","JSON|CSV","JSON").option("--include-media","Include media files",false).option("--include-metadata","Include metadata",true).option("-f, --format-output <format>").action(async t=>{try{let e={name:t.name,entityTypes:t.types.split(","),format:(t.format??"JSON").toUpperCase(),includeMedia:!!t.includeMedia,includeMetadata:t.includeMetadata!==!1};t.description&&(e.description=t.description);let n=await c(q,{context:d(),input:e});m(`Template created: ${n.createExportTemplate.id}`),g({format:t.formatOutput},n.createExportTemplate);}catch(e){p(e);}}),w.command("update").description("Update an export template").argument("<id>").option("--name <s>").option("--description <s>").option("--types <t>","Comma-separated entity types").option("--format <fmt>","JSON|CSV").option("--include-media <bool>","true|false").option("--include-metadata <bool>","true|false").option("--default <bool>","Set isDefault: true|false").option("-f, --format-output <format>").action(async(t,e)=>{try{let n={};e.name&&(n.name=e.name),e.description&&(n.description=e.description),e.types&&(n.entityTypes=e.types.split(",")),e.format&&(n.format=e.format.toUpperCase()),e.includeMedia!==void 0&&(n.includeMedia=e.includeMedia==="true"),e.includeMetadata!==void 0&&(n.includeMetadata=e.includeMetadata==="true"),e.default!==void 0&&(n.isDefault=e.default==="true");let i=await c(M,{context:d(),id:t,input:n});m(`Template updated: ${i.updateExportTemplate.id}`),g({format:e.formatOutput},i.updateExportTemplate);}catch(n){p(n);}}),w.command("delete").description("Delete an export template").argument("<id>").action(async t=>{try{if(!(await c(J,{context:d(),id:t})).deleteExportTemplate)throw new s(`Failed to delete template ${t}`);m(`Template deleted: ${t}`);}catch(e){p(e);}});}var ot={id:"export",version:"1.0.0",displayName:"Export",dependsOn:["auth","workspaces"],register(o,r){k(r),F(o);}},fe=ot;module.exports=fe;
95
+ `;function d(){let o=$().auth.read();if(!o?.workspaceId)throw new s("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:o.workspaceId}}function F(o){let r=o.command("export").description("Workspace data export jobs"),a=r.command("jobs").description("Export job lifecycle");a.command("list").description("List export jobs").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.status&&(e.status=t.status.toUpperCase());let i=(await c(P,{context:d(),filter:Object.keys(e).length?e:void 0,pagination:{first:t.limit}})).listExportJobs.edges.map(l=>l.node);g(t,i,{headers:["ID","Name","Status","Progress","Started"],rows:i.map(l=>[O(l.id,12),l.name??"-",A(l.status),`${l.processedEntities??0}/${l.totalEntities??"-"}`,v(l.startedAt)])});}catch(e){p(e);}}),a.command("get").description("Get an export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(T,{context:d(),id:t});if(!n.getExportJob)throw new s(`Export job ${t} not found`);g(e,n.getExportJob);}catch(n){p(n);}}),a.command("create").description("Create an export job").requiredOption("--name <s>").requiredOption("--types <t>","Comma-separated entity types").option("--format <fmt>","JSON|CSV|ZIP","JSON").option("--include-media","Include media files",false).option("--include-metadata","Include metadata",true).option("--from <iso>","Date range start").option("--to <iso>","Date range end").option("-f, --format-output <format>").action(async t=>{try{let e={name:t.name,entityTypes:t.types.split(","),format:(t.format??"JSON").toUpperCase(),includeMedia:!!t.includeMedia,includeMetadata:t.includeMetadata!==!1,dateRangeStart:t.from,dateRangeEnd:t.to},n=await c(S,{context:d(),input:e});m(`Export job created: ${n.createExportJob.id}`),g({format:t.formatOutput},n.createExportJob);}catch(e){p(e);}}),a.command("cancel").description("Cancel a running export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(_,{context:d(),id:t});m(`Export job cancelled: ${n.cancelExportJob.id}`),g(e,n.cancelExportJob);}catch(n){p(n);}}),a.command("delete").description("Delete an export job").argument("<id>").action(async t=>{try{if(!(await c(L,{context:d(),id:t})).deleteExportJob)throw new s(`Failed to delete export job ${t}`);m(`Export job deleted: ${t}`);}catch(e){p(e);}}),a.command("retry").description("Retry a failed export job").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(N,{context:d(),id:t});m(`Export job retry queued: ${n.retryExportJob.id}`),g(e,n.retryExportJob);}catch(n){p(n);}}),r.command("entities").description("List entity types available for export").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let n=(await c(j,{context:d(),pagination:{first:t.limit}})).getAvailableExportEntities.edges.map(i=>i.node);g(t,n,{headers:["Type","Display","Enabled","DateRange","Media","Size"],rows:n.map(i=>[i.entityType,i.displayName,i.enabled?"yes":"no",i.supportsDateRange?"yes":"no",i.supportsMediaExport?"yes":"no",i.estimatedSize??"-"])});}catch(e){p(e);}}),r.command("part").description("Get an export part by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(G,{context:d(),id:t});if(!n.getExportPart)throw new s(`Export part ${t} not found`);g(e,n.getExportPart);}catch(n){p(n);}}),r.command("download").description("Download a completed export job to a local path").argument("<jobId>").requiredOption("--to <path>","Local file path to write").action(async(t,e)=>{try{let n=await c(T,{context:d(),id:t});if(!n.getExportJob)throw new s(`Export job ${t} not found`);let i=n.getExportJob.downloadUrl;if(!i)throw new s(`Job ${t} has no downloadUrl yet (status=${n.getExportJob.status??"UNKNOWN"}).`);I(`Downloading from ${i}`);let l=await fetch(i);if(!l.ok)throw new s(`Download failed: ${l.status} ${l.statusText}`);let h=Buffer.from(await l.arrayBuffer());await promises.writeFile(e.to,h),m(`Saved ${h.length} bytes to ${e.to}`);}catch(n){p(n);}});let w=r.command("templates").description("Export templates");w.command("list").description("List export templates").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e=await c(R,{context:d(),pagination:{first:t.limit}});g(t,e.listExportTemplates.edges.map(n=>n.node));}catch(e){p(e);}}),w.command("get").description("Get an export template").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await c(D,{context:d(),id:t});if(!n.getExportTemplate)throw new s(`Template ${t} not found`);g(e,n.getExportTemplate);}catch(n){p(n);}}),w.command("create").description("Create an export template").requiredOption("--name <s>").requiredOption("--types <t>","Comma-separated entity types").option("--description <s>").option("--format <fmt>","JSON|CSV","JSON").option("--include-media","Include media files",false).option("--include-metadata","Include metadata",true).option("-f, --format-output <format>").action(async t=>{try{let e={name:t.name,entityTypes:t.types.split(","),format:(t.format??"JSON").toUpperCase(),includeMedia:!!t.includeMedia,includeMetadata:t.includeMetadata!==!1};t.description&&(e.description=t.description);let n=await c(q,{context:d(),input:e});m(`Template created: ${n.createExportTemplate.id}`),g({format:t.formatOutput},n.createExportTemplate);}catch(e){p(e);}}),w.command("update").description("Update an export template").argument("<id>").option("--name <s>").option("--description <s>").option("--types <t>","Comma-separated entity types").option("--format <fmt>","JSON|CSV").option("--include-media <bool>","true|false").option("--include-metadata <bool>","true|false").option("--default <bool>","Set isDefault: true|false").option("-f, --format-output <format>").action(async(t,e)=>{try{let n={};e.name&&(n.name=e.name),e.description&&(n.description=e.description),e.types&&(n.entityTypes=e.types.split(",")),e.format&&(n.format=e.format.toUpperCase()),e.includeMedia!==void 0&&(n.includeMedia=e.includeMedia==="true"),e.includeMetadata!==void 0&&(n.includeMetadata=e.includeMetadata==="true"),e.default!==void 0&&(n.isDefault=e.default==="true");let i=await c(M,{context:d(),id:t,input:n});m(`Template updated: ${i.updateExportTemplate.id}`),g({format:e.formatOutput},i.updateExportTemplate);}catch(n){p(n);}}),w.command("delete").description("Delete an export template").argument("<id>").action(async t=>{try{if(!(await c(J,{context:d(),id:t})).deleteExportTemplate)throw new s(`Failed to delete template ${t}`);m(`Template deleted: ${t}`);}catch(e){p(e);}});}var ot={id:"export",version:"1.0.0",displayName:"Export",dependsOn:["auth","workspaces"],register(o,r){k(r),F(o);}},fe=ot;module.exports=fe;
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p,n,o,g,i as i$1,k,s}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';import {writeFile}from'fs/promises';var J=`
1
+ import {a,b,h as h$1,p,n,o,g,i as i$1,k,s}from'../../chunk-SQSFZFQZ.js';import {o as o$1}from'../../chunk-UAFYTYK6.js';import {writeFile}from'fs/promises';var J=`
2
2
  query ListExportJobs($context: ContextInput!, $filter: ExportJobFilterInput, $pagination: ExportPaginationInput) {
3
3
  listExportJobs(context: $context, filter: $filter, pagination: $pagination) {
4
4
  edges { node {
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var fs=require('fs'),path=require('path'),crypto=require('crypto');var u=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},m=class extends u{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},f=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var k=null;function E(n){k=n;}function w(){if(!k)throw new f("vibecontrols module helpers used before setHelpersContext was called");return k}function H(){let n=w();if(!n.auth.isAuthenticated())throw new m("Authentication required.",{hint:`Run \`${n.productName} auth login\` to authenticate.`})}async function l(n,r){return H(),w().gql.workspace.request(n,r)}function p(n){let r=n instanceof Error?n.message:String(n);throw new u(r)}function d(n,r,a){w().output.formatAndOutput(n,r,a);}function h(n){w().output.printSuccess(n);}function x(n){w().output.printInfo(n);}function y(n,r){return w().output.truncate(n,r)}var v=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var fs=require('fs'),path=require('path'),crypto=require('crypto');var u=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},m=class extends u{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},g=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var C=null;function E(n){C=n;}function w(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}function H(){let n=w();if(!n.auth.isAuthenticated())throw new m("Authentication required.",{hint:`Run \`${n.productName} auth login\` to authenticate.`})}async function l(n,r){return H(),w().gql.workspace.request(n,r)}function p(n){let r=n instanceof Error?n.message:String(n);throw new u(r)}function d(n,r,a){w().output.formatAndOutput(n,r,a);}function h(n){w().output.printSuccess(n);}function x(n){w().output.printInfo(n);}function y(n,r){return w().output.truncate(n,r)}var v=`
2
2
  query BrowseFolderRoot($pagination: PaginationInput) {
3
3
  getFilesInFolder(pagination: $pagination) {
4
4
  files { id name size mimeType extension createdAt }
@@ -59,6 +59,6 @@
59
59
  query GetFileDownloadUrl($id: ID!, $expiresIn: Int) {
60
60
  getFileDownloadUrl(id: $id, expiresIn: $expiresIn)
61
61
  }
62
- `;function F(n){let r=n.command("files").description("Workspace file management");r.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async(t,e)=>{try{let o={limit:e.limit,offset:0};if(t){let i=await l(A,{folderId:t,pagination:o});if(e.format){d(e,{folder:i.getFolder,files:i.getFilesInFolder.files});return}i.getFolder&&x(`Folder: ${i.getFolder.name}`);for(let c of i.getFilesInFolder.files){let C=c.size?`${c.size}b`:"-";console.log(` \u{1F4C4} ${y(c.id,12)} ${c.name} ${C} ${c.mimeType??"-"}`);}console.log(`
63
- ${i.getFilesInFolder.total} files`);return}let g=await l(v,{pagination:o});if(e.format){d(e,{files:g.getFilesInFolder.files});return}for(let i of g.getFilesInFolder.files){let c=i.size?`${i.size}b`:"-";console.log(` \u{1F4C4} ${y(i.id,12)} ${i.name} ${c} ${i.mimeType??"-"}`);}console.log(`
64
- ${g.getFilesInFolder.total} files`);}catch(o){p(o);}}),r.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(t,e)=>{try{let o=fs.statSync(t),g=path.basename(t),i=path.extname(t).slice(1)||void 0,c=fs.readFileSync(t),C=crypto.createHash("sha256").update(c).digest("hex"),P={fileName:g,fileSize:o.size,mimeType:"application/octet-stream",extension:i,folderId:e.folder,sha256Hash:C,visibility:(e.visibility??"WORKSPACE").toUpperCase()},I=await l(O,{input:P});x("Upload session created. PUT the local bytes to the returned URL(s)."),d(e,I.initiateUpload),x(`After uploading, complete with: vibecontrols files upload-complete --session ${I.initiateUpload.session.id}`);}catch(o){p(o);}}),r.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e=await l(S,{input:{sessionId:t.session,folderId:t.folder,description:t.description}});h(`Upload complete: ${e.completeUpload.fileId}`),d(t,e.completeUpload.file);}catch(e){p(e);}}),r.command("get").description("Get a file by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(D,{id:t});if(!o.getFile)throw new u(`File ${t} not found`);d(e,o.getFile);}catch(o){p(o);}}),r.command("download").description("Get a pre-signed download URL for a file").argument("<id>").option("--expires <seconds>","URL expiry in seconds",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(L,{id:t,expiresIn:e.expires});if(e.format){d(e,{url:o.getFileDownloadUrl});return}h("Download URL:"),console.log(o.getFileDownloadUrl);}catch(o){p(o);}});let a=r.command("share").description("Manage file shares");a.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o={fileId:t,shareType:"PUBLIC_LINK",accessLevel:(e.access??"DOWNLOAD").toUpperCase(),expiresAt:e.expires,password:e.password,maxDownloads:e.maxDownloads},g=await l(R,{input:o});h("Share created"),d(e,g.createShare);}catch(o){p(o);}}),a.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async t=>{try{await l($,{id:t}),h("Share revoked");}catch(e){p(e);}});}var ee={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(n,r){E(r),F(n);}},gt=ee;module.exports=gt;
62
+ `;function F(n){let r=n.command("files").description("Workspace file management");r.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async(t,e)=>{try{let o={limit:e.limit,offset:0};if(t){let i=await l(A,{folderId:t,pagination:o});if(e.format){d(e,{folder:i.getFolder,files:i.getFilesInFolder.files});return}i.getFolder&&x(`Folder: ${i.getFolder.name}`);for(let c of i.getFilesInFolder.files){let k=c.size?`${c.size}b`:"-";console.log(` \u{1F4C4} ${y(c.id,12)} ${c.name} ${k} ${c.mimeType??"-"}`);}console.log(`
63
+ ${i.getFilesInFolder.total} files`);return}let f=await l(v,{pagination:o});if(e.format){d(e,{files:f.getFilesInFolder.files});return}for(let i of f.getFilesInFolder.files){let c=i.size?`${i.size}b`:"-";console.log(` \u{1F4C4} ${y(i.id,12)} ${i.name} ${c} ${i.mimeType??"-"}`);}console.log(`
64
+ ${f.getFilesInFolder.total} files`);}catch(o){p(o);}}),r.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(t,e)=>{try{let o=fs.statSync(t),f=path.basename(t),i=path.extname(t).slice(1)||void 0,c=fs.readFileSync(t),k=crypto.createHash("sha256").update(c).digest("hex"),P={fileName:f,fileSize:o.size,mimeType:"application/octet-stream",extension:i,folderId:e.folder,sha256Hash:k,visibility:(e.visibility??"WORKSPACE").toUpperCase()},I=await l(O,{input:P});x("Upload session created. PUT the local bytes to the returned URL(s)."),d(e,I.initiateUpload),x(`After uploading, complete with: vibecontrols files upload-complete --session ${I.initiateUpload.session.id}`);}catch(o){p(o);}}),r.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e=await l(S,{input:{sessionId:t.session,folderId:t.folder,description:t.description}});h(`Upload complete: ${e.completeUpload.fileId}`),d(t,e.completeUpload.file);}catch(e){p(e);}}),r.command("get").description("Get a file by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(D,{id:t});if(!o.getFile)throw new u(`File ${t} not found`);d(e,o.getFile);}catch(o){p(o);}}),r.command("download").description("Get a pre-signed download URL for a file").argument("<id>").option("--expires <seconds>","URL expiry in seconds",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(L,{id:t,expiresIn:e.expires});if(e.format){d(e,{url:o.getFileDownloadUrl});return}h("Download URL:"),console.log(o.getFileDownloadUrl);}catch(o){p(o);}});let a=r.command("share").description("Manage file shares");a.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o={fileId:t,shareType:"PUBLIC_LINK",accessLevel:(e.access??"DOWNLOAD").toUpperCase(),expiresAt:e.expires,password:e.password,maxDownloads:e.maxDownloads},f=await l(R,{input:o});h("Share created"),d(e,f.createShare);}catch(o){p(o);}}),a.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async t=>{try{await l($,{id:t}),h("Share revoked");}catch(e){p(e);}});}var ee={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(n,r){E(r),F(n);}},ft=ee;module.exports=ft;
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,k,p,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';import {statSync,readFileSync}from'fs';import {basename,extname}from'path';import {createHash}from'crypto';var h=`
1
+ import {a,b,h as h$1,k,p,g,i}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';import {statSync,readFileSync}from'fs';import {basename,extname}from'path';import {createHash}from'crypto';var h=`
2
2
  query BrowseFolderRoot($pagination: PaginationInput) {
3
3
  getFilesInFolder(pagination: $pagination) {
4
4
  files { id name size mimeType extension createdAt }
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,i,o as o$1,p as p$1,q as q$1}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';import {readFileSync}from'fs';import {createInterface}from'readline';import {Writable}from'stream';var E=`
1
+ import {a,b,h as h$1,i,o as o$1,p as p$1,q as q$1}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';import {readFileSync}from'fs';import {createInterface}from'readline';import {Writable}from'stream';var E=`
2
2
  id workflowKey name description version status category tags icon isActive
3
3
  totalVersions projectId createdAt updatedAt
4
4
  `,q=`