@burdenoff/cli-sdk 2026.825.2 → 2026.1021.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.
- package/dist/chunk-IZXPWPKX.js +32 -0
- package/dist/chunk-NLEVVDXR.js +1 -0
- package/dist/core/index.cjs +7 -7
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{module-DxCuik6L.d.cts → module-DOIiVaXQ.d.cts} +4 -1
- package/dist/{module-DxCuik6L.d.ts → module-DOIiVaXQ.d.ts} +4 -1
- package/dist/modules/adaptercloud/index.cjs +2 -2
- package/dist/modules/adaptercloud/index.d.cts +1 -1
- package/dist/modules/adaptercloud/index.d.ts +1 -1
- package/dist/modules/adaptercloud/index.js +1 -1
- package/dist/modules/artistrybase/index.cjs +6 -6
- package/dist/modules/artistrybase/index.d.cts +1 -1
- package/dist/modules/artistrybase/index.d.ts +1 -1
- package/dist/modules/artistrybase/index.js +1 -1
- package/dist/modules/assethandler/index.cjs +2 -2
- package/dist/modules/assethandler/index.d.cts +1 -1
- package/dist/modules/assethandler/index.d.ts +1 -1
- package/dist/modules/assethandler/index.js +1 -1
- package/dist/modules/atheletebridge/index.cjs +4 -4
- package/dist/modules/atheletebridge/index.d.cts +1 -1
- package/dist/modules/atheletebridge/index.d.ts +1 -1
- package/dist/modules/atheletebridge/index.js +1 -1
- package/dist/modules/auth/index.cjs +34 -34
- package/dist/modules/auth/index.d.cts +1 -1
- package/dist/modules/auth/index.d.ts +1 -1
- package/dist/modules/auth/index.js +30 -30
- package/dist/modules/billing/index.cjs +3 -3
- package/dist/modules/billing/index.d.cts +1 -1
- package/dist/modules/billing/index.d.ts +1 -1
- package/dist/modules/billing/index.js +1 -1
- package/dist/modules/brainyrich/index.cjs +4 -4
- package/dist/modules/brainyrich/index.d.cts +1 -1
- package/dist/modules/brainyrich/index.d.ts +1 -1
- package/dist/modules/brainyrich/index.js +1 -1
- package/dist/modules/buildmyiq/index.cjs +3 -3
- package/dist/modules/buildmyiq/index.d.cts +1 -1
- package/dist/modules/buildmyiq/index.d.ts +1 -1
- package/dist/modules/buildmyiq/index.js +1 -1
- package/dist/modules/channels/index.cjs +7 -7
- package/dist/modules/channels/index.d.cts +1 -1
- package/dist/modules/channels/index.d.ts +1 -1
- package/dist/modules/channels/index.js +1 -1
- package/dist/modules/collabkin/index.cjs +11 -11
- package/dist/modules/collabkin/index.d.cts +1 -1
- package/dist/modules/collabkin/index.d.ts +1 -1
- package/dist/modules/collabkin/index.js +1 -1
- package/dist/modules/comradecircle/index.cjs +5 -5
- package/dist/modules/comradecircle/index.d.cts +1 -1
- package/dist/modules/comradecircle/index.d.ts +1 -1
- package/dist/modules/comradecircle/index.js +1 -1
- package/dist/modules/conversations/index.cjs +8 -8
- package/dist/modules/conversations/index.d.cts +1 -1
- package/dist/modules/conversations/index.d.ts +1 -1
- package/dist/modules/conversations/index.js +1 -1
- package/dist/modules/coolandlovely/index.cjs +4 -4
- package/dist/modules/coolandlovely/index.d.cts +1 -1
- package/dist/modules/coolandlovely/index.d.ts +1 -1
- package/dist/modules/coolandlovely/index.js +1 -1
- package/dist/modules/cosmicintersection/index.cjs +4 -4
- package/dist/modules/cosmicintersection/index.d.cts +1 -1
- package/dist/modules/cosmicintersection/index.d.ts +1 -1
- package/dist/modules/cosmicintersection/index.js +1 -1
- package/dist/modules/crewfoundry/index.cjs +4 -4
- package/dist/modules/crewfoundry/index.d.cts +1 -1
- package/dist/modules/crewfoundry/index.d.ts +1 -1
- package/dist/modules/crewfoundry/index.js +1 -1
- package/dist/modules/devportal/index.cjs +5 -5
- package/dist/modules/devportal/index.d.cts +1 -1
- package/dist/modules/devportal/index.d.ts +1 -1
- package/dist/modules/devportal/index.js +1 -1
- package/dist/modules/ecoimpacthub/index.cjs +2 -2
- package/dist/modules/ecoimpacthub/index.d.cts +1 -1
- package/dist/modules/ecoimpacthub/index.d.ts +1 -1
- package/dist/modules/ecoimpacthub/index.js +1 -1
- package/dist/modules/eventfullymanaged/index.cjs +21 -21
- package/dist/modules/eventfullymanaged/index.d.cts +1 -1
- package/dist/modules/eventfullymanaged/index.d.ts +1 -1
- package/dist/modules/eventfullymanaged/index.js +1 -1
- package/dist/modules/export/index.cjs +3 -3
- package/dist/modules/export/index.d.cts +1 -1
- package/dist/modules/export/index.d.ts +1 -1
- package/dist/modules/export/index.js +1 -1
- package/dist/modules/files/index.cjs +9 -9
- package/dist/modules/files/index.d.cts +1 -1
- package/dist/modules/files/index.d.ts +1 -1
- package/dist/modules/files/index.js +1 -1
- package/dist/modules/fluidgrids/index.cjs +401 -0
- package/dist/modules/fluidgrids/index.d.cts +7 -0
- package/dist/modules/fluidgrids/index.d.ts +7 -0
- package/dist/modules/fluidgrids/index.js +401 -0
- package/dist/modules/ggnomad/index.cjs +5 -5
- package/dist/modules/ggnomad/index.d.cts +1 -1
- package/dist/modules/ggnomad/index.d.ts +1 -1
- package/dist/modules/ggnomad/index.js +1 -1
- package/dist/modules/govcitizenhub/index.cjs +4 -4
- package/dist/modules/govcitizenhub/index.d.cts +1 -1
- package/dist/modules/govcitizenhub/index.d.ts +1 -1
- package/dist/modules/govcitizenhub/index.js +1 -1
- package/dist/modules/groups/index.cjs +4 -4
- package/dist/modules/groups/index.d.cts +1 -1
- package/dist/modules/groups/index.d.ts +1 -1
- package/dist/modules/groups/index.js +1 -1
- package/dist/modules/headshotmarketing/index.cjs +1 -1
- package/dist/modules/headshotmarketing/index.d.cts +1 -1
- package/dist/modules/headshotmarketing/index.d.ts +1 -1
- package/dist/modules/headshotmarketing/index.js +1 -1
- package/dist/modules/health/index.d.cts +1 -1
- package/dist/modules/health/index.d.ts +1 -1
- package/dist/modules/hookmovies/index.cjs +7 -7
- package/dist/modules/hookmovies/index.d.cts +1 -1
- package/dist/modules/hookmovies/index.d.ts +1 -1
- package/dist/modules/hookmovies/index.js +1 -1
- package/dist/modules/housingvista/index.cjs +7 -7
- package/dist/modules/housingvista/index.d.cts +1 -1
- package/dist/modules/housingvista/index.d.ts +1 -1
- package/dist/modules/housingvista/index.js +1 -1
- package/dist/modules/integrations/index.cjs +5 -5
- package/dist/modules/integrations/index.d.cts +1 -1
- package/dist/modules/integrations/index.d.ts +1 -1
- package/dist/modules/integrations/index.js +1 -1
- package/dist/modules/intelwatchtower/index.cjs +4 -4
- package/dist/modules/intelwatchtower/index.d.cts +1 -1
- package/dist/modules/intelwatchtower/index.d.ts +1 -1
- package/dist/modules/intelwatchtower/index.js +1 -1
- package/dist/modules/kadaikodi/index.cjs +2 -2
- package/dist/modules/kadaikodi/index.d.cts +1 -1
- package/dist/modules/kadaikodi/index.d.ts +1 -1
- package/dist/modules/kadaikodi/index.js +1 -1
- package/dist/modules/labsofscience/index.cjs +4 -4
- package/dist/modules/labsofscience/index.d.cts +1 -1
- package/dist/modules/labsofscience/index.d.ts +1 -1
- package/dist/modules/labsofscience/index.js +1 -1
- package/dist/modules/manufacturedops/index.cjs +6 -6
- package/dist/modules/manufacturedops/index.d.cts +1 -1
- package/dist/modules/manufacturedops/index.d.ts +1 -1
- package/dist/modules/manufacturedops/index.js +1 -1
- package/dist/modules/movethewheels/index.cjs +1 -1
- package/dist/modules/movethewheels/index.d.cts +1 -1
- package/dist/modules/movethewheels/index.d.ts +1 -1
- package/dist/modules/movethewheels/index.js +1 -1
- package/dist/modules/mybodyshield/index.cjs +6 -6
- package/dist/modules/mybodyshield/index.d.cts +1 -1
- package/dist/modules/mybodyshield/index.d.ts +1 -1
- package/dist/modules/mybodyshield/index.js +1 -1
- package/dist/modules/notifications/index.cjs +5 -5
- package/dist/modules/notifications/index.d.cts +1 -1
- package/dist/modules/notifications/index.d.ts +1 -1
- package/dist/modules/notifications/index.js +1 -1
- package/dist/modules/organizations/index.d.cts +1 -1
- package/dist/modules/organizations/index.d.ts +1 -1
- package/dist/modules/organizations/index.js +1 -1
- package/dist/modules/planmagnet/index.cjs +204 -225
- package/dist/modules/planmagnet/index.d.cts +1 -1
- package/dist/modules/planmagnet/index.d.ts +1 -1
- package/dist/modules/planmagnet/index.js +173 -194
- package/dist/modules/products/index.cjs +4 -4
- package/dist/modules/products/index.d.cts +1 -1
- package/dist/modules/products/index.d.ts +1 -1
- package/dist/modules/products/index.js +1 -1
- package/dist/modules/proserviceworld/index.cjs +2 -2
- package/dist/modules/proserviceworld/index.d.cts +1 -1
- package/dist/modules/proserviceworld/index.d.ts +1 -1
- package/dist/modules/proserviceworld/index.js +1 -1
- package/dist/modules/rbac/index.cjs +2 -2
- package/dist/modules/rbac/index.d.cts +1 -1
- package/dist/modules/rbac/index.d.ts +1 -1
- package/dist/modules/rbac/index.js +1 -1
- package/dist/modules/sandbox/index.cjs +4 -4
- package/dist/modules/sandbox/index.d.cts +1 -1
- package/dist/modules/sandbox/index.d.ts +1 -1
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs +5 -5
- package/dist/modules/scheduler/index.d.cts +1 -1
- package/dist/modules/scheduler/index.d.ts +1 -1
- package/dist/modules/scheduler/index.js +1 -1
- package/dist/modules/security/index.cjs +7 -7
- package/dist/modules/security/index.d.cts +1 -1
- package/dist/modules/security/index.d.ts +1 -1
- package/dist/modules/security/index.js +1 -1
- package/dist/modules/semanticfed/index.cjs +7 -7
- package/dist/modules/semanticfed/index.d.cts +1 -1
- package/dist/modules/semanticfed/index.d.ts +1 -1
- package/dist/modules/semanticfed/index.js +1 -1
- package/dist/modules/store/index.cjs +7 -7
- package/dist/modules/store/index.d.cts +1 -1
- package/dist/modules/store/index.d.ts +1 -1
- package/dist/modules/store/index.js +1 -1
- package/dist/modules/subscriberbot/index.cjs +2 -2
- package/dist/modules/subscriberbot/index.d.cts +1 -1
- package/dist/modules/subscriberbot/index.d.ts +1 -1
- package/dist/modules/subscriberbot/index.js +1 -1
- package/dist/modules/support/index.cjs +2 -2
- package/dist/modules/support/index.d.cts +1 -1
- package/dist/modules/support/index.d.ts +1 -1
- package/dist/modules/support/index.js +1 -1
- package/dist/modules/tags/index.cjs +2 -2
- package/dist/modules/tags/index.d.cts +1 -1
- package/dist/modules/tags/index.d.ts +1 -1
- package/dist/modules/tags/index.js +1 -1
- package/dist/modules/technospam/index.cjs +4 -4
- package/dist/modules/technospam/index.d.cts +1 -1
- package/dist/modules/technospam/index.d.ts +1 -1
- package/dist/modules/technospam/index.js +1 -1
- package/dist/modules/theculturepost/index.cjs +3 -3
- package/dist/modules/theculturepost/index.d.cts +1 -1
- package/dist/modules/theculturepost/index.d.ts +1 -1
- package/dist/modules/theculturepost/index.js +1 -1
- package/dist/modules/theglobalfuel/index.cjs +3 -3
- package/dist/modules/theglobalfuel/index.d.cts +1 -1
- package/dist/modules/theglobalfuel/index.d.ts +1 -1
- package/dist/modules/theglobalfuel/index.js +1 -1
- package/dist/modules/timecampus/index.cjs +7 -7
- package/dist/modules/timecampus/index.d.cts +1 -1
- package/dist/modules/timecampus/index.d.ts +1 -1
- package/dist/modules/timecampus/index.js +1 -1
- package/dist/modules/tours/index.cjs +2 -2
- package/dist/modules/tours/index.d.cts +1 -1
- package/dist/modules/tours/index.d.ts +1 -1
- package/dist/modules/tours/index.js +1 -1
- package/dist/modules/vibecontrols/index.cjs +1 -1
- package/dist/modules/vibecontrols/index.d.cts +1 -1
- package/dist/modules/vibecontrols/index.d.ts +1 -1
- package/dist/modules/vibecontrols/index.js +1 -1
- package/dist/modules/workspaces/index.cjs +15 -15
- package/dist/modules/workspaces/index.d.cts +1 -1
- package/dist/modules/workspaces/index.d.ts +1 -1
- package/dist/modules/workspaces/index.js +11 -11
- package/package.json +1 -1
- package/dist/chunk-TCBALVP4.js +0 -32
- package/dist/chunk-WXDQ3S5J.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var l=class extends Error{exitCode;hint;constructor(r,t){super(r),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},w=class extends l{constructor(r,t){super(r,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(r,t){super(r),this.name="CliInternalError",this.cause=t;}};var A=null;function S(i){A=i;}function
|
|
1
|
+
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var l=class extends Error{exitCode;hint;constructor(r,t){super(r),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},w=class extends l{constructor(r,t){super(r,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(r,t){super(r),this.name="CliInternalError",this.cause=t;}};var A=null;function S(i){A=i;}function h(){if(!A)throw new I("vibecontrols module helpers used before setHelpersContext was called");return A}function _t(){let i=h();if(!i.auth.isAuthenticated())throw new w("Authentication required.",{hint:`Run \`${i.productName} auth login\` to authenticate.`})}async function a(i,r){return _t(),h().gql.workspace.request(i,r)}async function v(i,r){return h().gql.workspaceAuthOnly.request(i,r)}function o(i){let r=i instanceof Error?i.message:String(i);throw new l(r)}function s(i,r,t){h().output.formatAndOutput(i,r,t);}function u(i){h().output.printSuccess(i);}function g(i){return h().output.formatDate(i)}function c(i,r){return h().output.truncate(i,r)}var R=`
|
|
2
2
|
query SubGetProvider($id: ID!) {
|
|
3
3
|
subProvider(id: $id) {
|
|
4
4
|
id name slug description category status industry language region
|
|
@@ -322,4 +322,4 @@
|
|
|
322
322
|
query SubHealth {
|
|
323
323
|
subHealth
|
|
324
324
|
}
|
|
325
|
-
`;function h(i,r){try{return JSON.parse(r)}catch{throw new l(`--${i} must be valid JSON`)}}function p(i){let r=Number.parseInt(i,10);if(Number.isNaN(r))throw new l(`Expected an integer but got "${i}"`);return r}function f(i){let r=Number.parseFloat(i);if(Number.isNaN(r))throw new l(`Expected a number but got "${i}"`);return r}function b(i){return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function mt(i){let r=i.command("providers").description("SubscriberBot provider registry (vendors / publishers / services)");r.command("list").description("List / search providers in the registry").option("--category <c>","Filter by provider category").option("--status <s>","Filter by provider status").option("--search <q>","Free-text search").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(x,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,search:t.search,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListProviders.items,{headers:["ID","Name","Category","Status","Region","Churn"],rows:e.subListProviders.items.map(n=>[c(n.id,12),n.name,n.category,n.status,n.region??"-",n.churnRiskScore!=null?String(n.churnRiskScore):"-"])});}catch(e){o(e);}}),r.command("get").description("Get a provider by id").argument("<id>","Provider ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(R,{id:t});if(!n.subProvider)throw new l(`Provider ${t} not found`);s(e,n.subProvider);}catch(n){o(n);}}),r.command("create").description("Create a provider").requiredOption("--name <name>","Provider name").option("--category <c>","Provider category","OTHER").option("--status <s>","Provider status","UNVERIFIED").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--industry <s>","Industry").option("--language <s>","Language").option("--region <s>","Region").option("--website-url <url>","Website URL").option("--logo-file-id <id>","Logo file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"OTHER").toUpperCase(),status:(t.status??"UNVERIFIED").toUpperCase()};t.slug&&(e.slug=t.slug),t.description&&(e.description=t.description),t.industry&&(e.industry=t.industry),t.language&&(e.language=t.language),t.region&&(e.region=t.region),t.websiteUrl&&(e.websiteUrl=t.websiteUrl),t.logoFileId&&(e.logoFileId=t.logoFileId),t.tags&&(e.tags=b(t.tags));let n=await a(T,{input:e});u(`Provider created: ${n.subCreateProvider.name}`),s(t,n.subCreateProvider);}catch(e){o(e);}}),r.command("update").description("Update a provider").argument("<id>","Provider ID").option("--name <name>","Provider name").option("--category <c>","Provider category").option("--status <s>","Provider status").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--industry <s>","Industry").option("--language <s>","Language").option("--region <s>","Region").option("--website-url <url>","Website URL").option("--logo-file-id <id>","Logo file ID").option("--churn-risk-score <n>","Churn risk score",p).option("--vendor-health-score <n>","Vendor health score",p).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.category&&(n.category=e.category.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.slug&&(n.slug=e.slug),e.description!==void 0&&(n.description=e.description),e.industry&&(n.industry=e.industry),e.language&&(n.language=e.language),e.region&&(n.region=e.region),e.websiteUrl&&(n.websiteUrl=e.websiteUrl),e.logoFileId&&(n.logoFileId=e.logoFileId),e.churnRiskScore!==void 0&&(n.churnRiskScore=e.churnRiskScore),e.vendorHealthScore!==void 0&&(n.vendorHealthScore=e.vendorHealthScore),e.tags&&(n.tags=b(e.tags)),!Object.keys(n).length)throw new l("No updates specified");let C=await a(O,{id:t,input:n});u("Provider updated"),s(e,C.subUpdateProvider);}catch(n){o(n);}}),r.command("archive").description("Archive (soft-delete) a provider").argument("<id>","Provider ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(L,{id:t});u(`Provider ${t} archived`),s(e,{archived:n.subArchiveProvider});}catch(n){o(n);}});}function gt(i){let r=i.command("plans").description("SubscriberBot provider plans");r.command("list").description("List plans (optionally filtered by provider)").option("--provider <id>","Filter by provider ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{providerId:t.provider});s(t,e.subListPlans,{headers:["ID","Name","Amount","Currency","Interval","Active"],rows:e.subListPlans.map(n=>[c(n.id,12),n.name,String(n.amount),n.currency,n.interval,n.isActive?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create a plan for a provider").requiredOption("--provider <id>","Provider ID").requiredOption("--name <name>","Plan name").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval","MONTHLY").option("--description <s>","Description").option("--features <csv>","Comma-separated feature list").option("-f, --format <format>","Output format").action(async t=>{try{let e={providerId:t.provider,name:t.name,interval:(t.interval??"MONTHLY").toUpperCase()};t.amount!==void 0&&(e.amount=t.amount),t.currency&&(e.currency=t.currency),t.description&&(e.description=t.description),t.features&&(e.features=b(t.features));let n=await a(D,{input:e});u(`Plan created: ${n.subCreatePlan.name}`),s(t,n.subCreatePlan);}catch(e){o(e);}});}function ft(i){let r=i.command("relationships").description("SubscriberBot subscriptions, memberships & recurring relationships");r.command("list").description("List relationships").option("--kind <k>","Filter by relationship kind").option("--owner <id>","Filter by owner ID").option("--provider <id>","Filter by provider ID").option("--status <s>","Filter by relationship status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(N,{kind:t.kind?t.kind.toUpperCase():void 0,ownerId:t.owner,providerId:t.provider,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListRelationships.items,{headers:["ID","Label","Kind","Status","Amount","Renews"],rows:e.subListRelationships.items.map(n=>[c(n.id,12),n.label,n.kind,n.status,`${n.amount} ${n.currency}`,g(n.renewsAt)])});}catch(e){o(e);}}),r.command("get").description("Get a relationship by id").argument("<id>","Relationship ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a($,{id:t});if(!n.subRelationship)throw new l(`Relationship ${t} not found`);s(e,n.subRelationship);}catch(n){o(n);}}),r.command("create").description("Create a relationship (subscription / membership / \u2026)").requiredOption("--label <label>","Human-readable label").option("--kind <k>","Relationship kind","SUBSCRIPTION").option("--status <s>","Relationship status","ACTIVE").option("--owner <id>","Owner ID").option("--provider <id>","Provider ID").option("--plan <id>","Plan ID").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval","MONTHLY").option("--discovery-source <s>","Discovery source","MANUAL").option("--no-auto-renew","Disable auto-renew").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("--started-at <iso>","Started at (ISO date)").option("--renews-at <iso>","Renews at (ISO date)").option("--trial-ends-at <iso>","Trial end (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={label:t.label,kind:(t.kind??"SUBSCRIPTION").toUpperCase(),status:(t.status??"ACTIVE").toUpperCase(),interval:(t.interval??"MONTHLY").toUpperCase(),discoverySource:(t.discoverySource??"MANUAL").toUpperCase(),autoRenew:t.autoRenew!==!1};t.owner&&(e.ownerId=t.owner),t.provider&&(e.providerId=t.provider),t.plan&&(e.planId=t.plan),t.amount!==void 0&&(e.amount=t.amount),t.currency&&(e.currency=t.currency),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=b(t.tags)),t.startedAt&&(e.startedAt=t.startedAt),t.renewsAt&&(e.renewsAt=t.renewsAt),t.trialEndsAt&&(e.trialEndsAt=t.trialEndsAt);let n=await a(_,{input:e});u(`Relationship created: ${n.subCreateRelationship.label}`),s(t,n.subCreateRelationship);}catch(e){o(e);}}),r.command("update").description("Update a relationship").argument("<id>","Relationship ID").option("--label <label>","Label").option("--kind <k>","Relationship kind").option("--provider <id>","Provider ID").option("--plan <id>","Plan ID").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval").option("--auto-renew <bool>","true|false",t=>t==="true").option("--health-score <n>","Health score",p).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("--started-at <iso>","Started at (ISO date)").option("--renews-at <iso>","Renews at (ISO date)").option("--trial-ends-at <iso>","Trial end (ISO date)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.label&&(n.label=e.label),e.kind&&(n.kind=e.kind.toUpperCase()),e.provider&&(n.providerId=e.provider),e.plan&&(n.planId=e.plan),e.amount!==void 0&&(n.amount=e.amount),e.currency&&(n.currency=e.currency),e.interval&&(n.interval=e.interval.toUpperCase()),e.autoRenew!==void 0&&(n.autoRenew=e.autoRenew),e.healthScore!==void 0&&(n.healthScore=e.healthScore),e.notes!==void 0&&(n.notes=e.notes),e.tags&&(n.tags=b(e.tags)),e.startedAt&&(n.startedAt=e.startedAt),e.renewsAt&&(n.renewsAt=e.renewsAt),e.trialEndsAt&&(n.trialEndsAt=e.trialEndsAt),!Object.keys(n).length)throw new l("No updates specified");let C=await a(q,{id:t,input:n});u("Relationship updated"),s(e,C.subUpdateRelationship);}catch(n){o(n);}}),r.command("cancel").description("Cancel a relationship").argument("<id>","Relationship ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t});u(`Relationship cancelled: ${n.subCancelRelationship.label}`),s(e,n.subCancelRelationship);}catch(n){o(n);}}),r.command("transition").description("Advance a relationship through its lifecycle").argument("<id>","Relationship ID").requiredOption("--status <s>","ACTIVE|TRIAL|PAST_DUE|PAUSED|CANCELLED|EXPIRED|LAPSED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(U,{id:t,status:e.status.toUpperCase()});u(`Relationship status set to ${n.subTransitionRelationship.status}`),s(e,n.subTransitionRelationship);}catch(n){o(n);}}),r.command("renewals").description("List renewal events").option("--relationship <id>","Filter by relationship ID").option("--upcoming-only","Only upcoming events").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(W,{relationshipId:t.relationship,upcomingOnly:t.upcomingOnly?!0:void 0});s(t,e.subListRenewalEvents,{headers:["ID","Relationship","Type","Amount","Occurs","Notified"],rows:e.subListRenewalEvents.map(n=>[c(n.id,12),c(n.relationshipId,12),n.eventType,n.amount!=null?`${n.amount} ${n.currency??""}`.trim():"-",g(n.occursAt),n.notified?"yes":"no"])});}catch(e){o(e);}});}function bt(i){let r=i.command("assets").description("SubscriberBot relationship assets (contracts, licenses, credentials, \u2026)");r.command("list").description("List assets for a relationship").requiredOption("--relationship <id>","Relationship ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(F,{relationshipId:t.relationship});s(t,e.subListAssets,{headers:["ID","Name","Type","Secret","Expires"],rows:e.subListAssets.map(n=>[c(n.id,12),n.name,n.type,n.secretRef?"yes":"no",g(n.expiresAt)])});}catch(e){o(e);}}),r.command("create").description("Create an asset on a relationship").requiredOption("--relationship <id>","Relationship ID").requiredOption("--name <name>","Asset name").option("--type <t>","Asset type","RECEIPT").option("--file-id <id>","Referenced file ID (blob lives in wspace-files-svc)").option("--secret-ref <ref>","Secret reference").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,name:t.name,type:(t.type??"RECEIPT").toUpperCase()};t.fileId&&(e.fileId=t.fileId),t.secretRef&&(e.secretRef=t.secretRef),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(G,{input:e});u(`Asset created: ${n.subCreateAsset.name}`),s(t,n.subCreateAsset);}catch(e){o(e);}});}function It(i){let r=i.command("entitlements").description("SubscriberBot relationship entitlements (seats, quotas, features, \u2026)");r.command("list").description("List entitlements for a relationship").requiredOption("--relationship <id>","Relationship ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(H,{relationshipId:t.relationship});s(t,e.subListEntitlements,{headers:["ID","Name","Type","Used","Quota","Active"],rows:e.subListEntitlements.map(n=>[c(n.id,12),n.name,n.type,String(n.used),n.quota!=null?String(n.quota):"-",n.isActive?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create an entitlement on a relationship").requiredOption("--relationship <id>","Relationship ID").requiredOption("--name <name>","Entitlement name").option("--type <t>","Entitlement type","FEATURE_ACCESS").option("--description <s>","Description").option("--quota <n>","Quota",p).option("--unit <u>","Quota unit").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,name:t.name,type:(t.type??"FEATURE_ACCESS").toUpperCase()};t.description&&(e.description=t.description),t.quota!==void 0&&(e.quota=t.quota),t.unit&&(e.unit=t.unit);let n=await a(V,{input:e});u(`Entitlement created: ${n.subCreateEntitlement.name}`),s(t,n.subCreateEntitlement);}catch(e){o(e);}});}function yt(i){let r=i.command("invoices").description("SubscriberBot invoices");r.command("list").description("List invoices").option("--relationship <id>","Filter by relationship ID").option("--status <s>","Filter by invoice status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{relationshipId:t.relationship,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListInvoices.items,{headers:["ID","Number","Status","Total","Currency","Due"],rows:e.subListInvoices.items.map(n=>[c(n.id,12),n.number??"-",n.status,String(n.total),n.currency,g(n.dueDate)])});}catch(e){o(e);}}),r.command("create").description("Create an invoice on a relationship").requiredOption("--relationship <id>","Relationship ID").option("--number <n>","Invoice number").option("--status <s>","Invoice status","ISSUED").option("--currency <c>","Currency code").option("--subtotal <n>","Subtotal",f).option("--tax-amount <n>","Tax amount",f).option("--total <n>","Total",f).option("--line-items <json>","Line items JSON").option("--issue-date <iso>","Issue date (ISO date)").option("--due-date <iso>","Due date (ISO date)").option("--payment-instrument <id>","Payment instrument ID").option("--file-id <id>","Referenced file ID (invoice PDF in wspace-files-svc)").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,status:(t.status??"ISSUED").toUpperCase()};t.number&&(e.number=t.number),t.currency&&(e.currency=t.currency),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=h("line-items",t.lineItems)),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.paymentInstrument&&(e.paymentInstrumentId=t.paymentInstrument),t.fileId&&(e.fileId=t.fileId);let n=await a(B,{input:e});u(`Invoice created: ${n.subCreateInvoice.number??n.subCreateInvoice.id}`),s(t,n.subCreateInvoice);}catch(e){o(e);}}),r.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Y,{id:t});u(`Invoice marked paid: ${n.subMarkInvoicePaid.number??n.subMarkInvoicePaid.id}`),s(e,n.subMarkInvoicePaid);}catch(n){o(n);}});}function ht(i){let r=i.command("payment-instruments").description("SubscriberBot payment instruments (cards, wallets, bank accounts, \u2026)");r.command("list").description("List payment instruments").option("--owner <id>","Filter by owner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{ownerId:t.owner});s(t,e.subListPaymentInstruments,{headers:["ID","Label","Type","Status","Brand","Last4","Default"],rows:e.subListPaymentInstruments.map(n=>[c(n.id,12),n.label,n.type,n.status,n.brand??"-",n.last4??"-",n.isDefault?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Add a payment instrument").requiredOption("--label <label>","Label").option("--type <t>","Payment instrument type","CARD").option("--owner <id>","Owner ID").option("--brand <b>","Card/instrument brand").option("--last4 <n>","Last 4 digits").option("--expiry-month <n>","Expiry month",p).option("--expiry-year <n>","Expiry year",p).option("--processor-token <t>","Processor token").option("--default","Mark as default").option("-f, --format <format>","Output format").action(async t=>{try{let e={label:t.label,type:(t.type??"CARD").toUpperCase(),isDefault:t.default===!0};t.owner&&(e.ownerId=t.owner),t.brand&&(e.brand=t.brand),t.last4&&(e.last4=t.last4),t.expiryMonth!==void 0&&(e.expiryMonth=t.expiryMonth),t.expiryYear!==void 0&&(e.expiryYear=t.expiryYear),t.processorToken&&(e.processorToken=t.processorToken);let n=await a(z,{input:e});u(`Payment instrument added: ${n.subCreatePaymentInstrument.label}`),s(t,n.subCreatePaymentInstrument);}catch(e){o(e);}}),r.command("remove").description("Remove a payment instrument").argument("<id>","Payment instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});u(`Payment instrument ${t} removed`),s(e,{removed:n.subRemovePaymentInstrument});}catch(n){o(n);}});}function wt(i){let r=i.command("channels").description("SubscriberBot communication channels (email, sms, slack, webhook, \u2026)");r.command("list").description("List communication channels").option("--owner <id>","Filter by owner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Q,{ownerId:t.owner});s(t,e.subListChannels,{headers:["ID","Type","Address","Label","Status","Ingest"],rows:e.subListChannels.map(n=>[c(n.id,12),n.type,n.address,n.label??"-",n.status,n.ingestEnabled?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create a communication channel").requiredOption("--address <addr>","Channel address (email, phone, webhook URL, \u2026)").option("--type <t>","Channel type","EMAIL").option("--owner <id>","Owner ID").option("--label <label>","Label").option("--no-ingest","Disable message ingestion").option("-f, --format <format>","Output format").action(async t=>{try{let e={address:t.address,type:(t.type??"EMAIL").toUpperCase(),ingestEnabled:t.ingest!==!1};t.owner&&(e.ownerId=t.owner),t.label&&(e.label=t.label);let n=await a(X,{input:e});u(`Channel created: ${n.subCreateChannel.address}`),s(t,n.subCreateChannel);}catch(e){o(e);}}),r.command("verify").description("Mark a channel as verified").argument("<id>","Channel ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Z,{id:t});u(`Channel verified: ${n.subVerifyChannel.address}`),s(e,n.subVerifyChannel);}catch(n){o(n);}});}function Ct(i){let r=i.command("inbox").description("SubscriberBot universal inbox (merged subscription communications)");r.command("list").description("List inbox messages").option("--category <c>","Filter by message category").option("--channel <id>","Filter by channel ID").option("--relationship <id>","Filter by relationship ID").option("--unread-only","Only unread messages").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(tt,{category:t.category?t.category.toUpperCase():void 0,channelId:t.channel,relationshipId:t.relationship,unreadOnly:t.unreadOnly?!0:void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListInboxMessages.items,{headers:["ID","Subject","Category","Read","Action","Received"],rows:e.subListInboxMessages.items.map(n=>[c(n.id,12),c(n.subject??"-",30),n.category,n.isRead?"yes":"no",n.actionRequired?"yes":"no",g(n.receivedAt)])});}catch(e){o(e);}}),r.command("ingest").description("Ingest a message into the universal inbox").requiredOption("--channel <id>","Channel ID").requiredOption("--received-at <iso>","Received at (ISO date)").option("--category <c>","Message category","OTHER").option("--relationship <id>","Relationship ID").option("--subject <s>","Subject").option("--preview <s>","Preview text").option("--external-id <id>","External message ID").option("--category-confidence <n>","Category confidence (0-100)",p).option("--action-required","Flag as action required").option("-f, --format <format>","Output format").action(async t=>{try{let e={channelId:t.channel,receivedAt:t.receivedAt,category:(t.category??"OTHER").toUpperCase(),actionRequired:t.actionRequired===!0};t.relationship&&(e.relationshipId=t.relationship),t.subject&&(e.subject=t.subject),t.preview&&(e.preview=t.preview),t.externalId&&(e.externalId=t.externalId),t.categoryConfidence!==void 0&&(e.categoryConfidence=t.categoryConfidence);let n=await a(et,{input:e});u(`Message ingested: ${n.subIngestMessage.id}`),s(t,n.subIngestMessage);}catch(e){o(e);}}),r.command("mark-read").description("Mark a message as read").argument("<id>","Message ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(nt,{id:t});u(`Message ${t} marked read`),s(e,n.subMarkMessageRead);}catch(n){o(n);}});}function At(i){let r=i.command("agents").description("SubscriberBot AI agents & their automation policies");r.command("list").description("List AI agents").option("--kind <k>","Filter by agent kind").option("--owner <id>","Filter by owner ID").option("--status <s>","Filter by agent status").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(it,{kind:t.kind?t.kind.toUpperCase():void 0,ownerId:t.owner,status:t.status?t.status.toUpperCase():void 0});s(t,e.subListAgents,{headers:["ID","Name","Kind","Status","Description"],rows:e.subListAgents.map(n=>[c(n.id,12),n.name,n.kind,n.status,c(n.description??"-",30)])});}catch(e){o(e);}}),r.command("get").description("Get an agent by id").argument("<id>","Agent ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(rt,{id:t});if(!n.subAgent)throw new l(`Agent ${t} not found`);s(e,n.subAgent);}catch(n){o(n);}}),r.command("create").description("Create an AI agent").requiredOption("--name <name>","Agent name").option("--kind <k>","Agent kind","DISCOVERY").option("--status <s>","Agent status","SUGGEST_ONLY").option("--owner <id>","Owner ID").option("--description <s>","Description").option("--config <json>","Agent config JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"DISCOVERY").toUpperCase(),status:(t.status??"SUGGEST_ONLY").toUpperCase()};t.owner&&(e.ownerId=t.owner),t.description&&(e.description=t.description),t.config&&(e.config=h("config",t.config));let n=await a(ot,{input:e});u(`Agent created: ${n.subCreateAgent.name}`),s(t,n.subCreateAgent);}catch(e){o(e);}}),r.command("set-status").description("Change an agent's operating posture").argument("<id>","Agent ID").requiredOption("--status <s>","DISABLED|SUGGEST_ONLY|AUTONOMOUS").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(st,{id:t,status:e.status.toUpperCase()});u(`Agent status set to ${n.subSetAgentStatus.status}`),s(e,n.subSetAgentStatus);}catch(n){o(n);}}),r.command("list-policies").description("List policies (optionally filtered by agent)").option("--agent <id>","Filter by agent ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(at,{agentId:t.agent});s(t,e.subListPolicies,{headers:["ID","Name","Action","Enabled","Triggers"],rows:e.subListPolicies.map(n=>[c(n.id,12),n.name,n.action,n.isEnabled?"yes":"no",String(n.triggerCount??0)])});}catch(e){o(e);}}),r.command("create-policy").description("Create an automation policy for an agent").requiredOption("--agent <id>","Agent ID").requiredOption("--name <name>","Policy name").option("--action <a>","Policy action","ALERT").option("--description <s>","Description").option("--condition <json>","Condition JSON").option("--no-enabled","Create disabled").option("-f, --format <format>","Output format").action(async t=>{try{let e={agentId:t.agent,name:t.name,action:(t.action??"ALERT").toUpperCase(),isEnabled:t.enabled!==!1};t.description&&(e.description=t.description),t.condition&&(e.condition=h("condition",t.condition));let n=await a(ut,{input:e});u(`Policy created: ${n.subCreatePolicy.name}`),s(t,n.subCreatePolicy);}catch(e){o(e);}});}function vt(i){let r=i.command("workflows").description("SubscriberBot automation workflows");r.command("list").description("List workflows").option("--status <s>","Filter by workflow status").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(ct,{status:t.status?t.status.toUpperCase():void 0});s(t,e.subListWorkflows,{headers:["ID","Name","Trigger","Status","Runs"],rows:e.subListWorkflows.map(n=>[c(n.id,12),n.name,n.triggerEvent,n.status,String(n.runCount??0)])});}catch(e){o(e);}}),r.command("create").description("Create a workflow").requiredOption("--name <name>","Workflow name").requiredOption("--trigger-event <e>","Trigger event").option("--description <s>","Description").option("--steps <json>","Steps JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,triggerEvent:t.triggerEvent};t.description&&(e.description=t.description),t.steps&&(e.steps=h("steps",t.steps));let n=await a(dt,{input:e});u(`Workflow created: ${n.subCreateWorkflow.name}`),s(t,n.subCreateWorkflow);}catch(e){o(e);}}),r.command("activate").description("Activate a workflow").argument("<id>","Workflow ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(pt,{id:t});u(`Workflow activated: ${n.subActivateWorkflow.name}`),s(e,n.subActivateWorkflow);}catch(n){o(n);}});}function Et(i){i.command("health").description("SubscriberBot service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await v(lt);u(t.subHealth),s(r,{health:t.subHealth});}catch(t){o(t);}});}var qt={id:"subscriberbot",version:"1.0.0",displayName:"SubscriberBot",dependsOn:["auth","workspaces"],register(i,r){S(r);let t=i.command("subscriberbot").description("SubscriberBot universal subscription & relationship management");mt(t),gt(t),ft(t),bt(t),It(t),yt(t),ht(t),wt(t),Ct(t),At(t),vt(t),Et(t);}},Gn=qt;module.exports=Gn;
|
|
325
|
+
`;function y(i,r){try{return JSON.parse(r)}catch{throw new l(`--${i} must be valid JSON`)}}function p(i){let r=Number.parseInt(i,10);if(Number.isNaN(r))throw new l(`Expected an integer but got "${i}"`);return r}function f(i){let r=Number.parseFloat(i);if(Number.isNaN(r))throw new l(`Expected a number but got "${i}"`);return r}function b(i){return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function mt(i){let r=i.command("providers").description("SubscriberBot provider registry (vendors / publishers / services)");r.command("list").description("List / search providers in the registry").option("--category <c>","Filter by provider category").option("--status <s>","Filter by provider status").option("--search <q>","Free-text search").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(x,{category:t.category?t.category.toUpperCase():void 0,status:t.status?t.status.toUpperCase():void 0,search:t.search,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListProviders.items,{headers:["ID","Name","Category","Status","Region","Churn"],rows:e.subListProviders.items.map(n=>[c(n.id,12),n.name,n.category,n.status,n.region??"-",n.churnRiskScore!=null?String(n.churnRiskScore):"-"])});}catch(e){o(e);}}),r.command("get").description("Get a provider by id").argument("<id>","Provider ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(R,{id:t});if(!n.subProvider)throw new l(`Provider ${t} not found`);s(e,n.subProvider);}catch(n){o(n);}}),r.command("create").description("Create a provider").requiredOption("--name <name>","Provider name").option("--category <c>","Provider category","OTHER").option("--status <s>","Provider status","UNVERIFIED").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--industry <s>","Industry").option("--language <s>","Language").option("--region <s>","Region").option("--website-url <url>","Website URL").option("--logo-file-id <id>","Logo file ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,category:(t.category??"OTHER").toUpperCase(),status:(t.status??"UNVERIFIED").toUpperCase()};t.slug&&(e.slug=t.slug),t.description&&(e.description=t.description),t.industry&&(e.industry=t.industry),t.language&&(e.language=t.language),t.region&&(e.region=t.region),t.websiteUrl&&(e.websiteUrl=t.websiteUrl),t.logoFileId&&(e.logoFileId=t.logoFileId),t.tags&&(e.tags=b(t.tags));let n=await a(T,{input:e});u(`Provider created: ${n.subCreateProvider.name}`),s(t,n.subCreateProvider);}catch(e){o(e);}}),r.command("update").description("Update a provider").argument("<id>","Provider ID").option("--name <name>","Provider name").option("--category <c>","Provider category").option("--status <s>","Provider status").option("--slug <slug>","URL slug").option("--description <s>","Description").option("--industry <s>","Industry").option("--language <s>","Language").option("--region <s>","Region").option("--website-url <url>","Website URL").option("--logo-file-id <id>","Logo file ID").option("--churn-risk-score <n>","Churn risk score",p).option("--vendor-health-score <n>","Vendor health score",p).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.category&&(n.category=e.category.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.slug&&(n.slug=e.slug),e.description!==void 0&&(n.description=e.description),e.industry&&(n.industry=e.industry),e.language&&(n.language=e.language),e.region&&(n.region=e.region),e.websiteUrl&&(n.websiteUrl=e.websiteUrl),e.logoFileId&&(n.logoFileId=e.logoFileId),e.churnRiskScore!==void 0&&(n.churnRiskScore=e.churnRiskScore),e.vendorHealthScore!==void 0&&(n.vendorHealthScore=e.vendorHealthScore),e.tags&&(n.tags=b(e.tags)),!Object.keys(n).length)throw new l("No updates specified");let C=await a(O,{id:t,input:n});u("Provider updated"),s(e,C.subUpdateProvider);}catch(n){o(n);}}),r.command("archive").description("Archive (soft-delete) a provider").argument("<id>","Provider ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(L,{id:t});u(`Provider ${t} archived`),s(e,{archived:n.subArchiveProvider});}catch(n){o(n);}});}function gt(i){let r=i.command("plans").description("SubscriberBot provider plans");r.command("list").description("List plans (optionally filtered by provider)").option("--provider <id>","Filter by provider ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{providerId:t.provider});s(t,e.subListPlans,{headers:["ID","Name","Amount","Currency","Interval","Active"],rows:e.subListPlans.map(n=>[c(n.id,12),n.name,String(n.amount),n.currency,n.interval,n.isActive?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create a plan for a provider").requiredOption("--provider <id>","Provider ID").requiredOption("--name <name>","Plan name").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval","MONTHLY").option("--description <s>","Description").option("--features <csv>","Comma-separated feature list").option("-f, --format <format>","Output format").action(async t=>{try{let e={providerId:t.provider,name:t.name,interval:(t.interval??"MONTHLY").toUpperCase()};t.amount!==void 0&&(e.amount=t.amount),t.currency&&(e.currency=t.currency),t.description&&(e.description=t.description),t.features&&(e.features=b(t.features));let n=await a(D,{input:e});u(`Plan created: ${n.subCreatePlan.name}`),s(t,n.subCreatePlan);}catch(e){o(e);}});}function ft(i){let r=i.command("relationships").description("SubscriberBot subscriptions, memberships & recurring relationships");r.command("list").description("List relationships").option("--kind <k>","Filter by relationship kind").option("--owner <id>","Filter by owner ID").option("--provider <id>","Filter by provider ID").option("--status <s>","Filter by relationship status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(N,{kind:t.kind?t.kind.toUpperCase():void 0,ownerId:t.owner,providerId:t.provider,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListRelationships.items,{headers:["ID","Label","Kind","Status","Amount","Renews"],rows:e.subListRelationships.items.map(n=>[c(n.id,12),n.label,n.kind,n.status,`${n.amount} ${n.currency}`,g(n.renewsAt)])});}catch(e){o(e);}}),r.command("get").description("Get a relationship by id").argument("<id>","Relationship ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a($,{id:t});if(!n.subRelationship)throw new l(`Relationship ${t} not found`);s(e,n.subRelationship);}catch(n){o(n);}}),r.command("create").description("Create a relationship (subscription / membership / \u2026)").requiredOption("--label <label>","Human-readable label").option("--kind <k>","Relationship kind","SUBSCRIPTION").option("--status <s>","Relationship status","ACTIVE").option("--owner <id>","Owner ID").option("--provider <id>","Provider ID").option("--plan <id>","Plan ID").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval","MONTHLY").option("--discovery-source <s>","Discovery source","MANUAL").option("--no-auto-renew","Disable auto-renew").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("--started-at <iso>","Started at (ISO date)").option("--renews-at <iso>","Renews at (ISO date)").option("--trial-ends-at <iso>","Trial end (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={label:t.label,kind:(t.kind??"SUBSCRIPTION").toUpperCase(),status:(t.status??"ACTIVE").toUpperCase(),interval:(t.interval??"MONTHLY").toUpperCase(),discoverySource:(t.discoverySource??"MANUAL").toUpperCase(),autoRenew:t.autoRenew!==!1};t.owner&&(e.ownerId=t.owner),t.provider&&(e.providerId=t.provider),t.plan&&(e.planId=t.plan),t.amount!==void 0&&(e.amount=t.amount),t.currency&&(e.currency=t.currency),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=b(t.tags)),t.startedAt&&(e.startedAt=t.startedAt),t.renewsAt&&(e.renewsAt=t.renewsAt),t.trialEndsAt&&(e.trialEndsAt=t.trialEndsAt);let n=await a(_,{input:e});u(`Relationship created: ${n.subCreateRelationship.label}`),s(t,n.subCreateRelationship);}catch(e){o(e);}}),r.command("update").description("Update a relationship").argument("<id>","Relationship ID").option("--label <label>","Label").option("--kind <k>","Relationship kind").option("--provider <id>","Provider ID").option("--plan <id>","Plan ID").option("--amount <n>","Amount",f).option("--currency <c>","Currency code").option("--interval <i>","Billing interval").option("--auto-renew <bool>","true|false",t=>t==="true").option("--health-score <n>","Health score",p).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("--started-at <iso>","Started at (ISO date)").option("--renews-at <iso>","Renews at (ISO date)").option("--trial-ends-at <iso>","Trial end (ISO date)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.label&&(n.label=e.label),e.kind&&(n.kind=e.kind.toUpperCase()),e.provider&&(n.providerId=e.provider),e.plan&&(n.planId=e.plan),e.amount!==void 0&&(n.amount=e.amount),e.currency&&(n.currency=e.currency),e.interval&&(n.interval=e.interval.toUpperCase()),e.autoRenew!==void 0&&(n.autoRenew=e.autoRenew),e.healthScore!==void 0&&(n.healthScore=e.healthScore),e.notes!==void 0&&(n.notes=e.notes),e.tags&&(n.tags=b(e.tags)),e.startedAt&&(n.startedAt=e.startedAt),e.renewsAt&&(n.renewsAt=e.renewsAt),e.trialEndsAt&&(n.trialEndsAt=e.trialEndsAt),!Object.keys(n).length)throw new l("No updates specified");let C=await a(q,{id:t,input:n});u("Relationship updated"),s(e,C.subUpdateRelationship);}catch(n){o(n);}}),r.command("cancel").description("Cancel a relationship").argument("<id>","Relationship ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t});u(`Relationship cancelled: ${n.subCancelRelationship.label}`),s(e,n.subCancelRelationship);}catch(n){o(n);}}),r.command("transition").description("Advance a relationship through its lifecycle").argument("<id>","Relationship ID").requiredOption("--status <s>","ACTIVE|TRIAL|PAST_DUE|PAUSED|CANCELLED|EXPIRED|LAPSED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(U,{id:t,status:e.status.toUpperCase()});u(`Relationship status set to ${n.subTransitionRelationship.status}`),s(e,n.subTransitionRelationship);}catch(n){o(n);}}),r.command("renewals").description("List renewal events").option("--relationship <id>","Filter by relationship ID").option("--upcoming-only","Only upcoming events").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(W,{relationshipId:t.relationship,upcomingOnly:t.upcomingOnly?!0:void 0});s(t,e.subListRenewalEvents,{headers:["ID","Relationship","Type","Amount","Occurs","Notified"],rows:e.subListRenewalEvents.map(n=>[c(n.id,12),c(n.relationshipId,12),n.eventType,n.amount!=null?`${n.amount} ${n.currency??""}`.trim():"-",g(n.occursAt),n.notified?"yes":"no"])});}catch(e){o(e);}});}function bt(i){let r=i.command("assets").description("SubscriberBot relationship assets (contracts, licenses, credentials, \u2026)");r.command("list").description("List assets for a relationship").requiredOption("--relationship <id>","Relationship ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(F,{relationshipId:t.relationship});s(t,e.subListAssets,{headers:["ID","Name","Type","Secret","Expires"],rows:e.subListAssets.map(n=>[c(n.id,12),n.name,n.type,n.secretRef?"yes":"no",g(n.expiresAt)])});}catch(e){o(e);}}),r.command("create").description("Create an asset on a relationship").requiredOption("--relationship <id>","Relationship ID").requiredOption("--name <name>","Asset name").option("--type <t>","Asset type","RECEIPT").option("--file-id <id>","Referenced file ID (blob lives in wspace-files-svc)").option("--secret-ref <ref>","Secret reference").option("--expires-at <iso>","Expiry (ISO date)").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,name:t.name,type:(t.type??"RECEIPT").toUpperCase()};t.fileId&&(e.fileId=t.fileId),t.secretRef&&(e.secretRef=t.secretRef),t.expiresAt&&(e.expiresAt=t.expiresAt);let n=await a(G,{input:e});u(`Asset created: ${n.subCreateAsset.name}`),s(t,n.subCreateAsset);}catch(e){o(e);}});}function It(i){let r=i.command("entitlements").description("SubscriberBot relationship entitlements (seats, quotas, features, \u2026)");r.command("list").description("List entitlements for a relationship").requiredOption("--relationship <id>","Relationship ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(H,{relationshipId:t.relationship});s(t,e.subListEntitlements,{headers:["ID","Name","Type","Used","Quota","Active"],rows:e.subListEntitlements.map(n=>[c(n.id,12),n.name,n.type,String(n.used),n.quota!=null?String(n.quota):"-",n.isActive?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create an entitlement on a relationship").requiredOption("--relationship <id>","Relationship ID").requiredOption("--name <name>","Entitlement name").option("--type <t>","Entitlement type","FEATURE_ACCESS").option("--description <s>","Description").option("--quota <n>","Quota",p).option("--unit <u>","Quota unit").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,name:t.name,type:(t.type??"FEATURE_ACCESS").toUpperCase()};t.description&&(e.description=t.description),t.quota!==void 0&&(e.quota=t.quota),t.unit&&(e.unit=t.unit);let n=await a(V,{input:e});u(`Entitlement created: ${n.subCreateEntitlement.name}`),s(t,n.subCreateEntitlement);}catch(e){o(e);}});}function ht(i){let r=i.command("invoices").description("SubscriberBot invoices");r.command("list").description("List invoices").option("--relationship <id>","Filter by relationship ID").option("--status <s>","Filter by invoice status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{relationshipId:t.relationship,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListInvoices.items,{headers:["ID","Number","Status","Total","Currency","Due"],rows:e.subListInvoices.items.map(n=>[c(n.id,12),n.number??"-",n.status,String(n.total),n.currency,g(n.dueDate)])});}catch(e){o(e);}}),r.command("create").description("Create an invoice on a relationship").requiredOption("--relationship <id>","Relationship ID").option("--number <n>","Invoice number").option("--status <s>","Invoice status","ISSUED").option("--currency <c>","Currency code").option("--subtotal <n>","Subtotal",f).option("--tax-amount <n>","Tax amount",f).option("--total <n>","Total",f).option("--line-items <json>","Line items JSON").option("--issue-date <iso>","Issue date (ISO date)").option("--due-date <iso>","Due date (ISO date)").option("--payment-instrument <id>","Payment instrument ID").option("--file-id <id>","Referenced file ID (invoice PDF in wspace-files-svc)").option("-f, --format <format>","Output format").action(async t=>{try{let e={relationshipId:t.relationship,status:(t.status??"ISSUED").toUpperCase()};t.number&&(e.number=t.number),t.currency&&(e.currency=t.currency),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=y("line-items",t.lineItems)),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.paymentInstrument&&(e.paymentInstrumentId=t.paymentInstrument),t.fileId&&(e.fileId=t.fileId);let n=await a(B,{input:e});u(`Invoice created: ${n.subCreateInvoice.number??n.subCreateInvoice.id}`),s(t,n.subCreateInvoice);}catch(e){o(e);}}),r.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Y,{id:t});u(`Invoice marked paid: ${n.subMarkInvoicePaid.number??n.subMarkInvoicePaid.id}`),s(e,n.subMarkInvoicePaid);}catch(n){o(n);}});}function yt(i){let r=i.command("payment-instruments").description("SubscriberBot payment instruments (cards, wallets, bank accounts, \u2026)");r.command("list").description("List payment instruments").option("--owner <id>","Filter by owner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{ownerId:t.owner});s(t,e.subListPaymentInstruments,{headers:["ID","Label","Type","Status","Brand","Last4","Default"],rows:e.subListPaymentInstruments.map(n=>[c(n.id,12),n.label,n.type,n.status,n.brand??"-",n.last4??"-",n.isDefault?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Add a payment instrument").requiredOption("--label <label>","Label").option("--type <t>","Payment instrument type","CARD").option("--owner <id>","Owner ID").option("--brand <b>","Card/instrument brand").option("--last4 <n>","Last 4 digits").option("--expiry-month <n>","Expiry month",p).option("--expiry-year <n>","Expiry year",p).option("--processor-token <t>","Processor token").option("--default","Mark as default").option("-f, --format <format>","Output format").action(async t=>{try{let e={label:t.label,type:(t.type??"CARD").toUpperCase(),isDefault:t.default===!0};t.owner&&(e.ownerId=t.owner),t.brand&&(e.brand=t.brand),t.last4&&(e.last4=t.last4),t.expiryMonth!==void 0&&(e.expiryMonth=t.expiryMonth),t.expiryYear!==void 0&&(e.expiryYear=t.expiryYear),t.processorToken&&(e.processorToken=t.processorToken);let n=await a(z,{input:e});u(`Payment instrument added: ${n.subCreatePaymentInstrument.label}`),s(t,n.subCreatePaymentInstrument);}catch(e){o(e);}}),r.command("remove").description("Remove a payment instrument").argument("<id>","Payment instrument ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(J,{id:t});u(`Payment instrument ${t} removed`),s(e,{removed:n.subRemovePaymentInstrument});}catch(n){o(n);}});}function wt(i){let r=i.command("channels").description("SubscriberBot communication channels (email, sms, slack, webhook, \u2026)");r.command("list").description("List communication channels").option("--owner <id>","Filter by owner ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(Q,{ownerId:t.owner});s(t,e.subListChannels,{headers:["ID","Type","Address","Label","Status","Ingest"],rows:e.subListChannels.map(n=>[c(n.id,12),n.type,n.address,n.label??"-",n.status,n.ingestEnabled?"yes":"no"])});}catch(e){o(e);}}),r.command("create").description("Create a communication channel").requiredOption("--address <addr>","Channel address (email, phone, webhook URL, \u2026)").option("--type <t>","Channel type","EMAIL").option("--owner <id>","Owner ID").option("--label <label>","Label").option("--no-ingest","Disable message ingestion").option("-f, --format <format>","Output format").action(async t=>{try{let e={address:t.address,type:(t.type??"EMAIL").toUpperCase(),ingestEnabled:t.ingest!==!1};t.owner&&(e.ownerId=t.owner),t.label&&(e.label=t.label);let n=await a(X,{input:e});u(`Channel created: ${n.subCreateChannel.address}`),s(t,n.subCreateChannel);}catch(e){o(e);}}),r.command("verify").description("Mark a channel as verified").argument("<id>","Channel ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(Z,{id:t});u(`Channel verified: ${n.subVerifyChannel.address}`),s(e,n.subVerifyChannel);}catch(n){o(n);}});}function Ct(i){let r=i.command("inbox").description("SubscriberBot universal inbox (merged subscription communications)");r.command("list").description("List inbox messages").option("--category <c>","Filter by message category").option("--channel <id>","Filter by channel ID").option("--relationship <id>","Filter by relationship ID").option("--unread-only","Only unread messages").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(tt,{category:t.category?t.category.toUpperCase():void 0,channelId:t.channel,relationshipId:t.relationship,unreadOnly:t.unreadOnly?!0:void 0,pagination:{limit:t.limit,offset:t.offset}});s(t,e.subListInboxMessages.items,{headers:["ID","Subject","Category","Read","Action","Received"],rows:e.subListInboxMessages.items.map(n=>[c(n.id,12),c(n.subject??"-",30),n.category,n.isRead?"yes":"no",n.actionRequired?"yes":"no",g(n.receivedAt)])});}catch(e){o(e);}}),r.command("ingest").description("Ingest a message into the universal inbox").requiredOption("--channel <id>","Channel ID").requiredOption("--received-at <iso>","Received at (ISO date)").option("--category <c>","Message category","OTHER").option("--relationship <id>","Relationship ID").option("--subject <s>","Subject").option("--preview <s>","Preview text").option("--external-id <id>","External message ID").option("--category-confidence <n>","Category confidence (0-100)",p).option("--action-required","Flag as action required").option("-f, --format <format>","Output format").action(async t=>{try{let e={channelId:t.channel,receivedAt:t.receivedAt,category:(t.category??"OTHER").toUpperCase(),actionRequired:t.actionRequired===!0};t.relationship&&(e.relationshipId=t.relationship),t.subject&&(e.subject=t.subject),t.preview&&(e.preview=t.preview),t.externalId&&(e.externalId=t.externalId),t.categoryConfidence!==void 0&&(e.categoryConfidence=t.categoryConfidence);let n=await a(et,{input:e});u(`Message ingested: ${n.subIngestMessage.id}`),s(t,n.subIngestMessage);}catch(e){o(e);}}),r.command("mark-read").description("Mark a message as read").argument("<id>","Message ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(nt,{id:t});u(`Message ${t} marked read`),s(e,n.subMarkMessageRead);}catch(n){o(n);}});}function At(i){let r=i.command("agents").description("SubscriberBot AI agents & their automation policies");r.command("list").description("List AI agents").option("--kind <k>","Filter by agent kind").option("--owner <id>","Filter by owner ID").option("--status <s>","Filter by agent status").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(it,{kind:t.kind?t.kind.toUpperCase():void 0,ownerId:t.owner,status:t.status?t.status.toUpperCase():void 0});s(t,e.subListAgents,{headers:["ID","Name","Kind","Status","Description"],rows:e.subListAgents.map(n=>[c(n.id,12),n.name,n.kind,n.status,c(n.description??"-",30)])});}catch(e){o(e);}}),r.command("get").description("Get an agent by id").argument("<id>","Agent ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(rt,{id:t});if(!n.subAgent)throw new l(`Agent ${t} not found`);s(e,n.subAgent);}catch(n){o(n);}}),r.command("create").description("Create an AI agent").requiredOption("--name <name>","Agent name").option("--kind <k>","Agent kind","DISCOVERY").option("--status <s>","Agent status","SUGGEST_ONLY").option("--owner <id>","Owner ID").option("--description <s>","Description").option("--config <json>","Agent config JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,kind:(t.kind??"DISCOVERY").toUpperCase(),status:(t.status??"SUGGEST_ONLY").toUpperCase()};t.owner&&(e.ownerId=t.owner),t.description&&(e.description=t.description),t.config&&(e.config=y("config",t.config));let n=await a(ot,{input:e});u(`Agent created: ${n.subCreateAgent.name}`),s(t,n.subCreateAgent);}catch(e){o(e);}}),r.command("set-status").description("Change an agent's operating posture").argument("<id>","Agent ID").requiredOption("--status <s>","DISABLED|SUGGEST_ONLY|AUTONOMOUS").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(st,{id:t,status:e.status.toUpperCase()});u(`Agent status set to ${n.subSetAgentStatus.status}`),s(e,n.subSetAgentStatus);}catch(n){o(n);}}),r.command("list-policies").description("List policies (optionally filtered by agent)").option("--agent <id>","Filter by agent ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(at,{agentId:t.agent});s(t,e.subListPolicies,{headers:["ID","Name","Action","Enabled","Triggers"],rows:e.subListPolicies.map(n=>[c(n.id,12),n.name,n.action,n.isEnabled?"yes":"no",String(n.triggerCount??0)])});}catch(e){o(e);}}),r.command("create-policy").description("Create an automation policy for an agent").requiredOption("--agent <id>","Agent ID").requiredOption("--name <name>","Policy name").option("--action <a>","Policy action","ALERT").option("--description <s>","Description").option("--condition <json>","Condition JSON").option("--no-enabled","Create disabled").option("-f, --format <format>","Output format").action(async t=>{try{let e={agentId:t.agent,name:t.name,action:(t.action??"ALERT").toUpperCase(),isEnabled:t.enabled!==!1};t.description&&(e.description=t.description),t.condition&&(e.condition=y("condition",t.condition));let n=await a(ut,{input:e});u(`Policy created: ${n.subCreatePolicy.name}`),s(t,n.subCreatePolicy);}catch(e){o(e);}});}function vt(i){let r=i.command("workflows").description("SubscriberBot automation workflows");r.command("list").description("List workflows").option("--status <s>","Filter by workflow status").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(ct,{status:t.status?t.status.toUpperCase():void 0});s(t,e.subListWorkflows,{headers:["ID","Name","Trigger","Status","Runs"],rows:e.subListWorkflows.map(n=>[c(n.id,12),n.name,n.triggerEvent,n.status,String(n.runCount??0)])});}catch(e){o(e);}}),r.command("create").description("Create a workflow").requiredOption("--name <name>","Workflow name").requiredOption("--trigger-event <e>","Trigger event").option("--description <s>","Description").option("--steps <json>","Steps JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,triggerEvent:t.triggerEvent};t.description&&(e.description=t.description),t.steps&&(e.steps=y("steps",t.steps));let n=await a(dt,{input:e});u(`Workflow created: ${n.subCreateWorkflow.name}`),s(t,n.subCreateWorkflow);}catch(e){o(e);}}),r.command("activate").description("Activate a workflow").argument("<id>","Workflow ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(pt,{id:t});u(`Workflow activated: ${n.subActivateWorkflow.name}`),s(e,n.subActivateWorkflow);}catch(n){o(n);}});}function Et(i){i.command("health").description("SubscriberBot service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await v(lt);u(t.subHealth),s(r,{health:t.subHealth});}catch(t){o(t);}});}var qt={id:"subscriberbot",version:"1.0.0",displayName:"SubscriberBot",dependsOn:["auth","workspaces"],register(i,r){S(r);let t=i.command("subscriberbot").description("SubscriberBot universal subscription & relationship management");mt(t),gt(t),ft(t),bt(t),It(t),ht(t),yt(t),wt(t),Ct(t),At(t),vt(t),Et(t);}},Gn=qt;module.exports=Gn;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a,b as b$1,h,p as p$1,g,i,o as o$1,d}from'../../chunk-
|
|
1
|
+
import {a,b as b$1,h,p as p$1,g,i,o as o$1,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var C=`
|
|
2
2
|
query SubGetProvider($id: ID!) {
|
|
3
3
|
subProvider(id: $id) {
|
|
4
4
|
id name slug description category status industry language region
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var c=class extends Error{exitCode;hint;constructor(o,s){super(o),this.name="CliUserError",this.exitCode=s?.exitCode??1,this.hint=s?.hint;}};var l=class extends Error{cause;constructor(o,s){super(o),this.name="CliInternalError",this.cause=s;}};var k=null;function
|
|
1
|
+
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var c=class extends Error{exitCode;hint;constructor(o,s){super(o),this.name="CliUserError",this.exitCode=s?.exitCode??1,this.hint=s?.hint;}};var l=class extends Error{cause;constructor(o,s){super(o),this.name="CliInternalError",this.cause=s;}};var k=null;function y(t){k=t;}function d(){if(!k)throw new l("vibecontrols module helpers used before setHelpersContext was called");return k}async function u(t,o){return d().gql.global.request(t,o)}function p(t){let o=t instanceof Error?t.message:String(t);throw new c(o)}function g(t,o,s){d().output.formatAndOutput(t,o,s);}function f(t){d().output.printSuccess(t);}function T(t){return d().output.formatStatus(t)}function x(t){return d().output.formatDate(t)}function m(t,o){return d().output.truncate(t,o)}var b=`
|
|
2
2
|
query ListSupportTickets($filter: SupportTicketFilterInput, $limit: Int, $offset: Int) {
|
|
3
3
|
supportTickets(filter: $filter, limit: $limit, offset: $offset) {
|
|
4
4
|
nodes { id ticketNumber subject status priority category createdAt }
|
|
@@ -42,4 +42,4 @@
|
|
|
42
42
|
id title slug helpfulnessScore
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
`;function R(t){let o=t.command("support").description("Support tickets & knowledge base"),s=o.command("tickets").description("Manage support tickets");s.command("list").description("List support tickets").option("--status <s>").option("--priority <p>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let n={};e.status&&(n.status=e.status.toUpperCase()),e.priority&&(n.priority=e.priority.toUpperCase());let r=await u(b,{filter:Object.keys(n).length?n:void 0,limit:e.limit,offset:0});g(e,r.supportTickets.nodes,{headers:["#","Subject","Status","Priority","Category","Created"],rows:r.supportTickets.nodes.map(a=>[a.ticketNumber??m(a.id,8),m(a.subject??"-",40),
|
|
45
|
+
`;function R(t){let o=t.command("support").description("Support tickets & knowledge base"),s=o.command("tickets").description("Manage support tickets");s.command("list").description("List support tickets").option("--status <s>").option("--priority <p>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let n={};e.status&&(n.status=e.status.toUpperCase()),e.priority&&(n.priority=e.priority.toUpperCase());let r=await u(b,{filter:Object.keys(n).length?n:void 0,limit:e.limit,offset:0});g(e,r.supportTickets.nodes,{headers:["#","Subject","Status","Priority","Category","Created"],rows:r.supportTickets.nodes.map(a=>[a.ticketNumber??m(a.id,8),m(a.subject??"-",40),T(a.status),a.priority??"-",a.category??"-",x(a.createdAt)])});}catch(n){p(n);}}),s.command("get").description("Get a support ticket").argument("<id>").option("-f, --format <format>").action(async(e,n)=>{try{let r=await u(E,{id:e});if(!r.supportTicket)throw new c(`Ticket ${e} not found`);g(n,r.supportTicket);}catch(r){p(r);}}),s.command("create").description("Open a support ticket").requiredOption("--subject <s>").requiredOption("--description <s>").option("--priority <p>","LOW|NORMAL|HIGH|URGENT","NORMAL").option("--category <c>","TECHNICAL_SUPPORT|BILLING|FEATURE_REQUEST|OTHER","TECHNICAL_SUPPORT").option("-f, --format <format>").action(async e=>{try{let n={subject:e.subject,description:e.description,priority:(e.priority??"NORMAL").toUpperCase(),category:(e.category??"TECHNICAL_SUPPORT").toUpperCase()},r=await u(I,{input:n});f(`Ticket created: ${r.createSupportTicket.ticketNumber??r.createSupportTicket.id}`),g(e,r.createSupportTicket);}catch(n){p(n);}}),s.command("comment").description("Add a comment to a ticket").argument("<ticketId>").requiredOption("--message <s>").option("--internal","Internal staff-only comment",false).action(async(e,n)=>{try{let r={ticketId:e,message:n.message,isInternal:!!n.internal};await u(S,{input:r}),f("Comment added");}catch(r){p(r);}}),s.command("resolve").description("Mark a ticket as resolved (precursor to close)").argument("<id>").option("--resolution <s>","Optional resolution note").action(async(e,n)=>{try{await u(A,{id:e,resolution:n.resolution}),f("Ticket resolved");}catch(r){p(r);}}),s.command("close").description("Close a support ticket").argument("<id>").action(async e=>{try{await u(v,{id:e}),f("Ticket closed");}catch(n){p(n);}}),o.command("kb").description("Knowledge base search").command("search").description("Search knowledge base articles").argument("<query>").option("--limit <n>","Page size",e=>parseInt(e,10),20).option("-f, --format <format>").action(async(e,n)=>{try{let r=await u(O,{query:e,limit:n.limit,offset:0});g(n,r.searchKnowledgeBase,{headers:["Slug","Title","Score"],rows:r.searchKnowledgeBase.map(a=>[a.slug,m(a.title,60),String(a.helpfulnessScore)])});}catch(r){p(r);}});}var M={id:"support",version:"1.0.0",displayName:"Support",dependsOn:["auth"],register(t,o){y(o),R(t);}},et=M;module.exports=et;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a,c,h,p,n,o,g,i}from'../../chunk-
|
|
1
|
+
import {a,c,h,p,n,o,g,i}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';var k=`
|
|
2
2
|
query ListSupportTickets($filter: SupportTicketFilterInput, $limit: Int, $offset: Int) {
|
|
3
3
|
supportTickets(filter: $filter, limit: $limit, offset: $offset) {
|
|
4
4
|
nodes { id ticketNumber subject status priority category createdAt }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var a=class extends Error{exitCode;hint;constructor(o,s){super(o),this.name="CliUserError",this.exitCode=s?.exitCode??1,this.hint=s?.hint;}},g=class extends a{constructor(o,s){super(o,{exitCode:2,hint:s?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},
|
|
1
|
+
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var a=class extends Error{exitCode;hint;constructor(o,s){super(o),this.name="CliUserError",this.exitCode=s?.exitCode??1,this.hint=s?.hint;}},g=class extends a{constructor(o,s){super(o,{exitCode:2,hint:s?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},l=class extends Error{cause;constructor(o,s){super(o),this.name="CliInternalError",this.cause=s;}};var h=null;function k(r){h=r;}function f(){if(!h)throw new l("vibecontrols module helpers used before setHelpersContext was called");return h}function V(){let r=f();if(!r.auth.isAuthenticated())throw new g("Authentication required.",{hint:`Run \`${r.productName} auth login\` to authenticate.`})}async function c(r,o){return V(),f().gql.workspace.request(r,o)}function u(r){let o=r instanceof Error?r.message:String(r);throw new a(o)}function p(r,o,s){f().output.formatAndOutput(r,o,s);}function m(r){f().output.printSuccess(r);}function C(r,o){return f().output.truncate(r,o)}function x(){return f()}var b=`
|
|
2
2
|
query TagsList($filter: TagFilterInput, $pagination: TagsPaginationInput) {
|
|
3
3
|
getTags(filter: $filter, pagination: $pagination) {
|
|
4
4
|
items { id key label description scope displayOrder }
|
|
@@ -51,4 +51,4 @@
|
|
|
51
51
|
mutation DeleteTagRelation($id: ID!) {
|
|
52
52
|
deleteTagRelation(id: $id)
|
|
53
53
|
}
|
|
54
|
-
`;function w(){let r=x().auth.read();if(!r?.workspaceId)throw new a("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:r.workspaceId}}function $(r){let o=r.command("tags").description("Tag management");o.command("list").description("List tags in current workspace").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t={workspaceId:w().workspaceId};e.scope&&(t.scope=e.scope.toUpperCase()),e.search&&(t.search=e.search);let n=await c(b,{filter:t,pagination:{limit:e.limit,offset:0}});p(e,n.getTags.items,{headers:["ID","Key","Label","Scope","Order"],rows:n.getTags.items.map(
|
|
54
|
+
`;function w(){let r=x().auth.read();if(!r?.workspaceId)throw new a("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:r.workspaceId}}function $(r){let o=r.command("tags").description("Tag management");o.command("list").description("List tags in current workspace").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t={workspaceId:w().workspaceId};e.scope&&(t.scope=e.scope.toUpperCase()),e.search&&(t.search=e.search);let n=await c(b,{filter:t,pagination:{limit:e.limit,offset:0}});p(e,n.getTags.items,{headers:["ID","Key","Label","Scope","Order"],rows:n.getTags.items.map(d=>[C(d.id,12),d.key,d.label,d.scope??"-",String(d.displayOrder??"-")])});}catch(t){u(t);}}),o.command("get").description("Get a tag by id").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(I,{id:e});if(!n.getTag)throw new a(`Tag ${e} not found`);p(t,n.getTag);}catch(n){u(n);}}),o.command("create").description("Create a tag in the current workspace").requiredOption("--key <key>").requiredOption("--label <label>").requiredOption("--vocabulary <id>","Vocabulary id (required by schema)").option("--description <s>").option("--color <hex>").option("--icon <s>").option("--scope <s>","WORKSPACE|GLOBAL|VIBE","WORKSPACE").option("--parent <id>").option("-f, --format <format>").action(async e=>{try{let t={context:w(),key:e.key,label:e.label,vocabularyId:e.vocabulary,description:e.description,color:e.color,icon:e.icon,scope:(e.scope??"WORKSPACE").toUpperCase(),parentId:e.parent},n=await c(E,{input:t});m(`Tag created: ${n.createTag.label}`),p(e,n.createTag);}catch(t){u(t);}}),o.command("update").description("Update a tag").argument("<id>").option("--label <s>").option("--description <s>").option("--color <hex>").option("--icon <s>").option("--parent <id>").option("--display-order <n>","",e=>parseInt(e,10)).option("-f, --format <format>").action(async(e,t)=>{try{let n={context:w()};if(t.label&&(n.label=t.label),t.description!==void 0&&(n.description=t.description),t.color&&(n.color=t.color),t.icon&&(n.icon=t.icon),t.parent&&(n.parentId=t.parent),t.displayOrder!==void 0&&(n.displayOrder=t.displayOrder),Object.keys(n).length===1)throw new a("No updates specified");let d=await c(A,{id:e,input:n});m("Tag updated"),p(t,d.updateTag);}catch(n){u(n);}}),o.command("delete").description("Delete a tag").argument("<id>").action(async e=>{try{await c(v,{id:e}),m("Tag deleted");}catch(t){u(t);}}),o.command("analytics").description("Tag usage analytics").argument("<tagId>").requiredOption("--from <iso>","Start date").requiredOption("--to <iso>","End date").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(O,{tagId:e,startDate:t.from,endDate:t.to});p(t,n.getTagAnalytics);}catch(n){u(n);}});let s=o.command("permissions").description("Tag relations / permissions");s.command("list").description("List related tags").argument("<tagId>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(S,{tagId:e});p(t,n.getRelatedTags);}catch(n){u(n);}}),s.command("grant").description("Create a tag relation").requiredOption("--from <tagId>").requiredOption("--to <tagId>").requiredOption("--type <relation>","SYNONYM|ANTONYM|BROADER|NARROWER|RELATED|IMPLIES|EXCLUDES").option("--bidirectional","Mirror in both directions",false).option("-f, --format <format>").action(async e=>{try{let t={context:w(),fromTagId:e.from,toTagId:e.to,relationType:e.type.toUpperCase(),bidirectional:!!e.bidirectional},n=await c(R,{input:t});m("Tag relation created"),p(e,n.createTagRelation);}catch(t){u(t);}}),s.command("revoke").description("Delete a tag relation").argument("<relationId>").action(async e=>{try{await c(D,{id:e}),m("Tag relation deleted");}catch(t){u(t);}});}var z={id:"tags",version:"1.0.0",displayName:"Tags",dependsOn:["auth","workspaces"],register(r,o){k(o),$(r);}},nt=z;module.exports=nt;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a,b as b$1,h as h$1,p,g as g$1,i,s}from'../../chunk-
|
|
1
|
+
import {a,b as b$1,h as h$1,p,g as g$1,i,s}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var I=`
|
|
2
2
|
query TagsList($filter: TagFilterInput, $pagination: TagsPaginationInput) {
|
|
3
3
|
getTags(filter: $filter, pagination: $pagination) {
|
|
4
4
|
items { id key label description scope displayOrder }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var m=class extends Error{exitCode;hint;constructor(r,e){super(r),this.name="CliUserError",this.exitCode=e?.exitCode??1,this.hint=e?.hint;}},C=class extends m{constructor(r,e){super(r,{exitCode:2,hint:e?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(r,e){super(r),this.name="CliInternalError",this.cause=e;}};var T=null;function
|
|
1
|
+
'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var m=class extends Error{exitCode;hint;constructor(r,e){super(r),this.name="CliUserError",this.exitCode=e?.exitCode??1,this.hint=e?.hint;}},C=class extends m{constructor(r,e){super(r,{exitCode:2,hint:e?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(r,e){super(r),this.name="CliInternalError",this.cause=e;}};var T=null;function k(a){T=a;}function h(){if(!T)throw new I("vibecontrols module helpers used before setHelpersContext was called");return T}function Nt(){let a=h();if(!a.auth.isAuthenticated())throw new C("Authentication required.",{hint:`Run \`${a.productName} auth login\` to authenticate.`})}async function s(a,r){return Nt(),h().gql.workspace.request(a,r)}async function w(a,r){return h().gql.workspaceAuthOnly.request(a,r)}function o(a){let r=a instanceof Error?a.message:String(a);throw new m(r)}function i(a,r,e){h().output.formatAndOutput(a,r,e);}function u(a){h().output.printSuccess(a);}function b(a){return h().output.formatDate(a)}function d(a,r){return h().output.truncate(a,r)}var S=`
|
|
2
2
|
query TecCourse($id: ID!) {
|
|
3
3
|
tecCourse(id: $id) {
|
|
4
4
|
id slug title topic summary level status estimatedMinutes instructorId
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
createdAt
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
`,$=`
|
|
64
64
|
mutation TecUpdateLesson($id: ID!, $input: TecUpdateLessonInput!) {
|
|
65
65
|
tecUpdateLesson(id: $id, input: $input) {
|
|
66
66
|
id courseId title kind position estimatedMinutes isPreview content
|
|
67
67
|
updatedAt
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
`,D=`
|
|
71
71
|
query TecListEnrollments(
|
|
72
72
|
$courseId: ID
|
|
73
73
|
$learnerId: ID
|
|
@@ -322,4 +322,4 @@
|
|
|
322
322
|
query TecHealth {
|
|
323
323
|
tecHealth
|
|
324
324
|
}
|
|
325
|
-
`;function c(a){let r=Number.parseInt(a,10);if(Number.isNaN(r))throw new m(`Expected an integer but got "${a}"`);return r}function l(a){return a.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function ft(a){let r=a.command("courses").description("Technospam courses");r.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(A,{level:e.level?e.level.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListCourses.items,{headers:["ID","Title","Level","Status","Minutes"],rows:t.tecListCourses.items.map(n=>[d(n.id,12),n.title,n.level,n.status,String(n.estimatedMinutes??0)])});}catch(t){o(t);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(k,{id:e});if(!n.tecCourse)throw new m(`Course ${e} not found`);i(t,n.tecCourse);}catch(n){o(n);}}),r.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,level:(e.level??"BEGINNER").toUpperCase()};e.topic&&(t.topic=e.topic),e.summary&&(t.summary=e.summary),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(t.instructorId=e.instructorId),e.coverFileId&&(t.coverFileId=e.coverFileId),e.tags&&(t.tags=l(e.tags));let n=await s(x,{input:t});u(`Course created: ${n.tecCreateCourse.title}`),i(e,n.tecCreateCourse);}catch(t){o(t);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.summary!==void 0&&(n.summary=t.summary),t.level&&(n.level=t.level.toUpperCase()),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(n.instructorId=t.instructorId),t.coverFileId&&(n.coverFileId=t.coverFileId),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(O,{id:e,input:n});u("Course updated"),i(t,g.tecUpdateCourse);}catch(n){o(n);}}),r.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(R,{id:e});u(`Course published: ${n.tecPublishCourse.title}`),i(t,n.tecPublishCourse);}catch(n){o(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(v,{id:e});u(n.tecArchiveCourse?"Course archived":"Course not archived"),i(t,{archived:n.tecArchiveCourse});}catch(n){o(n);}});}function gt(a){let r=a.command("lessons").description("Technospam course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(P,{courseId:e.course});i(e,t.tecListLessons,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:t.tecListLessons.map(n=>[d(n.id,12),n.title,n.kind,String(n.position),String(n.estimatedMinutes??0),n.isPreview?"yes":"no"])});}catch(t){o(t);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async e=>{try{let t={courseId:e.course,title:e.title,kind:(e.kind??"ARTICLE").toUpperCase()};e.content&&(t.content=e.content),e.position!==void 0&&(t.position=e.position),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.fileId&&(t.fileId=e.fileId),e.preview&&(t.isPreview=!0);let n=await s(L,{input:t});u(`Lesson created: ${n.tecCreateLesson.title}`),i(e,n.tecCreateLesson);}catch(t){o(t);}}),r.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.kind&&(n.kind=t.kind.toUpperCase()),t.content!==void 0&&(n.content=t.content),t.position!==void 0&&(n.position=t.position),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.fileId&&(n.fileId=t.fileId),t.preview!==void 0&&(n.isPreview=t.preview),!Object.keys(n).length)throw new m("No updates specified");let g=await s(D,{id:e,input:n});u("Lesson updated"),i(t,g.tecUpdateLesson);}catch(n){o(n);}});}function It(a){let r=a.command("enrollments").description("Technospam course enrollments");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s($,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:t.tecListEnrollments.items.map(n=>[d(n.id,12),d(n.courseId,12),d(n.learnerId,12),n.status,String(n.progressPct),String(n.lessonsCompleted)])});}catch(t){o(t);}}),r.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(M,{input:{courseId:e.course}});u(`Enrolled in course ${t.tecEnroll.courseId}`),i(e,t.tecEnroll);}catch(t){o(t);}}),r.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",c).option("--lessons-completed <n>","Lessons completed count",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={enrollmentId:e.enrollment,progressPct:e.progressPct};e.lessonsCompleted!==void 0&&(t.lessonsCompleted=e.lessonsCompleted);let n=await s(N,{input:t});u(`Progress updated to ${n.tecUpdateProgress.progressPct}%`),i(e,n.tecUpdateProgress);}catch(t){o(t);}});}function ht(a){let r=a.command("mentors").description("Technospam mentors");r.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(_,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:t.tecListMentors.items.map(n=>[d(n.id,12),d(n.headline,30),n.status,String(n.hourlyRate??0),String(n.ratingAvg??0),n.isAcceptingMentees?"yes":"no"])});}catch(t){o(t);}}),r.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(U,{id:e});if(!n.tecMentor)throw new m(`Mentor ${e} not found`);i(t,n.tecMentor);}catch(n){o(n);}}),r.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async e=>{try{let t={headline:e.headline};e.bio&&(t.bio=e.bio),e.expertise&&(t.expertise=l(e.expertise)),e.hourlyRate!==void 0&&(t.hourlyRate=e.hourlyRate),e.currency&&(t.currency=e.currency);let n=await s(q,{input:t});u(`Mentor profile created: ${n.tecBecomeMentor.headline}`),i(e,n.tecBecomeMentor);}catch(t){o(t);}}),r.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.headline&&(n.headline=t.headline),t.bio!==void 0&&(n.bio=t.bio),t.expertise&&(n.expertise=l(t.expertise)),t.hourlyRate!==void 0&&(n.hourlyRate=t.hourlyRate),t.currency&&(n.currency=t.currency),t.accepting!==void 0&&(n.isAcceptingMentees=t.accepting),!Object.keys(n).length)throw new m("No updates specified");let g=await s(H,{id:e,input:n});u("Mentor updated"),i(t,g.tecUpdateMentor);}catch(n){o(n);}}),r.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(F,{id:e});u(`Mentor approved: ${n.tecApproveMentor.status}`),i(t,n.tecApproveMentor);}catch(n){o(n);}});}function Ct(a){let r=a.command("sessions").description("Technospam mentorship sessions");r.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(G,{mentorId:e.mentor,menteeId:e.mentee,status:e.status?e.status.toUpperCase():void 0});i(e,t.tecListSessions,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:t.tecListSessions.map(n=>[d(n.id,12),d(n.mentorId,12),d(n.menteeId,12),d(n.topic,24),n.status,b(n.scheduledAt)])});}catch(t){o(t);}}),r.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={mentorId:e.mentor,topic:e.topic,scheduledAt:e.scheduledAt};e.agenda&&(t.agenda=e.agenda),e.durationMinutes!==void 0&&(t.durationMinutes=e.durationMinutes);let n=await s(j,{input:t});u(`Session booked: ${n.tecBookSession.topic}`),i(e,n.tecBookSession);}catch(t){o(t);}}),r.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(B,{id:e,meetingUrl:t.meetingUrl});u("Session confirmed"),i(t,n.tecConfirmSession);}catch(n){o(n);}}),r.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(z,{id:e});u("Session cancelled"),i(t,n.tecCancelSession);}catch(n){o(n);}}),r.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",c).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(W,{id:e,rating:t.rating,feedback:t.feedback});u("Session completed"),i(t,n.tecCompleteSession);}catch(n){o(n);}});}function bt(a){let r=a.command("hackathons").description("Technospam hackathons");r.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(K,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:t.tecListHackathons.items.map(n=>[d(n.id,12),n.title,n.status,b(n.startAt),String(n.prizePool??0)])});}catch(t){o(t);}}),r.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(V,{id:e});if(!n.tecHackathon)throw new m(`Hackathon ${e} not found`);i(t,n.tecHackathon);}catch(n){o(n);}}),r.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,startAt:e.startAt,endAt:e.endAt};e.theme&&(t.theme=e.theme),e.description&&(t.description=e.description),e.submissionDeadline&&(t.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(t.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(t.prizePool=e.prizePool),e.currency&&(t.currency=e.currency),e.tags&&(t.tags=l(e.tags));let n=await s(J,{input:t});u(`Hackathon created: ${n.tecCreateHackathon.title}`),i(e,n.tecCreateHackathon);}catch(t){o(t);}}),r.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.theme!==void 0&&(n.theme=t.theme),t.description!==void 0&&(n.description=t.description),t.startAt&&(n.startAt=t.startAt),t.endAt&&(n.endAt=t.endAt),t.submissionDeadline&&(n.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(n.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(n.prizePool=t.prizePool),t.currency&&(n.currency=t.currency),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(Y,{id:e,input:n});u("Hackathon updated"),i(t,g.tecUpdateHackathon);}catch(n){o(n);}}),r.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(Q,{id:e});u(`Registration open: ${n.tecOpenRegistration.status}`),i(t,n.tecOpenRegistration);}catch(n){o(n);}});}function Tt(a){let r=a.command("teams").description("Technospam hackathon teams");r.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(X,{hackathonId:e.hackathon});i(e,t.tecListTeams,{headers:["ID","Name","Captain","Status","Score"],rows:t.tecListTeams.map(n=>[d(n.id,12),n.name,d(n.captainId,12),n.status,String(n.score??0)])});}catch(t){o(t);}}),r.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async e=>{try{let t={hackathonId:e.hackathon,name:e.name};e.members&&(t.memberIds=l(e.members));let n=await s(Z,{input:t});u(`Team registered: ${n.tecRegisterTeam.name}`),i(e,n.tecRegisterTeam);}catch(t){o(t);}}),r.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async e=>{try{let t={teamId:e.team,projectName:e.projectName};e.projectUrl&&(t.projectUrl=e.projectUrl),e.repoUrl&&(t.repoUrl=e.repoUrl),e.pitch&&(t.pitch=e.pitch);let n=await s(tt,{input:t});u(`Project submitted: ${n.tecSubmitProject.status}`),i(e,n.tecSubmitProject);}catch(t){o(t);}}),r.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",c).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(et,{id:e,score:t.score,winner:t.winner??void 0});u(`Team scored: ${n.tecScoreTeam.score}`),i(t,n.tecScoreTeam);}catch(n){o(n);}});}function wt(a){let r=a.command("problems").description("Technospam practice problems");r.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(rt,{difficulty:e.difficulty?e.difficulty.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,topic:e.topic,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:t.tecListProblems.items.map(n=>[d(n.id,12),n.title,n.difficulty,n.status,String(n.points??0)])});}catch(t){o(t);}}),r.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(nt,{id:e});if(!n.tecProblem)throw new m(`Problem ${e} not found`);i(t,n.tecProblem);}catch(n){o(n);}}),r.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,difficulty:(e.difficulty??"EASY").toUpperCase()};e.topic&&(t.topic=e.topic),e.statement&&(t.statement=e.statement),e.points!==void 0&&(t.points=e.points),e.languages&&(t.languages=l(e.languages)),e.starterCode&&(t.starterCode=e.starterCode),e.tags&&(t.tags=l(e.tags));let n=await s(ot,{input:t});u(`Problem created: ${n.tecCreateProblem.title}`),i(e,n.tecCreateProblem);}catch(t){o(t);}}),r.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.statement!==void 0&&(n.statement=t.statement),t.difficulty&&(n.difficulty=t.difficulty.toUpperCase()),t.points!==void 0&&(n.points=t.points),t.languages&&(n.languages=l(t.languages)),t.starterCode!==void 0&&(n.starterCode=t.starterCode),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let g=await s(it,{id:e,input:n});u("Problem updated"),i(t,g.tecUpdateProblem);}catch(n){o(n);}}),r.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(st,{id:e});u(`Problem published: ${n.tecPublishProblem.title}`),i(t,n.tecPublishProblem);}catch(n){o(n);}});}function yt(a){let r=a.command("submissions").description("Technospam problem submissions");r.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(at,{problemId:e.problem,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:t.tecListSubmissions.items.map(n=>[d(n.id,12),d(n.problemId,12),d(n.learnerId,12),n.language,n.verdict,String(n.pointsAwarded??0)])});}catch(t){o(t);}}),r.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async e=>{try{let t={problemId:e.problem,language:e.language,code:e.code},n=await s(ct,{input:t});u(`Solution submitted: ${n.tecSubmitSolution.verdict}`),i(e,n.tecSubmitSolution);}catch(t){o(t);}}),r.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",c).option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(ut,{id:e,verdict:t.verdict.toUpperCase(),runtimeMs:t.runtimeMs});u(`Submission graded: ${n.tecGradeSubmission.verdict}`),i(t,n.tecGradeSubmission);}catch(n){o(n);}});}function Et(a){let r=a.command("certificates").description("Technospam completion certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(dt,{courseId:e.course,learnerId:e.learner});i(e,t.tecListCertificates,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:t.tecListCertificates.map(n=>[d(n.id,12),n.serial,d(n.courseId,12),d(n.learnerId,12),String(n.score),n.status])});}catch(t){o(t);}}),r.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",c).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(pt,{courseId:e.course,learnerId:e.learner,score:e.score});u(`Certificate issued: ${t.tecIssueCertificate.serial}`),i(e,t.tecIssueCertificate);}catch(t){o(t);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(mt,{id:e,reason:t.reason});u(`Certificate revoked: ${n.tecRevokeCertificate.status}`),i(t,n.tecRevokeCertificate);}catch(n){o(n);}});}function St(a){a.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let e=await w(lt);u(e.tecHealth),i(r,{health:e.tecHealth});}catch(e){o(e);}});}var Ut={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(a,r){S(r);let e=a.command("technospam").description("Technospam developer-education platform");ft(e),gt(e),It(e),ht(e),Ct(e),bt(e),Tt(e),wt(e),yt(e),Et(e),St(e);}},_n=Ut;module.exports=_n;
|
|
325
|
+
`;function c(a){let r=Number.parseInt(a,10);if(Number.isNaN(r))throw new m(`Expected an integer but got "${a}"`);return r}function l(a){return a.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function gt(a){let r=a.command("courses").description("Technospam courses");r.command("list").description("List courses").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(A,{level:e.level?e.level.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListCourses.items,{headers:["ID","Title","Level","Status","Minutes"],rows:t.tecListCourses.items.map(n=>[d(n.id,12),n.title,n.level,n.status,String(n.estimatedMinutes??0)])});}catch(t){o(t);}}),r.command("get").description("Get a course by id").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(S,{id:e});if(!n.tecCourse)throw new m(`Course ${e} not found`);i(t,n.tecCourse);}catch(n){o(n);}}),r.command("create").description("Create a course").requiredOption("--title <t>","Course title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT","BEGINNER").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,level:(e.level??"BEGINNER").toUpperCase()};e.topic&&(t.topic=e.topic),e.summary&&(t.summary=e.summary),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.instructorId&&(t.instructorId=e.instructorId),e.coverFileId&&(t.coverFileId=e.coverFileId),e.tags&&(t.tags=l(e.tags));let n=await s(x,{input:t});u(`Course created: ${n.tecCreateCourse.title}`),i(e,n.tecCreateCourse);}catch(t){o(t);}}),r.command("update").description("Update a course").argument("<id>","Course ID").option("--title <t>","Course title").option("--topic <t>","Topic").option("--summary <s>","Summary").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|EXPERT").option("--estimated-minutes <n>","Estimated minutes",c).option("--instructor-id <id>","Instructor user ID").option("--cover-file-id <id>","Cover image File ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.summary!==void 0&&(n.summary=t.summary),t.level&&(n.level=t.level.toUpperCase()),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.instructorId&&(n.instructorId=t.instructorId),t.coverFileId&&(n.coverFileId=t.coverFileId),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let f=await s(O,{id:e,input:n});u("Course updated"),i(t,f.tecUpdateCourse);}catch(n){o(n);}}),r.command("publish").description("Publish a course (DRAFT -> PUBLISHED)").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(R,{id:e});u(`Course published: ${n.tecPublishCourse.title}`),i(t,n.tecPublishCourse);}catch(n){o(n);}}),r.command("archive").description("Archive a course").argument("<id>","Course ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(v,{id:e});u(n.tecArchiveCourse?"Course archived":"Course not archived"),i(t,{archived:n.tecArchiveCourse});}catch(n){o(n);}});}function ft(a){let r=a.command("lessons").description("Technospam course lessons");r.command("list").description("List lessons for a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(P,{courseId:e.course});i(e,t.tecListLessons,{headers:["ID","Title","Kind","Position","Minutes","Preview"],rows:t.tecListLessons.map(n=>[d(n.id,12),n.title,n.kind,String(n.position),String(n.estimatedMinutes??0),n.isPreview?"yes":"no"])});}catch(t){o(t);}}),r.command("create").description("Create a lesson").requiredOption("--course <id>","Course ID").requiredOption("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT","ARTICLE").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview","Mark as a free preview lesson").option("-f, --format <format>","Output format").action(async e=>{try{let t={courseId:e.course,title:e.title,kind:(e.kind??"ARTICLE").toUpperCase()};e.content&&(t.content=e.content),e.position!==void 0&&(t.position=e.position),e.estimatedMinutes!==void 0&&(t.estimatedMinutes=e.estimatedMinutes),e.fileId&&(t.fileId=e.fileId),e.preview&&(t.isPreview=!0);let n=await s(L,{input:t});u(`Lesson created: ${n.tecCreateLesson.title}`),i(e,n.tecCreateLesson);}catch(t){o(t);}}),r.command("update").description("Update a lesson").argument("<id>","Lesson ID").option("--title <t>","Lesson title").option("--kind <k>","ARTICLE|VIDEO|QUIZ|INTERACTIVE|PROJECT").option("--content <s>","Lesson content").option("--position <n>","Order position",c).option("--estimated-minutes <n>","Estimated minutes",c).option("--file-id <id>","Attachment / video File ID").option("--preview <bool>","true|false",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.kind&&(n.kind=t.kind.toUpperCase()),t.content!==void 0&&(n.content=t.content),t.position!==void 0&&(n.position=t.position),t.estimatedMinutes!==void 0&&(n.estimatedMinutes=t.estimatedMinutes),t.fileId&&(n.fileId=t.fileId),t.preview!==void 0&&(n.isPreview=t.preview),!Object.keys(n).length)throw new m("No updates specified");let f=await s($,{id:e,input:n});u("Lesson updated"),i(t,f.tecUpdateLesson);}catch(n){o(n);}});}function It(a){let r=a.command("enrollments").description("Technospam course enrollments");r.command("list").description("List enrollments").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(D,{courseId:e.course,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListEnrollments.items,{headers:["ID","Course","Learner","Status","Progress %","Lessons"],rows:t.tecListEnrollments.items.map(n=>[d(n.id,12),d(n.courseId,12),d(n.learnerId,12),n.status,String(n.progressPct),String(n.lessonsCompleted)])});}catch(t){o(t);}}),r.command("enroll").description("Enroll the calling user in a course").requiredOption("--course <id>","Course ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(M,{input:{courseId:e.course}});u(`Enrolled in course ${t.tecEnroll.courseId}`),i(e,t.tecEnroll);}catch(t){o(t);}}),r.command("update-progress").description("Update a learner's enrollment progress (auto-completes at 100%)").requiredOption("--enrollment <id>","Enrollment ID").requiredOption("--progress-pct <n>","Progress percent (0-100)",c).option("--lessons-completed <n>","Lessons completed count",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={enrollmentId:e.enrollment,progressPct:e.progressPct};e.lessonsCompleted!==void 0&&(t.lessonsCompleted=e.lessonsCompleted);let n=await s(N,{input:t});u(`Progress updated to ${n.tecUpdateProgress.progressPct}%`),i(e,n.tecUpdateProgress);}catch(t){o(t);}});}function ht(a){let r=a.command("mentors").description("Technospam mentors");r.command("list").description("List mentors").option("--status <s>","PENDING|ACTIVE|PAUSED|INACTIVE").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(_,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListMentors.items,{headers:["ID","Headline","Status","Rate","Rating","Accepting"],rows:t.tecListMentors.items.map(n=>[d(n.id,12),d(n.headline,30),n.status,String(n.hourlyRate??0),String(n.ratingAvg??0),n.isAcceptingMentees?"yes":"no"])});}catch(t){o(t);}}),r.command("get").description("Get a mentor by id").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(U,{id:e});if(!n.tecMentor)throw new m(`Mentor ${e} not found`);i(t,n.tecMentor);}catch(n){o(n);}}),r.command("become").description("Create the calling user's mentor profile").requiredOption("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("-f, --format <format>","Output format").action(async e=>{try{let t={headline:e.headline};e.bio&&(t.bio=e.bio),e.expertise&&(t.expertise=l(e.expertise)),e.hourlyRate!==void 0&&(t.hourlyRate=e.hourlyRate),e.currency&&(t.currency=e.currency);let n=await s(q,{input:t});u(`Mentor profile created: ${n.tecBecomeMentor.headline}`),i(e,n.tecBecomeMentor);}catch(t){o(t);}}),r.command("update").description("Update a mentor profile").argument("<id>","Mentor ID").option("--headline <h>","Mentor headline").option("--bio <s>","Bio").option("--expertise <csv>","Comma-separated areas of expertise").option("--hourly-rate <n>","Hourly rate",c).option("--currency <c>","Currency code").option("--accepting <bool>","true|false (accepting mentees)",e=>e==="true").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.headline&&(n.headline=t.headline),t.bio!==void 0&&(n.bio=t.bio),t.expertise&&(n.expertise=l(t.expertise)),t.hourlyRate!==void 0&&(n.hourlyRate=t.hourlyRate),t.currency&&(n.currency=t.currency),t.accepting!==void 0&&(n.isAcceptingMentees=t.accepting),!Object.keys(n).length)throw new m("No updates specified");let f=await s(H,{id:e,input:n});u("Mentor updated"),i(t,f.tecUpdateMentor);}catch(n){o(n);}}),r.command("approve").description("Approve a pending mentor profile (PENDING -> ACTIVE)").argument("<id>","Mentor ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(F,{id:e});u(`Mentor approved: ${n.tecApproveMentor.status}`),i(t,n.tecApproveMentor);}catch(n){o(n);}});}function Ct(a){let r=a.command("sessions").description("Technospam mentorship sessions");r.command("list").description("List mentorship sessions").option("--mentor <id>","Filter by mentor ID").option("--mentee <id>","Filter by mentee ID").option("--status <s>","REQUESTED|CONFIRMED|COMPLETED|CANCELLED|NO_SHOW").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(G,{mentorId:e.mentor,menteeId:e.mentee,status:e.status?e.status.toUpperCase():void 0});i(e,t.tecListSessions,{headers:["ID","Mentor","Mentee","Topic","Status","Scheduled"],rows:t.tecListSessions.map(n=>[d(n.id,12),d(n.mentorId,12),d(n.menteeId,12),d(n.topic,24),n.status,b(n.scheduledAt)])});}catch(t){o(t);}}),r.command("book").description("Book a 1:1 session with a mentor as the calling mentee").requiredOption("--mentor <id>","Mentor ID").requiredOption("--topic <t>","Session topic").requiredOption("--scheduled-at <iso>","Scheduled time (ISO date)").option("--agenda <s>","Agenda").option("--duration-minutes <n>","Duration (minutes)",c).option("-f, --format <format>","Output format").action(async e=>{try{let t={mentorId:e.mentor,topic:e.topic,scheduledAt:e.scheduledAt};e.agenda&&(t.agenda=e.agenda),e.durationMinutes!==void 0&&(t.durationMinutes=e.durationMinutes);let n=await s(j,{input:t});u(`Session booked: ${n.tecBookSession.topic}`),i(e,n.tecBookSession);}catch(t){o(t);}}),r.command("confirm").description("Confirm a requested session").argument("<id>","Session ID").option("--meeting-url <url>","Meeting URL").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(B,{id:e,meetingUrl:t.meetingUrl});u("Session confirmed"),i(t,n.tecConfirmSession);}catch(n){o(n);}}),r.command("cancel").description("Cancel a session").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(z,{id:e});u("Session cancelled"),i(t,n.tecCancelSession);}catch(n){o(n);}}),r.command("complete").description("Complete a session with optional rating and feedback").argument("<id>","Session ID").option("--rating <n>","Rating (1-5)",c).option("--feedback <s>","Feedback").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(W,{id:e,rating:t.rating,feedback:t.feedback});u("Session completed"),i(t,n.tecCompleteSession);}catch(n){o(n);}});}function bt(a){let r=a.command("hackathons").description("Technospam hackathons");r.command("list").description("List hackathons").option("--status <s>","DRAFT|REGISTRATION_OPEN|IN_PROGRESS|JUDGING|COMPLETED|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(K,{status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListHackathons.items,{headers:["ID","Title","Status","Start","Prize"],rows:t.tecListHackathons.items.map(n=>[d(n.id,12),n.title,n.status,b(n.startAt),String(n.prizePool??0)])});}catch(t){o(t);}}),r.command("get").description("Get a hackathon by id").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(V,{id:e});if(!n.tecHackathon)throw new m(`Hackathon ${e} not found`);i(t,n.tecHackathon);}catch(n){o(n);}}),r.command("create").description("Create a hackathon").requiredOption("--title <t>","Hackathon title").requiredOption("--slug <slug>","URL slug").requiredOption("--start-at <iso>","Start time (ISO date)").requiredOption("--end-at <iso>","End time (ISO date)").option("--theme <t>","Theme").option("--description <s>","Description").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,startAt:e.startAt,endAt:e.endAt};e.theme&&(t.theme=e.theme),e.description&&(t.description=e.description),e.submissionDeadline&&(t.submissionDeadline=e.submissionDeadline),e.maxTeamSize!==void 0&&(t.maxTeamSize=e.maxTeamSize),e.prizePool!==void 0&&(t.prizePool=e.prizePool),e.currency&&(t.currency=e.currency),e.tags&&(t.tags=l(e.tags));let n=await s(J,{input:t});u(`Hackathon created: ${n.tecCreateHackathon.title}`),i(e,n.tecCreateHackathon);}catch(t){o(t);}}),r.command("update").description("Update a hackathon").argument("<id>","Hackathon ID").option("--title <t>","Hackathon title").option("--theme <t>","Theme").option("--description <s>","Description").option("--start-at <iso>","Start time (ISO date)").option("--end-at <iso>","End time (ISO date)").option("--submission-deadline <iso>","Submission deadline (ISO date)").option("--max-team-size <n>","Max team size",c).option("--prize-pool <n>","Prize pool",c).option("--currency <c>","Currency code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.theme!==void 0&&(n.theme=t.theme),t.description!==void 0&&(n.description=t.description),t.startAt&&(n.startAt=t.startAt),t.endAt&&(n.endAt=t.endAt),t.submissionDeadline&&(n.submissionDeadline=t.submissionDeadline),t.maxTeamSize!==void 0&&(n.maxTeamSize=t.maxTeamSize),t.prizePool!==void 0&&(n.prizePool=t.prizePool),t.currency&&(n.currency=t.currency),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let f=await s(Y,{id:e,input:n});u("Hackathon updated"),i(t,f.tecUpdateHackathon);}catch(n){o(n);}}),r.command("open-registration").description("Open registration for a hackathon (DRAFT -> REGISTRATION_OPEN)").argument("<id>","Hackathon ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(Q,{id:e});u(`Registration open: ${n.tecOpenRegistration.status}`),i(t,n.tecOpenRegistration);}catch(n){o(n);}});}function Tt(a){let r=a.command("teams").description("Technospam hackathon teams");r.command("list").description("List teams for a hackathon").requiredOption("--hackathon <id>","Hackathon ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(X,{hackathonId:e.hackathon});i(e,t.tecListTeams,{headers:["ID","Name","Captain","Status","Score"],rows:t.tecListTeams.map(n=>[d(n.id,12),n.name,d(n.captainId,12),n.status,String(n.score??0)])});}catch(t){o(t);}}),r.command("register").description("Register a team for a hackathon with the calling user as captain").requiredOption("--hackathon <id>","Hackathon ID").requiredOption("--name <name>","Team name").option("--members <csv>","Comma-separated member user IDs").option("-f, --format <format>","Output format").action(async e=>{try{let t={hackathonId:e.hackathon,name:e.name};e.members&&(t.memberIds=l(e.members));let n=await s(Z,{input:t});u(`Team registered: ${n.tecRegisterTeam.name}`),i(e,n.tecRegisterTeam);}catch(t){o(t);}}),r.command("submit-project").description("Submit a team's project for judging").requiredOption("--team <id>","Team ID").requiredOption("--project-name <n>","Project name").option("--project-url <url>","Project URL").option("--repo-url <url>","Repository URL").option("--pitch <s>","Pitch").option("-f, --format <format>","Output format").action(async e=>{try{let t={teamId:e.team,projectName:e.projectName};e.projectUrl&&(t.projectUrl=e.projectUrl),e.repoUrl&&(t.repoUrl=e.repoUrl),e.pitch&&(t.pitch=e.pitch);let n=await s(tt,{input:t});u(`Project submitted: ${n.tecSubmitProject.status}`),i(e,n.tecSubmitProject);}catch(t){o(t);}}),r.command("score").description("Record a judge score for a team and optionally mark it WINNER").argument("<id>","Team ID").requiredOption("--score <n>","Score",c).option("--winner","Mark the team as winner").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(et,{id:e,score:t.score,winner:t.winner??void 0});u(`Team scored: ${n.tecScoreTeam.score}`),i(t,n.tecScoreTeam);}catch(n){o(n);}});}function wt(a){let r=a.command("problems").description("Technospam practice problems");r.command("list").description("List problems").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--status <s>","DRAFT|PUBLISHED|ARCHIVED").option("--topic <t>","Filter by topic").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(rt,{difficulty:e.difficulty?e.difficulty.toUpperCase():void 0,status:e.status?e.status.toUpperCase():void 0,topic:e.topic,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListProblems.items,{headers:["ID","Title","Difficulty","Status","Points"],rows:t.tecListProblems.items.map(n=>[d(n.id,12),n.title,n.difficulty,n.status,String(n.points??0)])});}catch(t){o(t);}}),r.command("get").description("Get a problem by id").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(nt,{id:e});if(!n.tecProblem)throw new m(`Problem ${e} not found`);i(t,n.tecProblem);}catch(n){o(n);}}),r.command("create").description("Create a problem").requiredOption("--title <t>","Problem title").requiredOption("--slug <slug>","URL slug").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD","EASY").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title,slug:e.slug,difficulty:(e.difficulty??"EASY").toUpperCase()};e.topic&&(t.topic=e.topic),e.statement&&(t.statement=e.statement),e.points!==void 0&&(t.points=e.points),e.languages&&(t.languages=l(e.languages)),e.starterCode&&(t.starterCode=e.starterCode),e.tags&&(t.tags=l(e.tags));let n=await s(ot,{input:t});u(`Problem created: ${n.tecCreateProblem.title}`),i(e,n.tecCreateProblem);}catch(t){o(t);}}),r.command("update").description("Update a problem").argument("<id>","Problem ID").option("--title <t>","Problem title").option("--topic <t>","Topic").option("--statement <s>","Problem statement").option("--difficulty <d>","EASY|MEDIUM|HARD").option("--points <n>","Points",c).option("--languages <csv>","Comma-separated allowed languages").option("--starter-code <s>","Starter code").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n={};if(t.title&&(n.title=t.title),t.topic!==void 0&&(n.topic=t.topic),t.statement!==void 0&&(n.statement=t.statement),t.difficulty&&(n.difficulty=t.difficulty.toUpperCase()),t.points!==void 0&&(n.points=t.points),t.languages&&(n.languages=l(t.languages)),t.starterCode!==void 0&&(n.starterCode=t.starterCode),t.tags&&(n.tags=l(t.tags)),!Object.keys(n).length)throw new m("No updates specified");let f=await s(it,{id:e,input:n});u("Problem updated"),i(t,f.tecUpdateProblem);}catch(n){o(n);}}),r.command("publish").description("Publish a problem (DRAFT -> PUBLISHED)").argument("<id>","Problem ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(st,{id:e});u(`Problem published: ${n.tecPublishProblem.title}`),i(t,n.tecPublishProblem);}catch(n){o(n);}});}function yt(a){let r=a.command("submissions").description("Technospam problem submissions");r.command("list").description("List submissions").option("--problem <id>","Filter by problem ID").option("--learner <id>","Filter by learner ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(at,{problemId:e.problem,learnerId:e.learner,pagination:{limit:e.limit,offset:e.offset}});i(e,t.tecListSubmissions.items,{headers:["ID","Problem","Learner","Language","Verdict","Points"],rows:t.tecListSubmissions.items.map(n=>[d(n.id,12),d(n.problemId,12),d(n.learnerId,12),n.language,n.verdict,String(n.pointsAwarded??0)])});}catch(t){o(t);}}),r.command("submit").description("Submit a solution to a problem").requiredOption("--problem <id>","Problem ID").requiredOption("--language <l>","Language").requiredOption("--code <c>","Solution code").option("-f, --format <format>","Output format").action(async e=>{try{let t={problemId:e.problem,language:e.language,code:e.code},n=await s(ct,{input:t});u(`Solution submitted: ${n.tecSubmitSolution.verdict}`),i(e,n.tecSubmitSolution);}catch(t){o(t);}}),r.command("grade").description("Record the grader verdict for a submission").argument("<id>","Submission ID").requiredOption("--verdict <v>","PENDING|ACCEPTED|WRONG_ANSWER|TIME_LIMIT_EXCEEDED|RUNTIME_ERROR|COMPILE_ERROR").option("--runtime-ms <n>","Runtime in milliseconds",c).option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(ut,{id:e,verdict:t.verdict.toUpperCase(),runtimeMs:t.runtimeMs});u(`Submission graded: ${n.tecGradeSubmission.verdict}`),i(t,n.tecGradeSubmission);}catch(n){o(n);}});}function Et(a){let r=a.command("certificates").description("Technospam completion certificates");r.command("list").description("List certificates").option("--course <id>","Filter by course ID").option("--learner <id>","Filter by learner ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(dt,{courseId:e.course,learnerId:e.learner});i(e,t.tecListCertificates,{headers:["ID","Serial","Course","Learner","Score","Status"],rows:t.tecListCertificates.map(n=>[d(n.id,12),n.serial,d(n.courseId,12),d(n.learnerId,12),String(n.score),n.status])});}catch(t){o(t);}}),r.command("issue").description("Issue a verifiable completion certificate for a learner on a course").requiredOption("--course <id>","Course ID").requiredOption("--learner <id>","Learner ID").requiredOption("--score <n>","Score",c).option("-f, --format <format>","Output format").action(async e=>{try{let t=await s(pt,{courseId:e.course,learnerId:e.learner,score:e.score});u(`Certificate issued: ${t.tecIssueCertificate.serial}`),i(e,t.tecIssueCertificate);}catch(t){o(t);}}),r.command("revoke").description("Revoke a certificate").argument("<id>","Certificate ID").option("--reason <s>","Revocation reason").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let n=await s(mt,{id:e,reason:t.reason});u(`Certificate revoked: ${n.tecRevokeCertificate.status}`),i(t,n.tecRevokeCertificate);}catch(n){o(n);}});}function kt(a){a.command("health").description("Technospam service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let e=await w(lt);u(e.tecHealth),i(r,{health:e.tecHealth});}catch(e){o(e);}});}var Ut={id:"technospam",version:"1.0.0",displayName:"Technospam",dependsOn:["auth","workspaces"],register(a,r){k(r);let e=a.command("technospam").description("Technospam developer-education platform");gt(e),ft(e),It(e),ht(e),Ct(e),bt(e),Tt(e),wt(e),yt(e),Et(e),kt(e);}},_n=Ut;module.exports=_n;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a as a$1,b as b$1,h,p as p$1,g,i,o as o$1,d}from'../../chunk-
|
|
1
|
+
import {a as a$1,b as b$1,h,p as p$1,g,i,o as o$1,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var b=`
|
|
2
2
|
query TecCourse($id: ID!) {
|
|
3
3
|
tecCourse(id: $id) {
|
|
4
4
|
id slug title topic summary level status estimatedMinutes instructorId
|