@burdenoff/cli-sdk 2026.1102.1 → 2026.1102.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-O6UCQ5IT.js +1 -0
- package/dist/{chunk-AYNNSLCL.js → chunk-ZGT7IIOP.js} +409 -418
- package/dist/modules/adaptercloud/index.cjs +4 -4
- package/dist/modules/adaptercloud/index.js +2 -2
- package/dist/modules/artistrybase/index.js +2 -2
- package/dist/modules/assethandler/index.cjs +2 -2
- package/dist/modules/assethandler/index.js +2 -2
- package/dist/modules/atheletebridge/index.cjs +8 -8
- package/dist/modules/atheletebridge/index.js +2 -2
- package/dist/modules/auth/index.cjs +37 -37
- package/dist/modules/auth/index.js +33 -29
- package/dist/modules/billing/index.cjs +1 -1
- package/dist/modules/billing/index.js +2 -2
- package/dist/modules/brainyrich/index.cjs +44 -28
- package/dist/modules/brainyrich/index.js +47 -31
- package/dist/modules/buildmyiq/index.js +2 -2
- package/dist/modules/channels/index.cjs +3 -3
- package/dist/modules/channels/index.js +2 -2
- package/dist/modules/collabkin/index.cjs +4 -4
- package/dist/modules/collabkin/index.js +2 -2
- package/dist/modules/comradecircle/index.cjs +6 -6
- package/dist/modules/comradecircle/index.js +2 -2
- package/dist/modules/conversations/index.cjs +7 -7
- package/dist/modules/conversations/index.js +2 -2
- package/dist/modules/coolandlovely/index.cjs +2 -2
- package/dist/modules/coolandlovely/index.js +2 -2
- package/dist/modules/cosmicintersection/index.cjs +6 -6
- package/dist/modules/cosmicintersection/index.js +2 -2
- package/dist/modules/crewfoundry/index.js +2 -2
- package/dist/modules/devportal/index.cjs +2 -2
- package/dist/modules/devportal/index.js +2 -2
- package/dist/modules/ecoimpacthub/index.cjs +5 -5
- package/dist/modules/ecoimpacthub/index.js +2 -2
- package/dist/modules/eventfullymanaged/index.cjs +12 -12
- package/dist/modules/eventfullymanaged/index.js +2 -2
- package/dist/modules/export/index.cjs +4 -4
- package/dist/modules/export/index.js +2 -2
- package/dist/modules/files/index.cjs +3 -3
- package/dist/modules/files/index.js +4 -4
- package/dist/modules/fluidgrids/index.cjs +16 -16
- package/dist/modules/fluidgrids/index.js +3 -3
- package/dist/modules/ggnomad/index.cjs +4 -4
- package/dist/modules/ggnomad/index.js +2 -2
- package/dist/modules/govcitizenhub/index.cjs +4 -4
- package/dist/modules/govcitizenhub/index.js +2 -2
- package/dist/modules/groups/index.cjs +4 -4
- package/dist/modules/groups/index.js +2 -2
- package/dist/modules/headshotmarketing/index.js +2 -2
- package/dist/modules/hookmovies/index.cjs +6 -6
- package/dist/modules/hookmovies/index.js +2 -2
- package/dist/modules/housingvista/index.cjs +3 -3
- package/dist/modules/housingvista/index.js +2 -2
- package/dist/modules/integrations/index.cjs +5 -5
- package/dist/modules/integrations/index.js +2 -2
- package/dist/modules/intelwatchtower/index.cjs +5 -5
- package/dist/modules/intelwatchtower/index.js +2 -2
- package/dist/modules/kadaikodi/index.cjs +2 -2
- package/dist/modules/kadaikodi/index.js +2 -2
- package/dist/modules/labsofscience/index.cjs +3 -3
- package/dist/modules/labsofscience/index.js +2 -2
- package/dist/modules/manufacturedops/index.cjs +2 -2
- package/dist/modules/manufacturedops/index.js +2 -2
- package/dist/modules/movethewheels/index.js +2 -2
- package/dist/modules/notifications/index.cjs +2 -2
- package/dist/modules/notifications/index.js +2 -2
- package/dist/modules/organizations/index.js +2 -2
- package/dist/modules/planmagnet/index.js +2 -2
- package/dist/modules/products/index.cjs +4 -4
- package/dist/modules/products/index.js +2 -2
- package/dist/modules/proserviceworld/index.cjs +2 -2
- package/dist/modules/proserviceworld/index.js +2 -2
- package/dist/modules/rbac/index.js +2 -2
- package/dist/modules/sandbox/index.cjs +17 -17
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs +2 -2
- package/dist/modules/scheduler/index.js +2 -2
- package/dist/modules/security/index.cjs +3 -3
- package/dist/modules/security/index.js +2 -2
- package/dist/modules/semanticfed/index.cjs +3 -3
- package/dist/modules/semanticfed/index.js +2 -2
- package/dist/modules/store/index.cjs +3 -3
- package/dist/modules/store/index.js +2 -2
- package/dist/modules/subscriberbot/index.cjs +1 -1
- package/dist/modules/subscriberbot/index.js +2 -2
- package/dist/modules/support/index.cjs +2 -2
- package/dist/modules/support/index.js +2 -2
- package/dist/modules/tags/index.js +2 -2
- package/dist/modules/technospam/index.cjs +2 -2
- package/dist/modules/technospam/index.js +2 -2
- package/dist/modules/theculturepost/index.js +2 -2
- package/dist/modules/theglobalfuel/index.cjs +2 -2
- package/dist/modules/theglobalfuel/index.js +2 -2
- package/dist/modules/timecampus/index.js +2 -2
- package/dist/modules/tours/index.cjs +2 -2
- package/dist/modules/tours/index.js +2 -2
- package/dist/modules/vibecontrols/index.cjs +563 -567
- package/dist/modules/vibecontrols/index.js +5 -4
- package/dist/modules/workspaces/index.cjs +4 -4
- package/dist/modules/workspaces/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-W4JZR7RJ.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a,b as b$1,h as h$1,
|
|
1
|
+
import {a,b as b$1,i,h as h$1,k as k$1,v as v$1,r}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.js';var I="pageInfo { hasNextPage endCursor } totalCount",S=`
|
|
2
2
|
id key name description status methodology ownerId programId
|
|
3
3
|
startDate endDate tags createdAt updatedAt workspaceId
|
|
4
4
|
`,X=`
|
|
@@ -771,4 +771,4 @@ import {a,b as b$1,h as h$1,g as g$1,i,t,p}from'../../chunk-W4JZR7RJ.js';import
|
|
|
771
771
|
mutation PlanmagnetImportFromExternal($input: PlanmagnetImportFromExternalInput!) {
|
|
772
772
|
planmagnetImportFromExternal(input: $input) { ${J} }
|
|
773
773
|
}
|
|
774
|
-
`;function g(c,a){try{return JSON.parse(a)}catch{throw new o(`--${c} must be valid JSON`)}}function u(c){let a=Number.parseInt(c,10);if(Number.isNaN(a))throw new o(`Expected an integer but got "${c}"`);return a}function D(c){let a=Number.parseFloat(c);if(Number.isNaN(a))throw new o(`Expected a number but got "${c}"`);return a}function f(c){return c.split(",").map(a=>a.trim()).filter(a=>a.length>0)}function da(c){let a=c??t()?.workspaceId;if(!a)throw new o("Workspace ID required \u2014 pass --workspace <id> or select a workspace via `auth login`.");return a}function ca(c){let a={};return c.limit!==void 0&&(a.first=c.limit),c.cursor&&(a.after=c.cursor),Object.keys(a).length?a:void 0}async function l(c,a,t,e,n){try{let d=da(t.workspace),W=(await b$1(c,{filter:e,pagination:ca(t),workspaceId:d}))[a];if(!W)throw new o(`No "${a}" payload returned`);h$1({format:t.format},W.items,{headers:n.headers,rows:W.items.map(n.row)});}catch(d){g$1(d);}}function Bn(c){let a=c.command("portfolios").description("Planmagnet portfolios");a.command("list").description("List portfolios in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by status").option("--alignment <a>","Filter by strategic alignment").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.alignment&&(e.alignment=t.alignment.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(lt,"planmagnetPortfolios",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Owner","Alignment","Budget"],row:n=>[p(n.id,12),n.name,n.status,p(n.ownerId,12),n.alignment??"-",n.budgetTotal==null?"-":String(n.budgetTotal)]});}),a.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(gt,{id:t});if(!n.planmagnetPortfolio)throw new o(`Portfolio ${t} not found`);h$1(e,n.planmagnetPortfolio);}catch(n){g$1(n);}}),a.command("overview").description("Aggregated health & metrics overview for a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ft,{portfolioId:t});h$1(e,n.planmagnetPortfolioOverview);}catch(n){g$1(n);}}),a.command("create").description("Create a portfolio").requiredOption("--name <name>","Portfolio name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--status <s>","Status").option("--alignment <a>","Strategic alignment").option("--alignment-label <s>","Custom alignment label").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--fiscal-period <s>","Fiscal period").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.alignment&&(e.alignment=t.alignment.toUpperCase()),t.alignmentLabel&&(e.alignmentLabel=t.alignmentLabel),t.budgetTotal!==void 0&&(e.budgetTotal=t.budgetTotal),t.currency&&(e.currency=t.currency),t.fiscalPeriod&&(e.fiscalPeriod=t.fiscalPeriod),t.tags&&(e.tags=f(t.tags));let n=await b$1(It,{input:e});i(`Portfolio created: ${n.planmagnetCreatePortfolio.name}`),h$1(t,n.planmagnetCreatePortfolio);}catch(e){g$1(e);}}),a.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--name <name>","Portfolio name").option("--description <s>","Description").option("--status <s>","Status").option("--alignment <a>","Strategic alignment").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--owner <id>","Owner actor ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.alignment&&(n.alignment=e.alignment.toUpperCase()),e.budgetTotal!==void 0&&(n.budgetTotal=e.budgetTotal),e.currency&&(n.currency=e.currency),e.owner&&(n.ownerId=e.owner),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(yt,{id:t,input:n});i("Portfolio updated"),h$1(e,d.planmagnetUpdatePortfolio);}catch(n){g$1(n);}}),a.command("delete").description("Delete a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(wt,{id:t});if(!n.planmagnetDeletePortfolio)throw new o(`Portfolio ${t} could not be deleted`);i(`Portfolio ${t} deleted`),h$1(e,{deleted:n.planmagnetDeletePortfolio});}catch(n){g$1(n);}});}function Gn(c){let a=c.command("programs").description("Planmagnet programs");a.command("list").description("List programs in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(pt,"planmagnetPrograms",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Owner","Budget","Currency"],row:n=>[p(n.id,12),n.name,n.status,p(n.ownerId,12),n.budgetTotal==null?"-":String(n.budgetTotal),n.currency??"-"]});}),a.command("get").description("Get a program by id").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(mt,{id:t});if(!n.planmagnetProgram)throw new o(`Program ${t} not found`);h$1(e,n.planmagnetProgram);}catch(n){g$1(n);}}),a.command("create").description("Create a program").requiredOption("--name <name>","Program name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--status <s>","Status").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.budgetTotal!==void 0&&(e.budgetTotal=t.budgetTotal),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(dt,{input:e});i(`Program created: ${n.planmagnetCreateProgram.name}`),h$1(t,n.planmagnetCreateProgram);}catch(e){g$1(e);}}),a.command("update").description("Update a program").argument("<id>","Program ID").option("--name <name>","Program name").option("--description <s>","Description").option("--status <s>","Status").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--owner <id>","Owner actor ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.budgetTotal!==void 0&&(n.budgetTotal=e.budgetTotal),e.currency&&(n.currency=e.currency),e.owner&&(n.ownerId=e.owner),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ct,{id:t,input:n});i("Program updated"),h$1(e,d.planmagnetUpdateProgram);}catch(n){g$1(n);}}),a.command("delete").description("Soft-delete a program").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ut,{id:t});if(!n.planmagnetDeleteProgram)throw new o(`Program ${t} could not be deleted`);i(`Program ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteProgram});}catch(n){g$1(n);}});}function Wn(c){let a=c.command("projects").description("Planmagnet projects");a.command("list").description("List projects in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by project status").option("--methodology <m>","Filter by methodology").option("--owner <id>","Filter by owner ID").option("--program <id>","Filter by program ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.methodology&&(e.methodology=t.methodology.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.program&&(e.programId=t.program),t.search&&(e.search=t.search),await l(X,"planmagnetProjects",t,Object.keys(e).length?e:void 0,{headers:["ID","Key","Name","Status","Methodology","Owner"],row:n=>[p(n.id,12),n.key,n.name,n.status,n.methodology,p(n.ownerId,12)]});}),a.command("get").description("Get a project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(z,{id:t});if(!n.planmagnetProject)throw new o(`Project ${t} not found`);h$1(e,n.planmagnetProject);}catch(n){g$1(n);}}),a.command("create").description("Create a project").requiredOption("--key <key>","Project key/prefix (e.g. PROJ)").requiredOption("--name <name>","Project name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--methodology <m>","Methodology (AGILE|SCRUM|KANBAN|WATERFALL|HYBRID|CUSTOM)").option("--status <s>","Initial status").option("--program <id>","Parent program ID").option("--default-assignee <id>","Default assignee actor ID").option("--start-date <iso>","Planned start date (ISO)").option("--end-date <iso>","Planned end date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={key:t.key,name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.methodology&&(e.methodology=t.methodology.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.program&&(e.programId=t.program),t.defaultAssignee&&(e.defaultAssigneeId=t.defaultAssignee),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(H,{input:e});i(`Project created: ${n.planmagnetCreateProject.key}`),h$1(t,n.planmagnetCreateProject);}catch(e){g$1(e);}}),a.command("update").description("Update a project").argument("<id>","Project ID").option("--name <name>","Project name").option("--description <s>","Description").option("--status <s>","Status").option("--methodology <m>","Methodology").option("--owner <id>","Owner actor ID").option("--program <id>","Parent program ID").option("--default-assignee <id>","Default assignee actor ID").option("--start-date <iso>","Planned start date (ISO)").option("--end-date <iso>","Planned end date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.methodology&&(n.methodology=e.methodology.toUpperCase()),e.owner&&(n.ownerId=e.owner),e.program&&(n.programId=e.program),e.defaultAssignee&&(n.defaultAssigneeId=e.defaultAssignee),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.tags&&(n.tags=f(e.tags)),e.metadata&&(n.metadata=g("metadata",e.metadata)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Z,{id:t,input:n});i("Project updated"),h$1(e,d.planmagnetUpdateProject);}catch(n){g$1(n);}}),a.command("delete").description("Soft-delete a project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(tt,{id:t});if(!n.planmagnetDeleteProject)throw new o(`Project ${t} could not be deleted`);i(`Project ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteProject});}catch(n){g$1(n);}});}function Vn(c){let a=c.command("templates").description("Planmagnet project templates");a.command("list").description("List project templates in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--category <c>","Filter by category").option("--built-in","Only built-in templates").option("--published","Only published templates").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.category&&(e.category=t.category),t.builtIn&&(e.isBuiltIn=true),t.published&&(e.isPublished=true),t.search&&(e.search=t.search),await l(et,"planmagnetProjectTemplates",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Category","Built-in","Published","Usage"],row:n=>[p(n.id,12),n.name,n.category??"-",String(n.isBuiltIn),String(n.isPublished),String(n.usageCount)]});}),a.command("get").description("Get a project template by id").argument("<id>","Template ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(nt,{id:t});if(!n.planmagnetProjectTemplate)throw new o(`Template ${t} not found`);h$1(e,n.planmagnetProjectTemplate);}catch(n){g$1(n);}}),a.command("create").description("Create a project template").requiredOption("--name <name>","Template name").requiredOption("--configuration <json>","Template configuration JSON").option("--description <s>","Description").option("--category <c>","Category").option("--published","Mark as published").option("--board-config <json>","Board layout JSON").option("--sprint-config <json>","Sprint configuration JSON").option("--custom-fields-config <json>","Custom field definitions JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,configuration:g("configuration",t.configuration)};t.description&&(e.description=t.description),t.category&&(e.category=t.category),t.published&&(e.isPublished=!0),t.boardConfig&&(e.boardConfig=g("board-config",t.boardConfig)),t.sprintConfig&&(e.sprintConfig=g("sprint-config",t.sprintConfig)),t.customFieldsConfig&&(e.customFieldsConfig=g("custom-fields-config",t.customFieldsConfig)),t.tags&&(e.tags=f(t.tags));let n=await b$1(at,{input:e});i(`Template created: ${n.planmagnetCreateProjectTemplate.name}`),h$1(t,n.planmagnetCreateProjectTemplate);}catch(e){g$1(e);}}),a.command("update").description("Update a project template").argument("<id>","Template ID").option("--name <name>","Template name").option("--description <s>","Description").option("--category <c>","Category").option("--published <bool>","Published flag (true|false)").option("--configuration <json>","Configuration JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.category&&(n.category=e.category),e.published!==void 0&&(n.isPublished=e.published==="true"),e.configuration&&(n.configuration=g("configuration",e.configuration)),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(it,{id:t,input:n});i("Template updated"),h$1(e,d.planmagnetUpdateProjectTemplate);}catch(n){g$1(n);}}),a.command("delete").description("Delete a project template").argument("<id>","Template ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ot,{id:t});if(!n.planmagnetDeleteProjectTemplate)throw new o(`Template ${t} could not be deleted`);i(`Template ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteProjectTemplate});}catch(n){g$1(n);}}),a.command("apply").description("Apply a template to create a new project").requiredOption("--template <id>","Template ID").requiredOption("--name <name>","New project name").requiredOption("--owner <id>","Owner actor ID").option("--project-description <s>","New project description").option("-f, --format <format>","Output format").action(async t=>{try{let e={templateId:t.template,projectName:t.name,ownerId:t.owner};t.projectDescription&&(e.projectDescription=t.projectDescription);let n=await b$1(rt,{input:e});i(`Project created from template: ${n.planmagnetApplyTemplate.key}`),h$1(t,n.planmagnetApplyTemplate);}catch(e){g$1(e);}}),a.command("from-project").description("Create a template from an existing project").requiredOption("--project <id>","Source project ID").requiredOption("--name <name>","Template name").option("--description <s>","Template description").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(st,{projectId:t.project,name:t.name,description:t.description});i(`Template created: ${e.planmagnetCreateTemplateFromProject.name}`),h$1(t,e.planmagnetCreateTemplateFromProject);}catch(e){g$1(e);}});}function Qn(c){let a=c.command("work-items").description("Planmagnet work items");a.command("list").description("List work items in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--sprint <id>","Filter by sprint ID").option("--status <s>","Filter by status").option("--type <t>","Filter by type").option("--priority <p>","Filter by priority").option("--assignee <id>","Filter by assignee ID").option("--parent <id>","Filter by parent work item ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.sprint&&(e.sprintId=t.sprint),t.status&&(e.status=t.status.toUpperCase()),t.type&&(e.type=t.type.toUpperCase()),t.priority&&(e.priority=t.priority.toUpperCase()),t.assignee&&(e.assigneeId=t.assignee),t.parent&&(e.parentId=t.parent),t.search&&(e.search=t.search),await l(Et,"planmagnetWorkItems",t,Object.keys(e).length?e:void 0,{headers:["ID","Key","Title","Type","Status","Priority"],row:n=>[p(n.id,12),n.key,p(n.title,32),n.type,n.status,n.priority]});}),a.command("get").description("Get a work item by id").argument("<id>","Work item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Dt,{id:t});if(!n.planmagnetWorkItem)throw new o(`Work item ${t} not found`);h$1(e,n.planmagnetWorkItem);}catch(n){g$1(n);}}),a.command("create").description("Create a work item").requiredOption("--project <id>","Project ID").requiredOption("--title <s>","Title").requiredOption("--type <t>","Type (EPIC|STORY|TASK|BUG|SUB_TASK)").option("--description <s>","Description").option("--status <s>","Status").option("--priority <p>","Priority").option("--assignee <id>","Assignee actor ID").option("--reporter <id>","Reporter actor ID").option("--parent <id>","Parent work item ID").option("--sprint <id>","Sprint ID").option("--story-points <n>","Story points",u).option("--estimate-minutes <n>","Estimate in minutes",u).option("--due-date <iso>","Due date (ISO)").option("--labels <csv>","Comma-separated labels").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title,type:t.type.toUpperCase()};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.priority&&(e.priority=t.priority.toUpperCase()),t.assignee&&(e.assigneeId=t.assignee),t.reporter&&(e.reporterId=t.reporter),t.parent&&(e.parentId=t.parent),t.sprint&&(e.sprintId=t.sprint),t.storyPoints!==void 0&&(e.storyPoints=t.storyPoints),t.estimateMinutes!==void 0&&(e.estimateMinutes=t.estimateMinutes),t.dueDate&&(e.dueDate=t.dueDate),t.labels&&(e.labels=f(t.labels)),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(Tt,{input:e});i(`Work item created: ${n.planmagnetCreateWorkItem.key}`),h$1(t,n.planmagnetCreateWorkItem);}catch(e){g$1(e);}}),a.command("update").description("Update a work item").argument("<id>","Work item ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--priority <p>","Priority").option("--type <t>","Type").option("--assignee <id>","Assignee actor ID").option("--sprint <id>","Sprint ID").option("--story-points <n>","Story points",u).option("--estimate-minutes <n>","Estimate in minutes",u).option("--due-date <iso>","Due date (ISO)").option("--labels <csv>","Comma-separated labels").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.priority&&(n.priority=e.priority.toUpperCase()),e.type&&(n.type=e.type.toUpperCase()),e.assignee&&(n.assigneeId=e.assignee),e.sprint&&(n.sprintId=e.sprint),e.storyPoints!==void 0&&(n.storyPoints=e.storyPoints),e.estimateMinutes!==void 0&&(n.estimateMinutes=e.estimateMinutes),e.dueDate&&(n.dueDate=e.dueDate),e.labels&&(n.labels=f(e.labels)),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Rt,{id:t,input:n});i("Work item updated"),h$1(e,d.planmagnetUpdateWorkItem);}catch(n){g$1(n);}}),a.command("delete").description("Soft-delete a work item").argument("<id>","Work item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Pt,{id:t});if(!n.planmagnetDeleteWorkItem)throw new o(`Work item ${t} could not be deleted`);i(`Work item ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteWorkItem});}catch(n){g$1(n);}}),a.command("assign").description("Assign a work item to an actor").argument("<id>","Work item ID").requiredOption("--assignee <id>","Assignee actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ot,{id:t,input:{assigneeId:e.assignee}});i(`Work item ${t} assigned to ${e.assignee}`),h$1(e,n.planmagnetAssignWorkItem);}catch(n){g$1(n);}}),a.command("move").description("Move a work item to a different status, sprint, or position").argument("<id>","Work item ID").option("--status <s>","Target status").option("--sprint <id>","Target sprint ID").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.status&&(n.status=e.status.toUpperCase()),e.sprint&&(n.sprintId=e.sprint),e.sortOrder!==void 0&&(n.sortOrder=e.sortOrder),!Object.keys(n).length)throw new o("Nothing to move \u2014 specify a target");let d=await b$1(Ct,{id:t,input:n});i("Work item moved"),h$1(e,d.planmagnetMoveWorkItem);}catch(n){g$1(n);}}),a.command("bulk-update").description("Bulk update multiple work items at once").requiredOption("--ids <csv>","Comma-separated work item IDs").option("--status <s>","Status").option("--priority <p>","Priority").option("--assignee <id>","Assignee actor ID").option("--sprint <id>","Sprint ID").option("--labels <csv>","Comma-separated labels").option("-f, --format <format>","Output format").action(async t=>{try{let e=f(t.ids);if(!e.length)throw new o("--ids must contain at least one ID");let n={ids:e};t.status&&(n.status=t.status.toUpperCase()),t.priority&&(n.priority=t.priority.toUpperCase()),t.assignee&&(n.assigneeId=t.assignee),t.sprint&&(n.sprintId=t.sprint),t.labels&&(n.labels=f(t.labels));let d=await b$1($t,{input:n});i(`Updated ${d.planmagnetBulkUpdateWorkItems.length} work item(s)`),h$1(t,d.planmagnetBulkUpdateWorkItems);}catch(e){g$1(e);}});}function Jn(c){let a=c.command("dependencies").description("Planmagnet work item dependencies");a.command("list").description("List dependencies in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--source <id>","Filter by source work item ID").option("--target <id>","Filter by target work item ID").option("--type <t>","Filter by dependency type").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.source&&(e.sourceWorkItemId=t.source),t.target&&(e.targetWorkItemId=t.target),t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),await l(kt,"planmagnetDependencies",t,Object.keys(e).length?e:void 0,{headers:["ID","Source","Target","Type","Status"],row:n=>[p(n.id,12),p(n.sourceWorkItemId,12),p(n.targetWorkItemId,12),n.type,n.status]});}),a.command("get").description("Get a dependency by id").argument("<id>","Dependency ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(St,{id:t});if(!n.planmagnetDependency)throw new o(`Dependency ${t} not found`);h$1(e,n.planmagnetDependency);}catch(n){g$1(n);}}),a.command("create").description("Create a dependency between two work items").requiredOption("--source <id>","Source work item ID").requiredOption("--target <id>","Target work item ID").requiredOption("--type <t>","Type (BLOCKS|BLOCKED_BY|RELATES_TO|\u2026)").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async t=>{try{let e={sourceWorkItemId:t.source,targetWorkItemId:t.target,type:t.type.toUpperCase()};t.description&&(e.description=t.description);let n=await b$1(ht,{input:e});i("Dependency created"),h$1(t,n.planmagnetCreateDependency);}catch(e){g$1(e);}}),a.command("update").description("Update a dependency").argument("<id>","Dependency ID").option("--type <t>","Type").option("--status <s>","Status").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.description!==void 0&&(n.description=e.description),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(At,{id:t,input:n});i("Dependency updated"),h$1(e,d.planmagnetUpdateDependency);}catch(n){g$1(n);}}),a.command("delete").description("Remove a dependency").argument("<id>","Dependency ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(bt,{id:t});if(!n.planmagnetDeleteDependency)throw new o(`Dependency ${t} could not be removed`);i(`Dependency ${t} removed`),h$1(e,{removed:n.planmagnetDeleteDependency});}catch(n){g$1(n);}});}async function Y(c,a,t,e,n){try{let P=(await b$1(c,{id:t}))[a];if(!P)throw new o(`Sprint ${t} could not be ${e}`);i(`Sprint ${t} ${e}`),h$1(n,P);}catch(d){g$1(d);}}function Yn(c){let a=c.command("sprints").description("Planmagnet sprints");a.command("list").description("List sprints in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(_t,"planmagnetSprints",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Project","Capacity","Velocity"],row:n=>[p(n.id,12),n.name,n.status,p(n.projectId,12),n.capacity==null?"-":String(n.capacity),n.velocity==null?"-":String(n.velocity)]});}),a.command("get").description("Get a sprint by id").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ut,{id:t});if(!n.planmagnetSprint)throw new o(`Sprint ${t} not found`);h$1(e,n.planmagnetSprint);}catch(n){g$1(n);}}),a.command("create").description("Create a sprint").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Sprint name").option("--goal <s>","Sprint goal").option("--capacity <n>","Capacity (story points)",u).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name};t.goal&&(e.goal=t.goal),t.capacity!==void 0&&(e.capacity=t.capacity),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Lt,{input:e});i(`Sprint created: ${n.planmagnetCreateSprint.name}`),h$1(t,n.planmagnetCreateSprint);}catch(e){g$1(e);}}),a.command("update").description("Update a sprint").argument("<id>","Sprint ID").option("--name <name>","Sprint name").option("--goal <s>","Sprint goal").option("--capacity <n>","Capacity",u).option("--velocity <n>","Velocity",u).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.goal!==void 0&&(n.goal=e.goal),e.capacity!==void 0&&(n.capacity=e.capacity),e.velocity!==void 0&&(n.velocity=e.velocity),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(jt,{id:t,input:n});i("Sprint updated"),h$1(e,d.planmagnetUpdateSprint);}catch(n){g$1(n);}}),a.command("delete").description("Soft-delete a sprint").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(xt,{id:t});if(!n.planmagnetDeleteSprint)throw new o(`Sprint ${t} could not be deleted`);i(`Sprint ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteSprint});}catch(n){g$1(n);}}),a.command("start").description("Start a sprint (transition to ACTIVE)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Ft,"planmagnetStartSprint",t,"started",e)),a.command("complete").description("Complete a sprint (transition to COMPLETED)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Mt,"planmagnetCompleteSprint",t,"completed",e)),a.command("cancel").description("Cancel a sprint (transition to CANCELLED)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Nt,"planmagnetCancelSprint",t,"cancelled",e)),a.command("add-items").description("Add work items to a sprint").argument("<id>","Sprint ID").requiredOption("--work-items <csv>","Comma-separated work item IDs").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=f(e.workItems);if(!n.length)throw new o("--work-items must contain at least one ID");let d=await b$1(qt,{id:t,input:{workItemIds:n}});i(`Added ${n.length} work item(s) to sprint ${t}`),h$1(e,d.planmagnetAddWorkItemsToSprint);}catch(n){g$1(n);}}),a.command("remove-items").description("Remove work items from a sprint").argument("<id>","Sprint ID").requiredOption("--work-items <csv>","Comma-separated work item IDs").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=f(e.workItems);if(!n.length)throw new o("--work-items must contain at least one ID");let d=await b$1(vt,{id:t,input:{workItemIds:n}});i(`Removed ${n.length} work item(s) from sprint ${t}`),h$1(e,d.planmagnetRemoveWorkItemsFromSprint);}catch(n){g$1(n);}});}function Kn(c){let a=c.command("boards").description("Planmagnet boards");a.command("list").description("List boards in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--type <t>","Filter by board type").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.type&&(e.type=t.type.toUpperCase()),t.search&&(e.search=t.search),await l(Bt,"planmagnetBoards",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Default","Project","Columns"],row:n=>[p(n.id,12),n.name,n.type,String(n.isDefault),p(n.projectId,12),String(n.columns?.length??0)]});}),a.command("get").description("Get a board by id").argument("<id>","Board ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Gt,{id:t});if(!n.planmagnetBoard)throw new o(`Board ${t} not found`);h$1(e,n.planmagnetBoard);}catch(n){g$1(n);}}),a.command("create").description("Create a board").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Board name").requiredOption("--type <t>","Board type (KANBAN|SCRUM|CUSTOM)").option("--description <s>","Description").option("--default","Make this the default board").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,type:t.type.toUpperCase()};t.description&&(e.description=t.description),t.default&&(e.isDefault=!0);let n=await b$1(Wt,{input:e});i(`Board created: ${n.planmagnetCreateBoard.name}`),h$1(t,n.planmagnetCreateBoard);}catch(e){g$1(e);}}),a.command("update").description("Update a board").argument("<id>","Board ID").option("--name <name>","Board name").option("--description <s>","Description").option("--type <t>","Board type").option("--default <bool>","Default flag (true|false)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.type&&(n.type=e.type.toUpperCase()),e.default!==void 0&&(n.isDefault=e.default==="true"),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Vt,{id:t,input:n});i("Board updated"),h$1(e,d.planmagnetUpdateBoard);}catch(n){g$1(n);}}),a.command("delete").description("Delete a board").argument("<id>","Board ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Qt,{id:t});if(!n.planmagnetDeleteBoard)throw new o(`Board ${t} could not be deleted`);i(`Board ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteBoard});}catch(n){g$1(n);}}),a.command("create-column").description("Create a column on a board").requiredOption("--board <id>","Board ID").requiredOption("--name <name>","Column name").requiredOption("--type <t>","Column type (TODO|IN_PROGRESS|DONE|CUSTOM)").option("--mapped-status <s>","Mapped work item status").option("--wip-limit <n>","WIP limit (0 = unlimited)",u).option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={boardId:t.board,name:t.name,type:t.type.toUpperCase()};t.mappedStatus&&(e.mappedStatus=t.mappedStatus.toUpperCase()),t.wipLimit!==void 0&&(e.wipLimit=t.wipLimit),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Jt,{input:e});i(`Column created: ${n.planmagnetCreateBoardColumn.name}`),h$1(t,n.planmagnetCreateBoardColumn);}catch(e){g$1(e);}}),a.command("update-column").description("Update a board column").argument("<id>","Column ID").option("--name <name>","Column name").option("--type <t>","Column type").option("--mapped-status <s>","Mapped work item status").option("--wip-limit <n>","WIP limit",u).option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.mappedStatus&&(n.mappedStatus=e.mappedStatus.toUpperCase()),e.wipLimit!==void 0&&(n.wipLimit=e.wipLimit),e.sortOrder!==void 0&&(n.sortOrder=e.sortOrder),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Yt,{id:t,input:n});i("Column updated"),h$1(e,d.planmagnetUpdateBoardColumn);}catch(n){g$1(n);}}),a.command("delete-column").description("Delete a board column").argument("<id>","Column ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Kt,{id:t});if(!n.planmagnetDeleteBoardColumn)throw new o(`Column ${t} could not be deleted`);i(`Column ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteBoardColumn});}catch(n){g$1(n);}}),a.command("move-card").description("Move a card (work item) to a different column and/or position").requiredOption("--board <id>","Board ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--column <id>","Target column ID").option("--sort-order <n>","Sort order within the column",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={workItemId:t.workItem,targetColumnId:t.column};t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Xt,{boardId:t.board,input:e});i("Card moved"),h$1(t,n.planmagnetMoveCard);}catch(e){g$1(e);}}),a.command("reorder-columns").description("Reorder columns on a board").requiredOption("--board <id>","Board ID").requiredOption("--columns <csv>","Comma-separated ordered column IDs").option("-f, --format <format>","Output format").action(async t=>{try{let e=f(t.columns);if(!e.length)throw new o("--columns must contain at least one ID");let n=await b$1(zt,{boardId:t.board,input:{columnIds:e}});i("Columns reordered"),h$1(t,n.planmagnetReorderColumns);}catch(e){g$1(e);}});}function Xn(c){let a=c.command("milestones").description("Planmagnet milestones");a.command("list").description("List milestones in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(Ht,"planmagnetMilestones",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Project","Due"],row:n=>[p(n.id,12),n.name,n.status,p(n.projectId,12),n.dueDate??"-"]});}),a.command("get").description("Get a milestone by id").argument("<id>","Milestone ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Zt,{id:t});if(!n.planmagnetMilestone)throw new o(`Milestone ${t} not found`);h$1(e,n.planmagnetMilestone);}catch(n){g$1(n);}}),a.command("create").description("Create a milestone").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Milestone name").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--due-date <iso>","Target due date (ISO)").option("--sort-order <n>","Sort order",u).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.dueDate&&(e.dueDate=t.dueDate),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder),t.tags&&(e.tags=f(t.tags));let n=await b$1(te,{input:e});i(`Milestone created: ${n.planmagnetCreateMilestone.name}`),h$1(t,n.planmagnetCreateMilestone);}catch(e){g$1(e);}}),a.command("update").description("Update a milestone").argument("<id>","Milestone ID").option("--name <name>","Milestone name").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--due-date <iso>","Target due date (ISO)").option("--completed-at <iso>","Completion date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.owner&&(n.ownerId=e.owner),e.dueDate&&(n.dueDate=e.dueDate),e.completedAt&&(n.completedAt=e.completedAt),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ee,{id:t,input:n});i("Milestone updated"),h$1(e,d.planmagnetUpdateMilestone);}catch(n){g$1(n);}}),a.command("delete").description("Delete a milestone").argument("<id>","Milestone ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ne,{id:t});if(!n.planmagnetDeleteMilestone)throw new o(`Milestone ${t} could not be deleted`);i(`Milestone ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteMilestone});}catch(n){g$1(n);}});}function zn(c){let a=c.command("releases").description("Planmagnet releases");a.command("list").description("List releases in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(ae,"planmagnetReleases",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Version","Status","Project"],row:n=>[p(n.id,12),n.name,n.version,n.status,p(n.projectId,12)]});}),a.command("get").description("Get a release by id").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ie,{id:t});if(!n.planmagnetRelease)throw new o(`Release ${t} not found`);h$1(e,n.planmagnetRelease);}catch(n){g$1(n);}}),a.command("create").description("Create a release").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Release name").requiredOption("--version <v>","Release version (e.g. 1.2.0)").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--planned-date <iso>","Planned release date (ISO)").option("--release-notes <s>","Release notes (markdown)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,version:t.version};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.plannedDate&&(e.plannedDate=t.plannedDate),t.releaseNotes&&(e.releaseNotes=t.releaseNotes),t.tags&&(e.tags=f(t.tags));let n=await b$1(oe,{input:e});i(`Release created: ${n.planmagnetCreateRelease.version}`),h$1(t,n.planmagnetCreateRelease);}catch(e){g$1(e);}}),a.command("update").description("Update a release").argument("<id>","Release ID").option("--name <name>","Release name").option("--version <v>","Version").option("--description <s>","Description").option("--status <s>","Status").option("--planned-date <iso>","Planned date (ISO)").option("--released-at <iso>","Actual release date (ISO)").option("--release-notes <s>","Release notes").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.version&&(n.version=e.version),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.plannedDate&&(n.plannedDate=e.plannedDate),e.releasedAt&&(n.releasedAt=e.releasedAt),e.releaseNotes&&(n.releaseNotes=e.releaseNotes),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(re,{id:t,input:n});i("Release updated"),h$1(e,d.planmagnetUpdateRelease);}catch(n){g$1(n);}}),a.command("delete").description("Delete a release").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(se,{id:t});if(!n.planmagnetDeleteRelease)throw new o(`Release ${t} could not be deleted`);i(`Release ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteRelease});}catch(n){g$1(n);}});}function Hn(c){let a=c.command("quality-gates").description("Planmagnet quality gates");a.command("list").description("List quality gates in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--milestone <id>","Filter by milestone ID").option("--phase <p>","Filter by phase").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.phase&&(e.phase=t.phase),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(pe,"planmagnetQualityGates",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Phase","Project"],row:n=>[p(n.id,12),n.name,n.status,n.phase??"-",p(n.projectId,12)]});}),a.command("get").description("Get a quality gate by id").argument("<id>","Quality gate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(me,{id:t});if(!n.planmagnetQualityGate)throw new o(`Quality gate ${t} not found`);h$1(e,n.planmagnetQualityGate);}catch(n){g$1(n);}}),a.command("create").description("Create a quality gate").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Gate name").requiredOption("--criteria <json>","Criteria JSON array").option("--description <s>","Description").option("--phase <p>","Phase / stage").option("--milestone <id>","Linked milestone ID").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,criteria:g("criteria",t.criteria)};t.description&&(e.description=t.description),t.phase&&(e.phase=t.phase),t.milestone&&(e.milestoneId=t.milestone),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(de,{input:e});i(`Quality gate created: ${n.planmagnetCreateQualityGate.name}`),h$1(t,n.planmagnetCreateQualityGate);}catch(e){g$1(e);}}),a.command("update").description("Update a quality gate").argument("<id>","Quality gate ID").option("--name <name>","Gate name").option("--description <s>","Description").option("--phase <p>","Phase").option("--status <s>","Status").option("--criteria <json>","Criteria JSON array").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.phase&&(n.phase=e.phase),e.status&&(n.status=e.status.toUpperCase()),e.criteria&&(n.criteria=g("criteria",e.criteria)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ce,{id:t,input:n});i("Quality gate updated"),h$1(e,d.planmagnetUpdateQualityGate);}catch(n){g$1(n);}}),a.command("delete").description("Delete a quality gate").argument("<id>","Quality gate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ue,{id:t});if(!n.planmagnetDeleteQualityGate)throw new o(`Quality gate ${t} could not be deleted`);i(`Quality gate ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteQualityGate});}catch(n){g$1(n);}}),a.command("review").description("Review a quality gate (pass, fail, or waive)").argument("<id>","Quality gate ID").requiredOption("--status <s>","Review status (PASSED|FAILED|WAIVED|IN_REVIEW|PENDING)").option("--notes <s>","Review notes").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={status:e.status.toUpperCase()};e.notes&&(n.reviewNotes=e.notes);let d=await b$1(le,{id:t,input:n});i(`Quality gate reviewed: ${d.planmagnetReviewQualityGate.status}`),h$1(e,d.planmagnetReviewQualityGate);}catch(n){g$1(n);}});}function Zn(c){let a=c.command("budgets").description("Planmagnet budgets & expenses");a.command("list").description("List budgets in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(ge,"planmagnetBudgets",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Currency","Planned","Spent","Remaining"],row:n=>[p(n.id,12),n.name,n.status,n.currency,String(n.plannedAmount),String(n.spentAmount),String(n.remainingAmount)]});}),a.command("get").description("Get a budget by id").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(fe,{id:t});if(!n.planmagnetBudget)throw new o(`Budget ${t} not found`);h$1(e,n.planmagnetBudget);}catch(n){g$1(n);}}),a.command("create").description("Create a budget").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Budget name").requiredOption("--currency <c>","Currency code (e.g. USD)").requiredOption("--planned-amount <n>","Planned amount",D).option("--description <s>","Description").option("--period-start <iso>","Period start (ISO)").option("--period-end <iso>","Period end (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,currency:t.currency,plannedAmount:t.plannedAmount};t.description&&(e.description=t.description),t.periodStart&&(e.periodStart=t.periodStart),t.periodEnd&&(e.periodEnd=t.periodEnd);let n=await b$1(ye,{input:e});i(`Budget created: ${n.planmagnetCreateBudget.name}`),h$1(t,n.planmagnetCreateBudget);}catch(e){g$1(e);}}),a.command("update").description("Update a budget").argument("<id>","Budget ID").option("--name <name>","Budget name").option("--description <s>","Description").option("--status <s>","Status").option("--currency <c>","Currency code").option("--planned-amount <n>","Planned amount",D).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.currency&&(n.currency=e.currency),e.plannedAmount!==void 0&&(n.plannedAmount=e.plannedAmount),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(we,{id:t,input:n});i("Budget updated"),h$1(e,d.planmagnetUpdateBudget);}catch(n){g$1(n);}}),a.command("delete").description("Delete a budget").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ee,{id:t});if(!n.planmagnetDeleteBudget)throw new o(`Budget ${t} could not be deleted`);i(`Budget ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteBudget});}catch(n){g$1(n);}}),a.command("approve").description("Approve a budget").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(De,{id:t});i(`Budget ${t} approved`),h$1(e,n.planmagnetApproveBudget);}catch(n){g$1(n);}}),a.command("expenses").description("List budget expenses").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--budget <id>","Filter by budget ID").option("--category <c>","Filter by category").option("--date-from <iso>","Filter from date (ISO)").option("--date-to <iso>","Filter to date (ISO)").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.budget&&(e.budgetId=t.budget),t.category&&(e.category=t.category),t.dateFrom&&(e.dateFrom=t.dateFrom),t.dateTo&&(e.dateTo=t.dateTo),await l(Ie,"planmagnetBudgetExpenses",t,Object.keys(e).length?e:void 0,{headers:["ID","Budget","Amount","Category","Description","Date"],row:n=>[p(n.id,12),p(n.budgetId,12),String(n.amount),n.category??"-",p(n.description,24),n.date]});}),a.command("log-expense").description("Log an expense against a budget").requiredOption("--budget <id>","Budget ID").requiredOption("--amount <n>","Amount",D).requiredOption("--description <s>","Description").requiredOption("--date <iso>","Date (ISO)").option("--category <c>","Category").option("--reference-url <url>","Receipt / reference URL").option("--work-item <id>","Associated work item ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={budgetId:t.budget,amount:t.amount,description:t.description,date:t.date};t.category&&(e.category=t.category),t.referenceUrl&&(e.referenceUrl=t.referenceUrl),t.workItem&&(e.workItemId=t.workItem);let n=await b$1(Te,{input:e});i("Expense logged"),h$1(t,n.planmagnetLogExpense);}catch(e){g$1(e);}}),a.command("update-expense").description("Update an expense").argument("<id>","Expense ID").option("--amount <n>","Amount",D).option("--category <c>","Category").option("--description <s>","Description").option("--date <iso>","Date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.amount!==void 0&&(n.amount=e.amount),e.category&&(n.category=e.category),e.description!==void 0&&(n.description=e.description),e.date&&(n.date=e.date),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Re,{id:t,input:n});i("Expense updated"),h$1(e,d.planmagnetUpdateExpense);}catch(n){g$1(n);}}),a.command("delete-expense").description("Delete an expense").argument("<id>","Expense ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Pe,{id:t});if(!n.planmagnetDeleteExpense)throw new o(`Expense ${t} could not be deleted`);i(`Expense ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteExpense});}catch(n){g$1(n);}});}function ta(c){let a=c.command("time").description("Planmagnet time tracking");a.command("entries").description("List time entries in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--work-item <id>","Filter by work item ID").option("--user <id>","Filter by user ID").option("--timesheet <id>","Filter by timesheet ID").option("--billing-type <t>","Filter by billing type").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.workItem&&(e.workItemId=t.workItem),t.user&&(e.userId=t.user),t.timesheet&&(e.timesheetId=t.timesheet),t.billingType&&(e.billingType=t.billingType.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),await l(Oe,"planmagnetTimeEntries",t,Object.keys(e).length?e:void 0,{headers:["ID","Project","Work Item","User","Minutes","Billing","Status"],row:n=>[p(n.id,12),p(n.projectId,12),p(n.workItemId,12),p(n.userId,12),String(n.durationMinutes),n.billingType,n.status]});}),a.command("entry").description("Get a time entry by id").argument("<id>","Time entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ce,{id:t});if(!n.planmagnetTimeEntry)throw new o(`Time entry ${t} not found`);h$1(e,n.planmagnetTimeEntry);}catch(n){g$1(n);}}),a.command("create-entry").description("Create a time entry").requiredOption("--project <id>","Project ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--date <iso>","Date worked (ISO)").requiredOption("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type (BILLABLE|NON_BILLABLE|INTERNAL)").option("--billing-rate <n>","Billing rate per hour",D).option("--timesheet <id>","Timesheet ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,workItemId:t.workItem,date:t.date,durationMinutes:t.minutes};t.description&&(e.description=t.description),t.billingType&&(e.billingType=t.billingType.toUpperCase()),t.billingRate!==void 0&&(e.billingRate=t.billingRate),t.timesheet&&(e.timesheetId=t.timesheet);let n=await b$1(Se,{input:e});i("Time entry created"),h$1(t,n.planmagnetCreateTimeEntry);}catch(e){g$1(e);}}),a.command("update-entry").description("Update a time entry").argument("<id>","Time entry ID").option("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type").option("--status <s>","Status").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.minutes!==void 0&&(n.durationMinutes=e.minutes),e.description!==void 0&&(n.description=e.description),e.billingType&&(n.billingType=e.billingType.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(he,{id:t,input:n});i("Time entry updated"),h$1(e,d.planmagnetUpdateTimeEntry);}catch(n){g$1(n);}}),a.command("delete-entry").description("Delete a time entry").argument("<id>","Time entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ae,{id:t});if(!n.planmagnetDeleteTimeEntry)throw new o(`Time entry ${t} could not be deleted`);i(`Time entry ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteTimeEntry});}catch(n){g$1(n);}}),a.command("log").description("Quick-log time against a work item").requiredOption("--project <id>","Project ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--date <iso>","Date (ISO)").requiredOption("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,workItemId:t.workItem,date:t.date,durationMinutes:t.minutes};t.description&&(e.description=t.description),t.billingType&&(e.billingType=t.billingType.toUpperCase());let n=await b$1(be,{input:e});i("Time logged"),h$1(t,n.planmagnetLogTime);}catch(e){g$1(e);}}),a.command("timesheets").description("List timesheets in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--user <id>","Filter by user ID").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.user&&(e.userId=t.user),t.status&&(e.status=t.status.toUpperCase()),await l($e,"planmagnetTimesheets",t,Object.keys(e).length?e:void 0,{headers:["ID","User","Status","Total Min","Billable Min"],row:n=>[p(n.id,12),p(n.userId,12),n.status,String(n.totalMinutes),String(n.billableMinutes)]});}),a.command("timesheet").description("Get a timesheet by id").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ke,{id:t});if(!n.planmagnetTimesheet)throw new o(`Timesheet ${t} not found`);h$1(e,n.planmagnetTimesheet);}catch(n){g$1(n);}}),a.command("create-timesheet").description("Create a timesheet").requiredOption("--period-start <iso>","Period start (ISO)").requiredOption("--period-end <iso>","Period end (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(_e,{input:{periodStart:t.periodStart,periodEnd:t.periodEnd}});i("Timesheet created"),h$1(t,e.planmagnetCreateTimesheet);}catch(e){g$1(e);}}),a.command("submit-timesheet").description("Submit a timesheet for approval").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ue,{id:t});i(`Timesheet ${t} submitted`),h$1(e,n.planmagnetSubmitTimesheet);}catch(n){g$1(n);}}),a.command("approve-timesheet").description("Approve a submitted timesheet").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Le,{id:t});i(`Timesheet ${t} approved`),h$1(e,n.planmagnetApproveTimesheet);}catch(n){g$1(n);}}),a.command("reject-timesheet").description("Reject a submitted timesheet").argument("<id>","Timesheet ID").option("--reason <s>","Rejection reason").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(je,{id:t,reason:e.reason});i(`Timesheet ${t} rejected`),h$1(e,n.planmagnetRejectTimesheet);}catch(n){g$1(n);}});}function ea(c){let a=c.command("risks").description("Planmagnet risks");a.command("list").description("List risks in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--severity <s>","Filter by severity").option("--category <c>","Filter by category").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.severity&&(e.severity=t.severity.toUpperCase()),t.category&&(e.category=t.category),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(xe,"planmagnetRisks",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Severity","Status","Score","Project"],row:n=>[p(n.id,12),p(n.title,28),n.severity,n.status,String(n.riskScore),p(n.projectId,12)]});}),a.command("get").description("Get a risk by id").argument("<id>","Risk ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Fe,{id:t});if(!n.planmagnetRisk)throw new o(`Risk ${t} not found`);h$1(e,n.planmagnetRisk);}catch(n){g$1(n);}}),a.command("matrix").description("Get the risk matrix for a project").argument("<projectId>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Me,{projectId:t});h$1(e,n.planmagnetRiskMatrix);}catch(n){g$1(n);}}),a.command("create").description("Create a risk").requiredOption("--project <id>","Project ID").requiredOption("--title <s>","Risk title").requiredOption("--severity <s>","Severity (NEGLIGIBLE|LOW|MEDIUM|HIGH|CRITICAL)").requiredOption("--likelihood <n>","Likelihood (1-5)",u).requiredOption("--impact <n>","Impact (1-5)",u).option("--description <s>","Description").option("--category <c>","Category").option("--owner <id>","Owner actor ID").option("--mitigation-plan <s>","Mitigation plan").option("--contingency-plan <s>","Contingency plan").option("--due-date <iso>","Mitigation due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title,severity:t.severity.toUpperCase(),likelihood:t.likelihood,impact:t.impact};t.description&&(e.description=t.description),t.category&&(e.category=t.category),t.owner&&(e.ownerId=t.owner),t.mitigationPlan&&(e.mitigationPlan=t.mitigationPlan),t.contingencyPlan&&(e.contingencyPlan=t.contingencyPlan),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=f(t.tags));let n=await b$1(Ne,{input:e});i(`Risk created: ${n.planmagnetCreateRisk.title}`),h$1(t,n.planmagnetCreateRisk);}catch(e){g$1(e);}}),a.command("update").description("Update a risk").argument("<id>","Risk ID").option("--title <s>","Title").option("--description <s>","Description").option("--severity <s>","Severity").option("--status <s>","Status").option("--likelihood <n>","Likelihood (1-5)",u).option("--impact <n>","Impact (1-5)",u).option("--mitigation-plan <s>","Mitigation plan").option("--owner <id>","Owner actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.severity&&(n.severity=e.severity.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.likelihood!==void 0&&(n.likelihood=e.likelihood),e.impact!==void 0&&(n.impact=e.impact),e.mitigationPlan&&(n.mitigationPlan=e.mitigationPlan),e.owner&&(n.ownerId=e.owner),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(qe,{id:t,input:n});i("Risk updated"),h$1(e,d.planmagnetUpdateRisk);}catch(n){g$1(n);}}),a.command("delete").description("Delete a risk").argument("<id>","Risk ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ve,{id:t});if(!n.planmagnetDeleteRisk)throw new o(`Risk ${t} could not be deleted`);i(`Risk ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteRisk});}catch(n){g$1(n);}});}function na(c){let a=c.command("roadmaps").description("Planmagnet roadmaps & roadmap items");a.command("list").description("List roadmaps in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--type <t>","Filter by roadmap type").option("--owner <id>","Filter by owner ID").option("--public","Only public roadmaps").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.type&&(e.type=t.type.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.public&&(e.isPublic=true),t.search&&(e.search=t.search),await l(Be,"planmagnetRoadmaps",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Public","Owner"],row:n=>[p(n.id,12),n.name,n.type,String(n.isPublic),p(n.ownerId,12)]});}),a.command("get").description("Get a roadmap by id").argument("<id>","Roadmap ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ge,{id:t});if(!n.planmagnetRoadmap)throw new o(`Roadmap ${t} not found`);h$1(e,n.planmagnetRoadmap);}catch(n){g$1(n);}}),a.command("create").description("Create a roadmap").requiredOption("--name <name>","Roadmap name").requiredOption("--type <t>","Type (TIMELINE|GANTT|SWIMLANE|CUSTOM)").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--public","Mark as publicly shared").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,type:t.type.toUpperCase(),ownerId:t.owner};t.description&&(e.description=t.description),t.public&&(e.isPublic=!0);let n=await b$1(Qe,{input:e});i(`Roadmap created: ${n.planmagnetCreateRoadmap.name}`),h$1(t,n.planmagnetCreateRoadmap);}catch(e){g$1(e);}}),a.command("update").description("Update a roadmap").argument("<id>","Roadmap ID").option("--name <name>","Roadmap name").option("--description <s>","Description").option("--type <t>","Type").option("--public <bool>","Public flag (true|false)").option("--owner <id>","Owner actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.type&&(n.type=e.type.toUpperCase()),e.public!==void 0&&(n.isPublic=e.public==="true"),e.owner&&(n.ownerId=e.owner),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Je,{id:t,input:n});i("Roadmap updated"),h$1(e,d.planmagnetUpdateRoadmap);}catch(n){g$1(n);}}),a.command("delete").description("Delete a roadmap").argument("<id>","Roadmap ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ye,{id:t});if(!n.planmagnetDeleteRoadmap)throw new o(`Roadmap ${t} could not be deleted`);i(`Roadmap ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteRoadmap});}catch(n){g$1(n);}}),a.command("items").description("List roadmap items").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--roadmap <id>","Filter by roadmap ID").option("--project <id>","Filter by project ID").option("--milestone <id>","Filter by milestone ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.roadmap&&(e.roadmapId=t.roadmap),t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(We,"planmagnetRoadmapItems",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Status","Roadmap"],row:n=>[p(n.id,12),p(n.title,32),n.status,p(n.roadmapId,12)]});}),a.command("get-item").description("Get a roadmap item by id").argument("<id>","Roadmap item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ve,{id:t});if(!n.planmagnetRoadmapItem)throw new o(`Roadmap item ${t} not found`);h$1(e,n.planmagnetRoadmapItem);}catch(n){g$1(n);}}),a.command("create-item").description("Create a roadmap item").requiredOption("--roadmap <id>","Roadmap ID").requiredOption("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--project <id>","Linked project ID").option("--milestone <id>","Linked milestone ID").option("--work-item <id>","Linked work item ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--color <c>","Display color").option("--swimlane <s>","Swimlane / row").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={roadmapId:t.roadmap,title:t.title};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.workItem&&(e.workItemId=t.workItem),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.color&&(e.color=t.color),t.swimlane&&(e.swimlane=t.swimlane),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Ke,{input:e});i(`Roadmap item created: ${n.planmagnetCreateRoadmapItem.title}`),h$1(t,n.planmagnetCreateRoadmapItem);}catch(e){g$1(e);}}),a.command("update-item").description("Update a roadmap item").argument("<id>","Roadmap item ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--color <c>","Display color").option("--swimlane <s>","Swimlane / row").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.color&&(n.color=e.color),e.swimlane&&(n.swimlane=e.swimlane),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Xe,{id:t,input:n});i("Roadmap item updated"),h$1(e,d.planmagnetUpdateRoadmapItem);}catch(n){g$1(n);}}),a.command("delete-item").description("Delete a roadmap item").argument("<id>","Roadmap item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ze,{id:t});if(!n.planmagnetDeleteRoadmapItem)throw new o(`Roadmap item ${t} could not be deleted`);i(`Roadmap item ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteRoadmapItem});}catch(n){g$1(n);}});}function aa(c){let a=c.command("features").description("Planmagnet feature requests");a.command("list").description("List feature requests in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--submitted-by <id>","Filter by submitter ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.submittedBy&&(e.submittedBy=t.submittedBy),t.search&&(e.search=t.search),await l(He,"planmagnetFeatureRequests",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Status","Votes","Priority","Submitter"],row:n=>[p(n.id,12),p(n.title,28),n.status,String(n.voteCount),n.priorityScore==null?"-":String(n.priorityScore),p(n.submittedBy,12)]});}),a.command("get").description("Get a feature request by id").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ze,{id:t});if(!n.planmagnetFeatureRequest)throw new o(`Feature request ${t} not found`);h$1(e,n.planmagnetFeatureRequest);}catch(n){g$1(n);}}),a.command("create").description("Create a feature request").requiredOption("--title <s>","Feature title").option("--description <s>","Description").option("--project <id>","Project ID").option("--status <s>","Status").option("--business-value <n>","Business value rating (1-10)",u).option("--effort-estimate <s>","Effort estimate (XS|S|M|L|XL)").option("--work-item <id>","Linked work item ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.description&&(e.description=t.description),t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.businessValue!==void 0&&(e.businessValue=t.businessValue),t.effortEstimate&&(e.effortEstimate=t.effortEstimate),t.workItem&&(e.workItemId=t.workItem),t.tags&&(e.tags=f(t.tags));let n=await b$1(tn,{input:e});i(`Feature request created: ${n.planmagnetCreateFeatureRequest.title}`),h$1(t,n.planmagnetCreateFeatureRequest);}catch(e){g$1(e);}}),a.command("update").description("Update a feature request").argument("<id>","Feature request ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--business-value <n>","Business value (1-10)",u).option("--effort-estimate <s>","Effort estimate").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.businessValue!==void 0&&(n.businessValue=e.businessValue),e.effortEstimate&&(n.effortEstimate=e.effortEstimate),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(en,{id:t,input:n});i("Feature request updated"),h$1(e,d.planmagnetUpdateFeatureRequest);}catch(n){g$1(n);}}),a.command("delete").description("Delete a feature request").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(nn,{id:t});if(!n.planmagnetDeleteFeatureRequest)throw new o(`Feature request ${t} could not be deleted`);i(`Feature request ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteFeatureRequest});}catch(n){g$1(n);}}),a.command("vote").description("Vote on a feature request").argument("<id>","Feature request ID").option("--weight <n>","Vote weight",u).option("--comment <s>","Optional comment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};e.weight!==void 0&&(n.weight=e.weight),e.comment&&(n.comment=e.comment);let d=await b$1(an,{featureRequestId:t,input:Object.keys(n).length?n:void 0});i(`Voted on feature request ${t}`),h$1(e,d.planmagnetVoteOnFeature);}catch(n){g$1(n);}}),a.command("remove-vote").description("Remove your vote from a feature request").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(on,{featureRequestId:t});if(!n.planmagnetRemoveFeatureVote)throw new o(`No vote to remove from feature request ${t}`);i(`Vote removed from feature request ${t}`),h$1(e,{removed:n.planmagnetRemoveFeatureVote});}catch(n){g$1(n);}}),a.command("link-competitor").description("Link a competitor to a feature request").requiredOption("--feature <id>","Feature request ID").requiredOption("--competitor <id>","Competitor ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(rn,{input:{featureRequestId:t.feature,competitorId:t.competitor}});i("Competitor linked"),h$1(t,e.planmagnetLinkCompetitorToFeature);}catch(e){g$1(e);}}),a.command("unlink-competitor").description("Unlink a competitor from a feature request").requiredOption("--feature <id>","Feature request ID").requiredOption("--competitor <id>","Competitor ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(sn,{input:{featureRequestId:t.feature,competitorId:t.competitor}});i("Competitor unlinked"),h$1(t,e.planmagnetUnlinkCompetitorFromFeature);}catch(e){g$1(e);}});}function ia(c){let a=c.command("competitors").description("Planmagnet competitors");a.command("list").description("List competitors in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.search&&(e.search=t.search),await l(pn,"planmagnetCompetitors",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Website"],row:n=>[p(n.id,12),n.name,n.website??"-"]});}),a.command("get").description("Get a competitor by id").argument("<id>","Competitor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(mn,{id:t});if(!n.planmagnetCompetitor)throw new o(`Competitor ${t} not found`);h$1(e,n.planmagnetCompetitor);}catch(n){g$1(n);}}),a.command("create").description("Create a competitor").requiredOption("--name <name>","Competitor name").option("--description <s>","Description / notes").option("--website <url>","Website URL").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.website&&(e.website=t.website),t.tags&&(e.tags=f(t.tags));let n=await b$1(dn,{input:e});i(`Competitor created: ${n.planmagnetCreateCompetitor.name}`),h$1(t,n.planmagnetCreateCompetitor);}catch(e){g$1(e);}}),a.command("update").description("Update a competitor").argument("<id>","Competitor ID").option("--name <name>","Name").option("--description <s>","Description").option("--website <url>","Website URL").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.website&&(n.website=e.website),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(cn,{id:t,input:n});i("Competitor updated"),h$1(e,d.planmagnetUpdateCompetitor);}catch(n){g$1(n);}}),a.command("delete").description("Delete a competitor").argument("<id>","Competitor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(un,{id:t});if(!n.planmagnetDeleteCompetitor)throw new o(`Competitor ${t} could not be deleted`);i(`Competitor ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteCompetitor});}catch(n){g$1(n);}});}function oa(c){let a=c.command("custom-fields").description("Planmagnet custom field definitions & values");a.command("list").description("List custom field definitions in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--field-type <t>","Filter by field type").option("--required","Only required fields").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.fieldType&&(e.fieldType=t.fieldType.toUpperCase()),t.required&&(e.isRequired=true),t.search&&(e.search=t.search),await l(gn,"planmagnetCustomFieldDefinitions",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Required","Project"],row:n=>[p(n.id,12),n.name,n.fieldType,String(n.isRequired),p(n.projectId,12)]});}),a.command("get").description("Get a custom field definition by id").argument("<id>","Definition ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(fn,{id:t});if(!n.planmagnetCustomFieldDefinition)throw new o(`Custom field definition ${t} not found`);h$1(e,n.planmagnetCustomFieldDefinition);}catch(n){g$1(n);}}),a.command("create").description("Create a custom field definition").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Field name").requiredOption("--field-type <t>","Field type (TEXT|NUMBER|DATE|SELECT|\u2026)").option("--description <s>","Description").option("--required","Mark as required").option("--default-value <json>","Default value JSON").option("--options <json>","Options JSON (for SELECT/MULTI_SELECT)").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,fieldType:t.fieldType.toUpperCase()};t.description&&(e.description=t.description),t.required&&(e.isRequired=!0),t.defaultValue&&(e.defaultValue=g("default-value",t.defaultValue)),t.options&&(e.options=g("options",t.options)),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(yn,{input:e});i(`Custom field created: ${n.planmagnetCreateCustomFieldDefinition.name}`),h$1(t,n.planmagnetCreateCustomFieldDefinition);}catch(e){g$1(e);}}),a.command("update").description("Update a custom field definition").argument("<id>","Definition ID").option("--name <name>","Field name").option("--description <s>","Description").option("--field-type <t>","Field type").option("--required <bool>","Required flag (true|false)").option("--options <json>","Options JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.fieldType&&(n.fieldType=e.fieldType.toUpperCase()),e.required!==void 0&&(n.isRequired=e.required==="true"),e.options&&(n.options=g("options",e.options)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(wn,{id:t,input:n});i("Custom field definition updated"),h$1(e,d.planmagnetUpdateCustomFieldDefinition);}catch(n){g$1(n);}}),a.command("delete").description("Delete a custom field definition").argument("<id>","Definition ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(En,{id:t});if(!n.planmagnetDeleteCustomFieldDefinition)throw new o(`Custom field definition ${t} could not be deleted`);i(`Custom field definition ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteCustomFieldDefinition});}catch(n){g$1(n);}}),a.command("values").description("List custom field values").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--definition <id>","Filter by definition ID").option("--work-item <id>","Filter by work item ID").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.definition&&(e.definitionId=t.definition),t.workItem&&(e.workItemId=t.workItem),await l(In,"planmagnetCustomFieldValues",t,Object.keys(e).length?e:void 0,{headers:["ID","Definition","Work Item","Set By"],row:n=>[p(n.id,12),p(n.definitionId,12),p(n.workItemId,12),p(n.setBy,12)]});}),a.command("set-value").description("Set a custom field value on a work item").requiredOption("--definition <id>","Definition ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--value <json>","Value JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={definitionId:t.definition,workItemId:t.workItem,value:g("value",t.value)},n=await b$1(Dn,{input:e});i("Custom field value set"),h$1(t,n.planmagnetSetCustomFieldValue);}catch(e){g$1(e);}}),a.command("remove-value").description("Remove a custom field value from a work item").requiredOption("--definition <id>","Definition ID").requiredOption("--work-item <id>","Work item ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(Tn,{workItemId:t.workItem,definitionId:t.definition});if(!e.planmagnetRemoveCustomFieldValue)throw new o("Custom field value could not be removed");i("Custom field value removed"),h$1(t,{removed:e.planmagnetRemoveCustomFieldValue});}catch(e){g$1(e);}});}function ra(c){let a=c.command("automations").description("Planmagnet automation rules");a.command("list").description("List automation rules in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--trigger-type <t>","Filter by trigger type").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.triggerType&&(e.triggerType=t.triggerType.toUpperCase()),t.search&&(e.search=t.search),await l(Pn,"planmagnetAutomationRules",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Trigger","Runs","Project"],row:n=>[p(n.id,12),n.name,n.status,n.triggerType,String(n.executionCount),p(n.projectId,12)]});}),a.command("get").description("Get an automation rule by id").argument("<id>","Automation rule ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(On,{id:t});if(!n.planmagnetAutomationRule)throw new o(`Automation rule ${t} not found`);h$1(e,n.planmagnetAutomationRule);}catch(n){g$1(n);}}),a.command("create").description("Create an automation rule").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Rule name").requiredOption("--trigger-type <t>","Trigger type (e.g. WORK_ITEM_CREATED)").requiredOption("--trigger-config <json>","Trigger configuration JSON").requiredOption("--actions <json>","Actions JSON array").option("--description <s>","Description").option("--conditions <json>","Conditions JSON array").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,triggerType:t.triggerType.toUpperCase(),triggerConfig:g("trigger-config",t.triggerConfig),actions:g("actions",t.actions)};t.description&&(e.description=t.description),t.conditions&&(e.conditions=g("conditions",t.conditions)),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1($n,{input:e});i(`Automation rule created: ${n.planmagnetCreateAutomationRule.name}`),h$1(t,n.planmagnetCreateAutomationRule);}catch(e){g$1(e);}}),a.command("update").description("Update an automation rule").argument("<id>","Automation rule ID").option("--name <name>","Rule name").option("--description <s>","Description").option("--trigger-type <t>","Trigger type").option("--trigger-config <json>","Trigger configuration JSON").option("--conditions <json>","Conditions JSON array").option("--actions <json>","Actions JSON array").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.triggerType&&(n.triggerType=e.triggerType.toUpperCase()),e.triggerConfig&&(n.triggerConfig=g("trigger-config",e.triggerConfig)),e.conditions&&(n.conditions=g("conditions",e.conditions)),e.actions&&(n.actions=g("actions",e.actions)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(kn,{id:t,input:n});i("Automation rule updated"),h$1(e,d.planmagnetUpdateAutomationRule);}catch(n){g$1(n);}}),a.command("delete").description("Delete an automation rule").argument("<id>","Automation rule ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Sn,{id:t});if(!n.planmagnetDeleteAutomationRule)throw new o(`Automation rule ${t} could not be deleted`);i(`Automation rule ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteAutomationRule});}catch(n){g$1(n);}}),a.command("toggle").description("Toggle an automation rule (activate/pause)").argument("<id>","Automation rule ID").requiredOption("--status <s>","Status (ACTIVE|PAUSED|DISABLED|ERROR)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(hn,{id:t,status:e.status.toUpperCase()});i(`Automation rule ${t} \u2192 ${n.planmagnetToggleAutomationRule.status}`),h$1(e,n.planmagnetToggleAutomationRule);}catch(n){g$1(n);}}),a.command("execute").description("Manually execute an automation rule").argument("<id>","Automation rule ID").option("--trigger-data <json>","Trigger data JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=e.triggerData?g("trigger-data",e.triggerData):void 0,d=await b$1(An,{id:t,triggerData:n});i(`Automation rule executed: ${d.planmagnetExecuteAutomationRule.status}`),h$1(e,d.planmagnetExecuteAutomationRule);}catch(n){g$1(n);}}),a.command("executions").description("List automation executions").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--rule <id>","Filter by rule ID").option("--status <s>","Filter by execution status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.rule&&(e.ruleId=t.rule),t.status&&(e.status=t.status.toUpperCase()),await l(Cn,"planmagnetAutomationExecutions",t,Object.keys(e).length?e:void 0,{headers:["ID","Rule","Status","Executed At","Duration (ms)"],row:n=>[p(n.id,12),p(n.ruleId,12),n.status,n.executedAt,n.durationMs==null?"-":String(n.durationMs)]});});}async function sa(c,a,t,e,n){try{let P=(await b$1(c,{id:t}))[a];if(!P)throw new o(`Sync ${t} could not be ${e}`);i(`Sync ${t} ${e}`),h$1(n,P);}catch(d){g$1(d);}}function pa(c){let a=c.command("syncs").description("Planmagnet external syncs");a.command("list").description("List external syncs in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--provider <p>","Filter by provider").option("--direction <d>","Filter by direction").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.provider&&(e.provider=t.provider.toUpperCase()),t.direction&&(e.direction=t.direction.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(bn,"planmagnetExternalSyncs",t,Object.keys(e).length?e:void 0,{headers:["ID","Provider","Direction","Status","Project","Synced"],row:n=>[p(n.id,12),n.provider,n.direction,n.status,p(n.projectId,12),String(n.totalItemsSynced)]});}),a.command("get").description("Get an external sync by id").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(_n,{id:t});if(!n.planmagnetExternalSync)throw new o(`Sync ${t} not found`);h$1(e,n.planmagnetExternalSync);}catch(n){g$1(n);}}),a.command("create").description("Create an external sync configuration").requiredOption("--project <id>","Project ID").requiredOption("--provider <p>","Provider (JIRA|GITHUB|LINEAR|\u2026)").requiredOption("--direction <d>","Direction (INBOUND|OUTBOUND|BIDIRECTIONAL)").requiredOption("--external-project <id>","External project/board ID").requiredOption("--connection-config <json>","Connection configuration JSON").option("--external-project-url <url>","External project URL").option("--field-mapping <json>","Field mapping JSON").option("--sync-filters <json>","Sync filter rules JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,provider:t.provider.toUpperCase(),direction:t.direction.toUpperCase(),externalProjectId:t.externalProject,connectionConfig:g("connection-config",t.connectionConfig)};t.externalProjectUrl&&(e.externalProjectUrl=t.externalProjectUrl),t.fieldMapping&&(e.fieldMapping=g("field-mapping",t.fieldMapping)),t.syncFilters&&(e.syncFilters=g("sync-filters",t.syncFilters));let n=await b$1(Ln,{input:e});i(`Sync created: ${n.planmagnetCreateExternalSync.provider}`),h$1(t,n.planmagnetCreateExternalSync);}catch(e){g$1(e);}}),a.command("update").description("Update an external sync configuration").argument("<id>","Sync ID").option("--direction <d>","Direction").option("--external-project <id>","External project ID").option("--external-project-url <url>","External project URL").option("--connection-config <json>","Connection configuration JSON").option("--field-mapping <json>","Field mapping JSON").option("--sync-filters <json>","Sync filter rules JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.direction&&(n.direction=e.direction.toUpperCase()),e.externalProject&&(n.externalProjectId=e.externalProject),e.externalProjectUrl&&(n.externalProjectUrl=e.externalProjectUrl),e.connectionConfig&&(n.connectionConfig=g("connection-config",e.connectionConfig)),e.fieldMapping&&(n.fieldMapping=g("field-mapping",e.fieldMapping)),e.syncFilters&&(n.syncFilters=g("sync-filters",e.syncFilters)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(jn,{id:t,input:n});i("Sync updated"),h$1(e,d.planmagnetUpdateExternalSync);}catch(n){g$1(n);}}),a.command("delete").description("Delete an external sync configuration").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(xn,{id:t});if(!n.planmagnetDeleteExternalSync)throw new o(`Sync ${t} could not be deleted`);i(`Sync ${t} deleted`),h$1(e,{deleted:n.planmagnetDeleteExternalSync});}catch(n){g$1(n);}}),a.command("pause").description("Pause a sync").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action((t,e)=>sa(Fn,"planmagnetPauseExternalSync",t,"paused",e)),a.command("resume").description("Resume a paused sync").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action((t,e)=>sa(Mn,"planmagnetResumeExternalSync",t,"resumed",e)),a.command("start").description("Start a sync operation").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Nn,{id:t});i(`Sync ${t} started`),h$1(e,n.planmagnetStartSync);}catch(n){g$1(n);}}),a.command("export").description("Export items to an external tool").requiredOption("--sync <id>","Sync ID").option("--all","Export all eligible items").option("--ids <csv>","Comma-separated internal IDs to export").option("-f, --format <format>","Output format").action(async t=>{try{let e={syncId:t.sync};t.all&&(e.exportAll=!0),t.ids&&(e.internalIds=f(t.ids));let n=await b$1(qn,{input:e});i("Export started"),h$1(t,n.planmagnetExportToExternal);}catch(e){g$1(e);}}),a.command("import").description("Import items from an external tool").requiredOption("--sync <id>","Sync ID").option("--all","Import all eligible items").option("--ids <csv>","Comma-separated external IDs to import").option("-f, --format <format>","Output format").action(async t=>{try{let e={syncId:t.sync};t.all&&(e.importAll=!0),t.ids&&(e.externalIds=f(t.ids));let n=await b$1(vn,{input:e});i("Import started"),h$1(t,n.planmagnetImportFromExternal);}catch(e){g$1(e);}}),a.command("mappings").description("List external mappings").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--sync <id>","Filter by sync ID").option("--internal-type <t>","Filter by internal type").option("--internal-id <id>","Filter by internal ID").option("--external-type <t>","Filter by external type").option("--external-id <id>","Filter by external ID").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.sync&&(e.syncId=t.sync),t.internalType&&(e.internalType=t.internalType),t.internalId&&(e.internalId=t.internalId),t.externalType&&(e.externalType=t.externalType),t.externalId&&(e.externalId=t.externalId),await l(Un,"planmagnetExternalMappings",t,Object.keys(e).length?e:void 0,{headers:["ID","Sync","Internal","Internal ID","External","External ID"],row:n=>[p(n.id,12),p(n.syncId,12),n.internalType,p(n.internalId,12),n.externalType,p(n.externalId,12)]});});}var ua={id:"planmagnet",version:"1.0.0",displayName:"Planmagnet",dependsOn:["auth","workspaces"],register(c,a$1){a(a$1);let t=c.command("planmagnet").description("Planmagnet project & portfolio management");Bn(t),Gn(t),Wn(t),Vn(t),Qn(t),Jn(t),Yn(t),Kn(t),Xn(t),zn(t),Hn(t),Zn(t),ta(t),ea(t),na(t),aa(t),ia(t),oa(t),ra(t),pa(t);}},Ei=ua;export{Ei as default};
|
|
774
|
+
`;function g(c,a){try{return JSON.parse(a)}catch{throw new o(`--${c} must be valid JSON`)}}function u(c){let a=Number.parseInt(c,10);if(Number.isNaN(a))throw new o(`Expected an integer but got "${c}"`);return a}function D(c){let a=Number.parseFloat(c);if(Number.isNaN(a))throw new o(`Expected a number but got "${c}"`);return a}function f(c){return c.split(",").map(a=>a.trim()).filter(a=>a.length>0)}function da(c){let a=c??v$1()?.workspaceId;if(!a)throw new o("Workspace ID required \u2014 pass --workspace <id> or select a workspace via `auth login`.");return a}function ca(c){let a={};return c.limit!==void 0&&(a.first=c.limit),c.cursor&&(a.after=c.cursor),Object.keys(a).length?a:void 0}async function l(c,a,t,e,n){try{let d=da(t.workspace),W=(await b$1(c,{filter:e,pagination:ca(t),workspaceId:d}))[a];if(!W)throw new o(`No "${a}" payload returned`);i({format:t.format},W.items,{headers:n.headers,rows:W.items.map(n.row)});}catch(d){h$1(d);}}function Bn(c){let a=c.command("portfolios").description("Planmagnet portfolios");a.command("list").description("List portfolios in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by status").option("--alignment <a>","Filter by strategic alignment").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.alignment&&(e.alignment=t.alignment.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(lt,"planmagnetPortfolios",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Owner","Alignment","Budget"],row:n=>[r(n.id,12),n.name,n.status,r(n.ownerId,12),n.alignment??"-",n.budgetTotal==null?"-":String(n.budgetTotal)]});}),a.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(gt,{id:t});if(!n.planmagnetPortfolio)throw new o(`Portfolio ${t} not found`);i(e,n.planmagnetPortfolio);}catch(n){h$1(n);}}),a.command("overview").description("Aggregated health & metrics overview for a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ft,{portfolioId:t});i(e,n.planmagnetPortfolioOverview);}catch(n){h$1(n);}}),a.command("create").description("Create a portfolio").requiredOption("--name <name>","Portfolio name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--status <s>","Status").option("--alignment <a>","Strategic alignment").option("--alignment-label <s>","Custom alignment label").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--fiscal-period <s>","Fiscal period").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.alignment&&(e.alignment=t.alignment.toUpperCase()),t.alignmentLabel&&(e.alignmentLabel=t.alignmentLabel),t.budgetTotal!==void 0&&(e.budgetTotal=t.budgetTotal),t.currency&&(e.currency=t.currency),t.fiscalPeriod&&(e.fiscalPeriod=t.fiscalPeriod),t.tags&&(e.tags=f(t.tags));let n=await b$1(It,{input:e});k$1(`Portfolio created: ${n.planmagnetCreatePortfolio.name}`),i(t,n.planmagnetCreatePortfolio);}catch(e){h$1(e);}}),a.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--name <name>","Portfolio name").option("--description <s>","Description").option("--status <s>","Status").option("--alignment <a>","Strategic alignment").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--owner <id>","Owner actor ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.alignment&&(n.alignment=e.alignment.toUpperCase()),e.budgetTotal!==void 0&&(n.budgetTotal=e.budgetTotal),e.currency&&(n.currency=e.currency),e.owner&&(n.ownerId=e.owner),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(yt,{id:t,input:n});k$1("Portfolio updated"),i(e,d.planmagnetUpdatePortfolio);}catch(n){h$1(n);}}),a.command("delete").description("Delete a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(wt,{id:t});if(!n.planmagnetDeletePortfolio)throw new o(`Portfolio ${t} could not be deleted`);k$1(`Portfolio ${t} deleted`),i(e,{deleted:n.planmagnetDeletePortfolio});}catch(n){h$1(n);}});}function Gn(c){let a=c.command("programs").description("Planmagnet programs");a.command("list").description("List programs in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(pt,"planmagnetPrograms",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Owner","Budget","Currency"],row:n=>[r(n.id,12),n.name,n.status,r(n.ownerId,12),n.budgetTotal==null?"-":String(n.budgetTotal),n.currency??"-"]});}),a.command("get").description("Get a program by id").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(mt,{id:t});if(!n.planmagnetProgram)throw new o(`Program ${t} not found`);i(e,n.planmagnetProgram);}catch(n){h$1(n);}}),a.command("create").description("Create a program").requiredOption("--name <name>","Program name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--status <s>","Status").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.budgetTotal!==void 0&&(e.budgetTotal=t.budgetTotal),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(dt,{input:e});k$1(`Program created: ${n.planmagnetCreateProgram.name}`),i(t,n.planmagnetCreateProgram);}catch(e){h$1(e);}}),a.command("update").description("Update a program").argument("<id>","Program ID").option("--name <name>","Program name").option("--description <s>","Description").option("--status <s>","Status").option("--budget-total <n>","Total budget",D).option("--currency <c>","Currency code").option("--owner <id>","Owner actor ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.budgetTotal!==void 0&&(n.budgetTotal=e.budgetTotal),e.currency&&(n.currency=e.currency),e.owner&&(n.ownerId=e.owner),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ct,{id:t,input:n});k$1("Program updated"),i(e,d.planmagnetUpdateProgram);}catch(n){h$1(n);}}),a.command("delete").description("Soft-delete a program").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ut,{id:t});if(!n.planmagnetDeleteProgram)throw new o(`Program ${t} could not be deleted`);k$1(`Program ${t} deleted`),i(e,{deleted:n.planmagnetDeleteProgram});}catch(n){h$1(n);}});}function Wn(c){let a=c.command("projects").description("Planmagnet projects");a.command("list").description("List projects in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--status <s>","Filter by project status").option("--methodology <m>","Filter by methodology").option("--owner <id>","Filter by owner ID").option("--program <id>","Filter by program ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.status&&(e.status=t.status.toUpperCase()),t.methodology&&(e.methodology=t.methodology.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.program&&(e.programId=t.program),t.search&&(e.search=t.search),await l(X,"planmagnetProjects",t,Object.keys(e).length?e:void 0,{headers:["ID","Key","Name","Status","Methodology","Owner"],row:n=>[r(n.id,12),n.key,n.name,n.status,n.methodology,r(n.ownerId,12)]});}),a.command("get").description("Get a project by id").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(z,{id:t});if(!n.planmagnetProject)throw new o(`Project ${t} not found`);i(e,n.planmagnetProject);}catch(n){h$1(n);}}),a.command("create").description("Create a project").requiredOption("--key <key>","Project key/prefix (e.g. PROJ)").requiredOption("--name <name>","Project name").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--methodology <m>","Methodology (AGILE|SCRUM|KANBAN|WATERFALL|HYBRID|CUSTOM)").option("--status <s>","Initial status").option("--program <id>","Parent program ID").option("--default-assignee <id>","Default assignee actor ID").option("--start-date <iso>","Planned start date (ISO)").option("--end-date <iso>","Planned end date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={key:t.key,name:t.name,ownerId:t.owner};t.description&&(e.description=t.description),t.methodology&&(e.methodology=t.methodology.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.program&&(e.programId=t.program),t.defaultAssignee&&(e.defaultAssigneeId=t.defaultAssignee),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(H,{input:e});k$1(`Project created: ${n.planmagnetCreateProject.key}`),i(t,n.planmagnetCreateProject);}catch(e){h$1(e);}}),a.command("update").description("Update a project").argument("<id>","Project ID").option("--name <name>","Project name").option("--description <s>","Description").option("--status <s>","Status").option("--methodology <m>","Methodology").option("--owner <id>","Owner actor ID").option("--program <id>","Parent program ID").option("--default-assignee <id>","Default assignee actor ID").option("--start-date <iso>","Planned start date (ISO)").option("--end-date <iso>","Planned end date (ISO)").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.methodology&&(n.methodology=e.methodology.toUpperCase()),e.owner&&(n.ownerId=e.owner),e.program&&(n.programId=e.program),e.defaultAssignee&&(n.defaultAssigneeId=e.defaultAssignee),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.tags&&(n.tags=f(e.tags)),e.metadata&&(n.metadata=g("metadata",e.metadata)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Z,{id:t,input:n});k$1("Project updated"),i(e,d.planmagnetUpdateProject);}catch(n){h$1(n);}}),a.command("delete").description("Soft-delete a project").argument("<id>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(tt,{id:t});if(!n.planmagnetDeleteProject)throw new o(`Project ${t} could not be deleted`);k$1(`Project ${t} deleted`),i(e,{deleted:n.planmagnetDeleteProject});}catch(n){h$1(n);}});}function Vn(c){let a=c.command("templates").description("Planmagnet project templates");a.command("list").description("List project templates in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--category <c>","Filter by category").option("--built-in","Only built-in templates").option("--published","Only published templates").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.category&&(e.category=t.category),t.builtIn&&(e.isBuiltIn=true),t.published&&(e.isPublished=true),t.search&&(e.search=t.search),await l(et,"planmagnetProjectTemplates",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Category","Built-in","Published","Usage"],row:n=>[r(n.id,12),n.name,n.category??"-",String(n.isBuiltIn),String(n.isPublished),String(n.usageCount)]});}),a.command("get").description("Get a project template by id").argument("<id>","Template ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(nt,{id:t});if(!n.planmagnetProjectTemplate)throw new o(`Template ${t} not found`);i(e,n.planmagnetProjectTemplate);}catch(n){h$1(n);}}),a.command("create").description("Create a project template").requiredOption("--name <name>","Template name").requiredOption("--configuration <json>","Template configuration JSON").option("--description <s>","Description").option("--category <c>","Category").option("--published","Mark as published").option("--board-config <json>","Board layout JSON").option("--sprint-config <json>","Sprint configuration JSON").option("--custom-fields-config <json>","Custom field definitions JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,configuration:g("configuration",t.configuration)};t.description&&(e.description=t.description),t.category&&(e.category=t.category),t.published&&(e.isPublished=!0),t.boardConfig&&(e.boardConfig=g("board-config",t.boardConfig)),t.sprintConfig&&(e.sprintConfig=g("sprint-config",t.sprintConfig)),t.customFieldsConfig&&(e.customFieldsConfig=g("custom-fields-config",t.customFieldsConfig)),t.tags&&(e.tags=f(t.tags));let n=await b$1(at,{input:e});k$1(`Template created: ${n.planmagnetCreateProjectTemplate.name}`),i(t,n.planmagnetCreateProjectTemplate);}catch(e){h$1(e);}}),a.command("update").description("Update a project template").argument("<id>","Template ID").option("--name <name>","Template name").option("--description <s>","Description").option("--category <c>","Category").option("--published <bool>","Published flag (true|false)").option("--configuration <json>","Configuration JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.category&&(n.category=e.category),e.published!==void 0&&(n.isPublished=e.published==="true"),e.configuration&&(n.configuration=g("configuration",e.configuration)),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(it,{id:t,input:n});k$1("Template updated"),i(e,d.planmagnetUpdateProjectTemplate);}catch(n){h$1(n);}}),a.command("delete").description("Delete a project template").argument("<id>","Template ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ot,{id:t});if(!n.planmagnetDeleteProjectTemplate)throw new o(`Template ${t} could not be deleted`);k$1(`Template ${t} deleted`),i(e,{deleted:n.planmagnetDeleteProjectTemplate});}catch(n){h$1(n);}}),a.command("apply").description("Apply a template to create a new project").requiredOption("--template <id>","Template ID").requiredOption("--name <name>","New project name").requiredOption("--owner <id>","Owner actor ID").option("--project-description <s>","New project description").option("-f, --format <format>","Output format").action(async t=>{try{let e={templateId:t.template,projectName:t.name,ownerId:t.owner};t.projectDescription&&(e.projectDescription=t.projectDescription);let n=await b$1(rt,{input:e});k$1(`Project created from template: ${n.planmagnetApplyTemplate.key}`),i(t,n.planmagnetApplyTemplate);}catch(e){h$1(e);}}),a.command("from-project").description("Create a template from an existing project").requiredOption("--project <id>","Source project ID").requiredOption("--name <name>","Template name").option("--description <s>","Template description").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(st,{projectId:t.project,name:t.name,description:t.description});k$1(`Template created: ${e.planmagnetCreateTemplateFromProject.name}`),i(t,e.planmagnetCreateTemplateFromProject);}catch(e){h$1(e);}});}function Qn(c){let a=c.command("work-items").description("Planmagnet work items");a.command("list").description("List work items in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--sprint <id>","Filter by sprint ID").option("--status <s>","Filter by status").option("--type <t>","Filter by type").option("--priority <p>","Filter by priority").option("--assignee <id>","Filter by assignee ID").option("--parent <id>","Filter by parent work item ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.sprint&&(e.sprintId=t.sprint),t.status&&(e.status=t.status.toUpperCase()),t.type&&(e.type=t.type.toUpperCase()),t.priority&&(e.priority=t.priority.toUpperCase()),t.assignee&&(e.assigneeId=t.assignee),t.parent&&(e.parentId=t.parent),t.search&&(e.search=t.search),await l(Et,"planmagnetWorkItems",t,Object.keys(e).length?e:void 0,{headers:["ID","Key","Title","Type","Status","Priority"],row:n=>[r(n.id,12),n.key,r(n.title,32),n.type,n.status,n.priority]});}),a.command("get").description("Get a work item by id").argument("<id>","Work item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Dt,{id:t});if(!n.planmagnetWorkItem)throw new o(`Work item ${t} not found`);i(e,n.planmagnetWorkItem);}catch(n){h$1(n);}}),a.command("create").description("Create a work item").requiredOption("--project <id>","Project ID").requiredOption("--title <s>","Title").requiredOption("--type <t>","Type (EPIC|STORY|TASK|BUG|SUB_TASK)").option("--description <s>","Description").option("--status <s>","Status").option("--priority <p>","Priority").option("--assignee <id>","Assignee actor ID").option("--reporter <id>","Reporter actor ID").option("--parent <id>","Parent work item ID").option("--sprint <id>","Sprint ID").option("--story-points <n>","Story points",u).option("--estimate-minutes <n>","Estimate in minutes",u).option("--due-date <iso>","Due date (ISO)").option("--labels <csv>","Comma-separated labels").option("--tags <csv>","Comma-separated tags").option("--metadata <json>","Metadata JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title,type:t.type.toUpperCase()};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.priority&&(e.priority=t.priority.toUpperCase()),t.assignee&&(e.assigneeId=t.assignee),t.reporter&&(e.reporterId=t.reporter),t.parent&&(e.parentId=t.parent),t.sprint&&(e.sprintId=t.sprint),t.storyPoints!==void 0&&(e.storyPoints=t.storyPoints),t.estimateMinutes!==void 0&&(e.estimateMinutes=t.estimateMinutes),t.dueDate&&(e.dueDate=t.dueDate),t.labels&&(e.labels=f(t.labels)),t.tags&&(e.tags=f(t.tags)),t.metadata&&(e.metadata=g("metadata",t.metadata));let n=await b$1(Tt,{input:e});k$1(`Work item created: ${n.planmagnetCreateWorkItem.key}`),i(t,n.planmagnetCreateWorkItem);}catch(e){h$1(e);}}),a.command("update").description("Update a work item").argument("<id>","Work item ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--priority <p>","Priority").option("--type <t>","Type").option("--assignee <id>","Assignee actor ID").option("--sprint <id>","Sprint ID").option("--story-points <n>","Story points",u).option("--estimate-minutes <n>","Estimate in minutes",u).option("--due-date <iso>","Due date (ISO)").option("--labels <csv>","Comma-separated labels").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.priority&&(n.priority=e.priority.toUpperCase()),e.type&&(n.type=e.type.toUpperCase()),e.assignee&&(n.assigneeId=e.assignee),e.sprint&&(n.sprintId=e.sprint),e.storyPoints!==void 0&&(n.storyPoints=e.storyPoints),e.estimateMinutes!==void 0&&(n.estimateMinutes=e.estimateMinutes),e.dueDate&&(n.dueDate=e.dueDate),e.labels&&(n.labels=f(e.labels)),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Rt,{id:t,input:n});k$1("Work item updated"),i(e,d.planmagnetUpdateWorkItem);}catch(n){h$1(n);}}),a.command("delete").description("Soft-delete a work item").argument("<id>","Work item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Pt,{id:t});if(!n.planmagnetDeleteWorkItem)throw new o(`Work item ${t} could not be deleted`);k$1(`Work item ${t} deleted`),i(e,{deleted:n.planmagnetDeleteWorkItem});}catch(n){h$1(n);}}),a.command("assign").description("Assign a work item to an actor").argument("<id>","Work item ID").requiredOption("--assignee <id>","Assignee actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ot,{id:t,input:{assigneeId:e.assignee}});k$1(`Work item ${t} assigned to ${e.assignee}`),i(e,n.planmagnetAssignWorkItem);}catch(n){h$1(n);}}),a.command("move").description("Move a work item to a different status, sprint, or position").argument("<id>","Work item ID").option("--status <s>","Target status").option("--sprint <id>","Target sprint ID").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.status&&(n.status=e.status.toUpperCase()),e.sprint&&(n.sprintId=e.sprint),e.sortOrder!==void 0&&(n.sortOrder=e.sortOrder),!Object.keys(n).length)throw new o("Nothing to move \u2014 specify a target");let d=await b$1(Ct,{id:t,input:n});k$1("Work item moved"),i(e,d.planmagnetMoveWorkItem);}catch(n){h$1(n);}}),a.command("bulk-update").description("Bulk update multiple work items at once").requiredOption("--ids <csv>","Comma-separated work item IDs").option("--status <s>","Status").option("--priority <p>","Priority").option("--assignee <id>","Assignee actor ID").option("--sprint <id>","Sprint ID").option("--labels <csv>","Comma-separated labels").option("-f, --format <format>","Output format").action(async t=>{try{let e=f(t.ids);if(!e.length)throw new o("--ids must contain at least one ID");let n={ids:e};t.status&&(n.status=t.status.toUpperCase()),t.priority&&(n.priority=t.priority.toUpperCase()),t.assignee&&(n.assigneeId=t.assignee),t.sprint&&(n.sprintId=t.sprint),t.labels&&(n.labels=f(t.labels));let d=await b$1($t,{input:n});k$1(`Updated ${d.planmagnetBulkUpdateWorkItems.length} work item(s)`),i(t,d.planmagnetBulkUpdateWorkItems);}catch(e){h$1(e);}});}function Jn(c){let a=c.command("dependencies").description("Planmagnet work item dependencies");a.command("list").description("List dependencies in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--source <id>","Filter by source work item ID").option("--target <id>","Filter by target work item ID").option("--type <t>","Filter by dependency type").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.source&&(e.sourceWorkItemId=t.source),t.target&&(e.targetWorkItemId=t.target),t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),await l(kt,"planmagnetDependencies",t,Object.keys(e).length?e:void 0,{headers:["ID","Source","Target","Type","Status"],row:n=>[r(n.id,12),r(n.sourceWorkItemId,12),r(n.targetWorkItemId,12),n.type,n.status]});}),a.command("get").description("Get a dependency by id").argument("<id>","Dependency ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(St,{id:t});if(!n.planmagnetDependency)throw new o(`Dependency ${t} not found`);i(e,n.planmagnetDependency);}catch(n){h$1(n);}}),a.command("create").description("Create a dependency between two work items").requiredOption("--source <id>","Source work item ID").requiredOption("--target <id>","Target work item ID").requiredOption("--type <t>","Type (BLOCKS|BLOCKED_BY|RELATES_TO|\u2026)").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async t=>{try{let e={sourceWorkItemId:t.source,targetWorkItemId:t.target,type:t.type.toUpperCase()};t.description&&(e.description=t.description);let n=await b$1(ht,{input:e});k$1("Dependency created"),i(t,n.planmagnetCreateDependency);}catch(e){h$1(e);}}),a.command("update").description("Update a dependency").argument("<id>","Dependency ID").option("--type <t>","Type").option("--status <s>","Status").option("--description <s>","Description").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.description!==void 0&&(n.description=e.description),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(At,{id:t,input:n});k$1("Dependency updated"),i(e,d.planmagnetUpdateDependency);}catch(n){h$1(n);}}),a.command("delete").description("Remove a dependency").argument("<id>","Dependency ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(bt,{id:t});if(!n.planmagnetDeleteDependency)throw new o(`Dependency ${t} could not be removed`);k$1(`Dependency ${t} removed`),i(e,{removed:n.planmagnetDeleteDependency});}catch(n){h$1(n);}});}async function Y(c,a,t,e,n){try{let P=(await b$1(c,{id:t}))[a];if(!P)throw new o(`Sprint ${t} could not be ${e}`);k$1(`Sprint ${t} ${e}`),i(n,P);}catch(d){h$1(d);}}function Yn(c){let a=c.command("sprints").description("Planmagnet sprints");a.command("list").description("List sprints in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(_t,"planmagnetSprints",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Project","Capacity","Velocity"],row:n=>[r(n.id,12),n.name,n.status,r(n.projectId,12),n.capacity==null?"-":String(n.capacity),n.velocity==null?"-":String(n.velocity)]});}),a.command("get").description("Get a sprint by id").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ut,{id:t});if(!n.planmagnetSprint)throw new o(`Sprint ${t} not found`);i(e,n.planmagnetSprint);}catch(n){h$1(n);}}),a.command("create").description("Create a sprint").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Sprint name").option("--goal <s>","Sprint goal").option("--capacity <n>","Capacity (story points)",u).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name};t.goal&&(e.goal=t.goal),t.capacity!==void 0&&(e.capacity=t.capacity),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Lt,{input:e});k$1(`Sprint created: ${n.planmagnetCreateSprint.name}`),i(t,n.planmagnetCreateSprint);}catch(e){h$1(e);}}),a.command("update").description("Update a sprint").argument("<id>","Sprint ID").option("--name <name>","Sprint name").option("--goal <s>","Sprint goal").option("--capacity <n>","Capacity",u).option("--velocity <n>","Velocity",u).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.goal!==void 0&&(n.goal=e.goal),e.capacity!==void 0&&(n.capacity=e.capacity),e.velocity!==void 0&&(n.velocity=e.velocity),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(jt,{id:t,input:n});k$1("Sprint updated"),i(e,d.planmagnetUpdateSprint);}catch(n){h$1(n);}}),a.command("delete").description("Soft-delete a sprint").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(xt,{id:t});if(!n.planmagnetDeleteSprint)throw new o(`Sprint ${t} could not be deleted`);k$1(`Sprint ${t} deleted`),i(e,{deleted:n.planmagnetDeleteSprint});}catch(n){h$1(n);}}),a.command("start").description("Start a sprint (transition to ACTIVE)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Ft,"planmagnetStartSprint",t,"started",e)),a.command("complete").description("Complete a sprint (transition to COMPLETED)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Mt,"planmagnetCompleteSprint",t,"completed",e)),a.command("cancel").description("Cancel a sprint (transition to CANCELLED)").argument("<id>","Sprint ID").option("-f, --format <format>","Output format").action((t,e)=>Y(Nt,"planmagnetCancelSprint",t,"cancelled",e)),a.command("add-items").description("Add work items to a sprint").argument("<id>","Sprint ID").requiredOption("--work-items <csv>","Comma-separated work item IDs").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=f(e.workItems);if(!n.length)throw new o("--work-items must contain at least one ID");let d=await b$1(qt,{id:t,input:{workItemIds:n}});k$1(`Added ${n.length} work item(s) to sprint ${t}`),i(e,d.planmagnetAddWorkItemsToSprint);}catch(n){h$1(n);}}),a.command("remove-items").description("Remove work items from a sprint").argument("<id>","Sprint ID").requiredOption("--work-items <csv>","Comma-separated work item IDs").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=f(e.workItems);if(!n.length)throw new o("--work-items must contain at least one ID");let d=await b$1(vt,{id:t,input:{workItemIds:n}});k$1(`Removed ${n.length} work item(s) from sprint ${t}`),i(e,d.planmagnetRemoveWorkItemsFromSprint);}catch(n){h$1(n);}});}function Kn(c){let a=c.command("boards").description("Planmagnet boards");a.command("list").description("List boards in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--type <t>","Filter by board type").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.type&&(e.type=t.type.toUpperCase()),t.search&&(e.search=t.search),await l(Bt,"planmagnetBoards",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Default","Project","Columns"],row:n=>[r(n.id,12),n.name,n.type,String(n.isDefault),r(n.projectId,12),String(n.columns?.length??0)]});}),a.command("get").description("Get a board by id").argument("<id>","Board ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Gt,{id:t});if(!n.planmagnetBoard)throw new o(`Board ${t} not found`);i(e,n.planmagnetBoard);}catch(n){h$1(n);}}),a.command("create").description("Create a board").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Board name").requiredOption("--type <t>","Board type (KANBAN|SCRUM|CUSTOM)").option("--description <s>","Description").option("--default","Make this the default board").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,type:t.type.toUpperCase()};t.description&&(e.description=t.description),t.default&&(e.isDefault=!0);let n=await b$1(Wt,{input:e});k$1(`Board created: ${n.planmagnetCreateBoard.name}`),i(t,n.planmagnetCreateBoard);}catch(e){h$1(e);}}),a.command("update").description("Update a board").argument("<id>","Board ID").option("--name <name>","Board name").option("--description <s>","Description").option("--type <t>","Board type").option("--default <bool>","Default flag (true|false)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.type&&(n.type=e.type.toUpperCase()),e.default!==void 0&&(n.isDefault=e.default==="true"),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Vt,{id:t,input:n});k$1("Board updated"),i(e,d.planmagnetUpdateBoard);}catch(n){h$1(n);}}),a.command("delete").description("Delete a board").argument("<id>","Board ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Qt,{id:t});if(!n.planmagnetDeleteBoard)throw new o(`Board ${t} could not be deleted`);k$1(`Board ${t} deleted`),i(e,{deleted:n.planmagnetDeleteBoard});}catch(n){h$1(n);}}),a.command("create-column").description("Create a column on a board").requiredOption("--board <id>","Board ID").requiredOption("--name <name>","Column name").requiredOption("--type <t>","Column type (TODO|IN_PROGRESS|DONE|CUSTOM)").option("--mapped-status <s>","Mapped work item status").option("--wip-limit <n>","WIP limit (0 = unlimited)",u).option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={boardId:t.board,name:t.name,type:t.type.toUpperCase()};t.mappedStatus&&(e.mappedStatus=t.mappedStatus.toUpperCase()),t.wipLimit!==void 0&&(e.wipLimit=t.wipLimit),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Jt,{input:e});k$1(`Column created: ${n.planmagnetCreateBoardColumn.name}`),i(t,n.planmagnetCreateBoardColumn);}catch(e){h$1(e);}}),a.command("update-column").description("Update a board column").argument("<id>","Column ID").option("--name <name>","Column name").option("--type <t>","Column type").option("--mapped-status <s>","Mapped work item status").option("--wip-limit <n>","WIP limit",u).option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.mappedStatus&&(n.mappedStatus=e.mappedStatus.toUpperCase()),e.wipLimit!==void 0&&(n.wipLimit=e.wipLimit),e.sortOrder!==void 0&&(n.sortOrder=e.sortOrder),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Yt,{id:t,input:n});k$1("Column updated"),i(e,d.planmagnetUpdateBoardColumn);}catch(n){h$1(n);}}),a.command("delete-column").description("Delete a board column").argument("<id>","Column ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Kt,{id:t});if(!n.planmagnetDeleteBoardColumn)throw new o(`Column ${t} could not be deleted`);k$1(`Column ${t} deleted`),i(e,{deleted:n.planmagnetDeleteBoardColumn});}catch(n){h$1(n);}}),a.command("move-card").description("Move a card (work item) to a different column and/or position").requiredOption("--board <id>","Board ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--column <id>","Target column ID").option("--sort-order <n>","Sort order within the column",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={workItemId:t.workItem,targetColumnId:t.column};t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Xt,{boardId:t.board,input:e});k$1("Card moved"),i(t,n.planmagnetMoveCard);}catch(e){h$1(e);}}),a.command("reorder-columns").description("Reorder columns on a board").requiredOption("--board <id>","Board ID").requiredOption("--columns <csv>","Comma-separated ordered column IDs").option("-f, --format <format>","Output format").action(async t=>{try{let e=f(t.columns);if(!e.length)throw new o("--columns must contain at least one ID");let n=await b$1(zt,{boardId:t.board,input:{columnIds:e}});k$1("Columns reordered"),i(t,n.planmagnetReorderColumns);}catch(e){h$1(e);}});}function Xn(c){let a=c.command("milestones").description("Planmagnet milestones");a.command("list").description("List milestones in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(Ht,"planmagnetMilestones",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Project","Due"],row:n=>[r(n.id,12),n.name,n.status,r(n.projectId,12),n.dueDate??"-"]});}),a.command("get").description("Get a milestone by id").argument("<id>","Milestone ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Zt,{id:t});if(!n.planmagnetMilestone)throw new o(`Milestone ${t} not found`);i(e,n.planmagnetMilestone);}catch(n){h$1(n);}}),a.command("create").description("Create a milestone").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Milestone name").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--due-date <iso>","Target due date (ISO)").option("--sort-order <n>","Sort order",u).option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.dueDate&&(e.dueDate=t.dueDate),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder),t.tags&&(e.tags=f(t.tags));let n=await b$1(te,{input:e});k$1(`Milestone created: ${n.planmagnetCreateMilestone.name}`),i(t,n.planmagnetCreateMilestone);}catch(e){h$1(e);}}),a.command("update").description("Update a milestone").argument("<id>","Milestone ID").option("--name <name>","Milestone name").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--due-date <iso>","Target due date (ISO)").option("--completed-at <iso>","Completion date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.owner&&(n.ownerId=e.owner),e.dueDate&&(n.dueDate=e.dueDate),e.completedAt&&(n.completedAt=e.completedAt),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ee,{id:t,input:n});k$1("Milestone updated"),i(e,d.planmagnetUpdateMilestone);}catch(n){h$1(n);}}),a.command("delete").description("Delete a milestone").argument("<id>","Milestone ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ne,{id:t});if(!n.planmagnetDeleteMilestone)throw new o(`Milestone ${t} could not be deleted`);k$1(`Milestone ${t} deleted`),i(e,{deleted:n.planmagnetDeleteMilestone});}catch(n){h$1(n);}});}function zn(c){let a=c.command("releases").description("Planmagnet releases");a.command("list").description("List releases in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(ae,"planmagnetReleases",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Version","Status","Project"],row:n=>[r(n.id,12),n.name,n.version,n.status,r(n.projectId,12)]});}),a.command("get").description("Get a release by id").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ie,{id:t});if(!n.planmagnetRelease)throw new o(`Release ${t} not found`);i(e,n.planmagnetRelease);}catch(n){h$1(n);}}),a.command("create").description("Create a release").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Release name").requiredOption("--version <v>","Release version (e.g. 1.2.0)").option("--description <s>","Description").option("--status <s>","Status").option("--owner <id>","Owner actor ID").option("--planned-date <iso>","Planned release date (ISO)").option("--release-notes <s>","Release notes (markdown)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,version:t.version};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.plannedDate&&(e.plannedDate=t.plannedDate),t.releaseNotes&&(e.releaseNotes=t.releaseNotes),t.tags&&(e.tags=f(t.tags));let n=await b$1(oe,{input:e});k$1(`Release created: ${n.planmagnetCreateRelease.version}`),i(t,n.planmagnetCreateRelease);}catch(e){h$1(e);}}),a.command("update").description("Update a release").argument("<id>","Release ID").option("--name <name>","Release name").option("--version <v>","Version").option("--description <s>","Description").option("--status <s>","Status").option("--planned-date <iso>","Planned date (ISO)").option("--released-at <iso>","Actual release date (ISO)").option("--release-notes <s>","Release notes").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.version&&(n.version=e.version),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.plannedDate&&(n.plannedDate=e.plannedDate),e.releasedAt&&(n.releasedAt=e.releasedAt),e.releaseNotes&&(n.releaseNotes=e.releaseNotes),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(re,{id:t,input:n});k$1("Release updated"),i(e,d.planmagnetUpdateRelease);}catch(n){h$1(n);}}),a.command("delete").description("Delete a release").argument("<id>","Release ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(se,{id:t});if(!n.planmagnetDeleteRelease)throw new o(`Release ${t} could not be deleted`);k$1(`Release ${t} deleted`),i(e,{deleted:n.planmagnetDeleteRelease});}catch(n){h$1(n);}});}function Hn(c){let a=c.command("quality-gates").description("Planmagnet quality gates");a.command("list").description("List quality gates in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--milestone <id>","Filter by milestone ID").option("--phase <p>","Filter by phase").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.phase&&(e.phase=t.phase),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(pe,"planmagnetQualityGates",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Phase","Project"],row:n=>[r(n.id,12),n.name,n.status,n.phase??"-",r(n.projectId,12)]});}),a.command("get").description("Get a quality gate by id").argument("<id>","Quality gate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(me,{id:t});if(!n.planmagnetQualityGate)throw new o(`Quality gate ${t} not found`);i(e,n.planmagnetQualityGate);}catch(n){h$1(n);}}),a.command("create").description("Create a quality gate").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Gate name").requiredOption("--criteria <json>","Criteria JSON array").option("--description <s>","Description").option("--phase <p>","Phase / stage").option("--milestone <id>","Linked milestone ID").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,criteria:g("criteria",t.criteria)};t.description&&(e.description=t.description),t.phase&&(e.phase=t.phase),t.milestone&&(e.milestoneId=t.milestone),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(de,{input:e});k$1(`Quality gate created: ${n.planmagnetCreateQualityGate.name}`),i(t,n.planmagnetCreateQualityGate);}catch(e){h$1(e);}}),a.command("update").description("Update a quality gate").argument("<id>","Quality gate ID").option("--name <name>","Gate name").option("--description <s>","Description").option("--phase <p>","Phase").option("--status <s>","Status").option("--criteria <json>","Criteria JSON array").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.phase&&(n.phase=e.phase),e.status&&(n.status=e.status.toUpperCase()),e.criteria&&(n.criteria=g("criteria",e.criteria)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(ce,{id:t,input:n});k$1("Quality gate updated"),i(e,d.planmagnetUpdateQualityGate);}catch(n){h$1(n);}}),a.command("delete").description("Delete a quality gate").argument("<id>","Quality gate ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ue,{id:t});if(!n.planmagnetDeleteQualityGate)throw new o(`Quality gate ${t} could not be deleted`);k$1(`Quality gate ${t} deleted`),i(e,{deleted:n.planmagnetDeleteQualityGate});}catch(n){h$1(n);}}),a.command("review").description("Review a quality gate (pass, fail, or waive)").argument("<id>","Quality gate ID").requiredOption("--status <s>","Review status (PASSED|FAILED|WAIVED|IN_REVIEW|PENDING)").option("--notes <s>","Review notes").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={status:e.status.toUpperCase()};e.notes&&(n.reviewNotes=e.notes);let d=await b$1(le,{id:t,input:n});k$1(`Quality gate reviewed: ${d.planmagnetReviewQualityGate.status}`),i(e,d.planmagnetReviewQualityGate);}catch(n){h$1(n);}});}function Zn(c){let a=c.command("budgets").description("Planmagnet budgets & expenses");a.command("list").description("List budgets in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(ge,"planmagnetBudgets",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Currency","Planned","Spent","Remaining"],row:n=>[r(n.id,12),n.name,n.status,n.currency,String(n.plannedAmount),String(n.spentAmount),String(n.remainingAmount)]});}),a.command("get").description("Get a budget by id").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(fe,{id:t});if(!n.planmagnetBudget)throw new o(`Budget ${t} not found`);i(e,n.planmagnetBudget);}catch(n){h$1(n);}}),a.command("create").description("Create a budget").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Budget name").requiredOption("--currency <c>","Currency code (e.g. USD)").requiredOption("--planned-amount <n>","Planned amount",D).option("--description <s>","Description").option("--period-start <iso>","Period start (ISO)").option("--period-end <iso>","Period end (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,currency:t.currency,plannedAmount:t.plannedAmount};t.description&&(e.description=t.description),t.periodStart&&(e.periodStart=t.periodStart),t.periodEnd&&(e.periodEnd=t.periodEnd);let n=await b$1(ye,{input:e});k$1(`Budget created: ${n.planmagnetCreateBudget.name}`),i(t,n.planmagnetCreateBudget);}catch(e){h$1(e);}}),a.command("update").description("Update a budget").argument("<id>","Budget ID").option("--name <name>","Budget name").option("--description <s>","Description").option("--status <s>","Status").option("--currency <c>","Currency code").option("--planned-amount <n>","Planned amount",D).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.currency&&(n.currency=e.currency),e.plannedAmount!==void 0&&(n.plannedAmount=e.plannedAmount),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(we,{id:t,input:n});k$1("Budget updated"),i(e,d.planmagnetUpdateBudget);}catch(n){h$1(n);}}),a.command("delete").description("Delete a budget").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ee,{id:t});if(!n.planmagnetDeleteBudget)throw new o(`Budget ${t} could not be deleted`);k$1(`Budget ${t} deleted`),i(e,{deleted:n.planmagnetDeleteBudget});}catch(n){h$1(n);}}),a.command("approve").description("Approve a budget").argument("<id>","Budget ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(De,{id:t});k$1(`Budget ${t} approved`),i(e,n.planmagnetApproveBudget);}catch(n){h$1(n);}}),a.command("expenses").description("List budget expenses").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--budget <id>","Filter by budget ID").option("--category <c>","Filter by category").option("--date-from <iso>","Filter from date (ISO)").option("--date-to <iso>","Filter to date (ISO)").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.budget&&(e.budgetId=t.budget),t.category&&(e.category=t.category),t.dateFrom&&(e.dateFrom=t.dateFrom),t.dateTo&&(e.dateTo=t.dateTo),await l(Ie,"planmagnetBudgetExpenses",t,Object.keys(e).length?e:void 0,{headers:["ID","Budget","Amount","Category","Description","Date"],row:n=>[r(n.id,12),r(n.budgetId,12),String(n.amount),n.category??"-",r(n.description,24),n.date]});}),a.command("log-expense").description("Log an expense against a budget").requiredOption("--budget <id>","Budget ID").requiredOption("--amount <n>","Amount",D).requiredOption("--description <s>","Description").requiredOption("--date <iso>","Date (ISO)").option("--category <c>","Category").option("--reference-url <url>","Receipt / reference URL").option("--work-item <id>","Associated work item ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={budgetId:t.budget,amount:t.amount,description:t.description,date:t.date};t.category&&(e.category=t.category),t.referenceUrl&&(e.referenceUrl=t.referenceUrl),t.workItem&&(e.workItemId=t.workItem);let n=await b$1(Te,{input:e});k$1("Expense logged"),i(t,n.planmagnetLogExpense);}catch(e){h$1(e);}}),a.command("update-expense").description("Update an expense").argument("<id>","Expense ID").option("--amount <n>","Amount",D).option("--category <c>","Category").option("--description <s>","Description").option("--date <iso>","Date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.amount!==void 0&&(n.amount=e.amount),e.category&&(n.category=e.category),e.description!==void 0&&(n.description=e.description),e.date&&(n.date=e.date),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Re,{id:t,input:n});k$1("Expense updated"),i(e,d.planmagnetUpdateExpense);}catch(n){h$1(n);}}),a.command("delete-expense").description("Delete an expense").argument("<id>","Expense ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Pe,{id:t});if(!n.planmagnetDeleteExpense)throw new o(`Expense ${t} could not be deleted`);k$1(`Expense ${t} deleted`),i(e,{deleted:n.planmagnetDeleteExpense});}catch(n){h$1(n);}});}function ta(c){let a=c.command("time").description("Planmagnet time tracking");a.command("entries").description("List time entries in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--work-item <id>","Filter by work item ID").option("--user <id>","Filter by user ID").option("--timesheet <id>","Filter by timesheet ID").option("--billing-type <t>","Filter by billing type").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.workItem&&(e.workItemId=t.workItem),t.user&&(e.userId=t.user),t.timesheet&&(e.timesheetId=t.timesheet),t.billingType&&(e.billingType=t.billingType.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),await l(Oe,"planmagnetTimeEntries",t,Object.keys(e).length?e:void 0,{headers:["ID","Project","Work Item","User","Minutes","Billing","Status"],row:n=>[r(n.id,12),r(n.projectId,12),r(n.workItemId,12),r(n.userId,12),String(n.durationMinutes),n.billingType,n.status]});}),a.command("entry").description("Get a time entry by id").argument("<id>","Time entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ce,{id:t});if(!n.planmagnetTimeEntry)throw new o(`Time entry ${t} not found`);i(e,n.planmagnetTimeEntry);}catch(n){h$1(n);}}),a.command("create-entry").description("Create a time entry").requiredOption("--project <id>","Project ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--date <iso>","Date worked (ISO)").requiredOption("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type (BILLABLE|NON_BILLABLE|INTERNAL)").option("--billing-rate <n>","Billing rate per hour",D).option("--timesheet <id>","Timesheet ID").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,workItemId:t.workItem,date:t.date,durationMinutes:t.minutes};t.description&&(e.description=t.description),t.billingType&&(e.billingType=t.billingType.toUpperCase()),t.billingRate!==void 0&&(e.billingRate=t.billingRate),t.timesheet&&(e.timesheetId=t.timesheet);let n=await b$1(Se,{input:e});k$1("Time entry created"),i(t,n.planmagnetCreateTimeEntry);}catch(e){h$1(e);}}),a.command("update-entry").description("Update a time entry").argument("<id>","Time entry ID").option("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type").option("--status <s>","Status").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.minutes!==void 0&&(n.durationMinutes=e.minutes),e.description!==void 0&&(n.description=e.description),e.billingType&&(n.billingType=e.billingType.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(he,{id:t,input:n});k$1("Time entry updated"),i(e,d.planmagnetUpdateTimeEntry);}catch(n){h$1(n);}}),a.command("delete-entry").description("Delete a time entry").argument("<id>","Time entry ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ae,{id:t});if(!n.planmagnetDeleteTimeEntry)throw new o(`Time entry ${t} could not be deleted`);k$1(`Time entry ${t} deleted`),i(e,{deleted:n.planmagnetDeleteTimeEntry});}catch(n){h$1(n);}}),a.command("log").description("Quick-log time against a work item").requiredOption("--project <id>","Project ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--date <iso>","Date (ISO)").requiredOption("--minutes <n>","Duration in minutes",u).option("--description <s>","Description").option("--billing-type <t>","Billing type").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,workItemId:t.workItem,date:t.date,durationMinutes:t.minutes};t.description&&(e.description=t.description),t.billingType&&(e.billingType=t.billingType.toUpperCase());let n=await b$1(be,{input:e});k$1("Time logged"),i(t,n.planmagnetLogTime);}catch(e){h$1(e);}}),a.command("timesheets").description("List timesheets in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--user <id>","Filter by user ID").option("--status <s>","Filter by status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.user&&(e.userId=t.user),t.status&&(e.status=t.status.toUpperCase()),await l($e,"planmagnetTimesheets",t,Object.keys(e).length?e:void 0,{headers:["ID","User","Status","Total Min","Billable Min"],row:n=>[r(n.id,12),r(n.userId,12),n.status,String(n.totalMinutes),String(n.billableMinutes)]});}),a.command("timesheet").description("Get a timesheet by id").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ke,{id:t});if(!n.planmagnetTimesheet)throw new o(`Timesheet ${t} not found`);i(e,n.planmagnetTimesheet);}catch(n){h$1(n);}}),a.command("create-timesheet").description("Create a timesheet").requiredOption("--period-start <iso>","Period start (ISO)").requiredOption("--period-end <iso>","Period end (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(_e,{input:{periodStart:t.periodStart,periodEnd:t.periodEnd}});k$1("Timesheet created"),i(t,e.planmagnetCreateTimesheet);}catch(e){h$1(e);}}),a.command("submit-timesheet").description("Submit a timesheet for approval").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ue,{id:t});k$1(`Timesheet ${t} submitted`),i(e,n.planmagnetSubmitTimesheet);}catch(n){h$1(n);}}),a.command("approve-timesheet").description("Approve a submitted timesheet").argument("<id>","Timesheet ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Le,{id:t});k$1(`Timesheet ${t} approved`),i(e,n.planmagnetApproveTimesheet);}catch(n){h$1(n);}}),a.command("reject-timesheet").description("Reject a submitted timesheet").argument("<id>","Timesheet ID").option("--reason <s>","Rejection reason").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(je,{id:t,reason:e.reason});k$1(`Timesheet ${t} rejected`),i(e,n.planmagnetRejectTimesheet);}catch(n){h$1(n);}});}function ea(c){let a=c.command("risks").description("Planmagnet risks");a.command("list").description("List risks in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--severity <s>","Filter by severity").option("--category <c>","Filter by category").option("--owner <id>","Filter by owner ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.severity&&(e.severity=t.severity.toUpperCase()),t.category&&(e.category=t.category),t.owner&&(e.ownerId=t.owner),t.search&&(e.search=t.search),await l(xe,"planmagnetRisks",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Severity","Status","Score","Project"],row:n=>[r(n.id,12),r(n.title,28),n.severity,n.status,String(n.riskScore),r(n.projectId,12)]});}),a.command("get").description("Get a risk by id").argument("<id>","Risk ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Fe,{id:t});if(!n.planmagnetRisk)throw new o(`Risk ${t} not found`);i(e,n.planmagnetRisk);}catch(n){h$1(n);}}),a.command("matrix").description("Get the risk matrix for a project").argument("<projectId>","Project ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Me,{projectId:t});i(e,n.planmagnetRiskMatrix);}catch(n){h$1(n);}}),a.command("create").description("Create a risk").requiredOption("--project <id>","Project ID").requiredOption("--title <s>","Risk title").requiredOption("--severity <s>","Severity (NEGLIGIBLE|LOW|MEDIUM|HIGH|CRITICAL)").requiredOption("--likelihood <n>","Likelihood (1-5)",u).requiredOption("--impact <n>","Impact (1-5)",u).option("--description <s>","Description").option("--category <c>","Category").option("--owner <id>","Owner actor ID").option("--mitigation-plan <s>","Mitigation plan").option("--contingency-plan <s>","Contingency plan").option("--due-date <iso>","Mitigation due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,title:t.title,severity:t.severity.toUpperCase(),likelihood:t.likelihood,impact:t.impact};t.description&&(e.description=t.description),t.category&&(e.category=t.category),t.owner&&(e.ownerId=t.owner),t.mitigationPlan&&(e.mitigationPlan=t.mitigationPlan),t.contingencyPlan&&(e.contingencyPlan=t.contingencyPlan),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=f(t.tags));let n=await b$1(Ne,{input:e});k$1(`Risk created: ${n.planmagnetCreateRisk.title}`),i(t,n.planmagnetCreateRisk);}catch(e){h$1(e);}}),a.command("update").description("Update a risk").argument("<id>","Risk ID").option("--title <s>","Title").option("--description <s>","Description").option("--severity <s>","Severity").option("--status <s>","Status").option("--likelihood <n>","Likelihood (1-5)",u).option("--impact <n>","Impact (1-5)",u).option("--mitigation-plan <s>","Mitigation plan").option("--owner <id>","Owner actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.severity&&(n.severity=e.severity.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.likelihood!==void 0&&(n.likelihood=e.likelihood),e.impact!==void 0&&(n.impact=e.impact),e.mitigationPlan&&(n.mitigationPlan=e.mitigationPlan),e.owner&&(n.ownerId=e.owner),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(qe,{id:t,input:n});k$1("Risk updated"),i(e,d.planmagnetUpdateRisk);}catch(n){h$1(n);}}),a.command("delete").description("Delete a risk").argument("<id>","Risk ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ve,{id:t});if(!n.planmagnetDeleteRisk)throw new o(`Risk ${t} could not be deleted`);k$1(`Risk ${t} deleted`),i(e,{deleted:n.planmagnetDeleteRisk});}catch(n){h$1(n);}});}function na(c){let a=c.command("roadmaps").description("Planmagnet roadmaps & roadmap items");a.command("list").description("List roadmaps in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--type <t>","Filter by roadmap type").option("--owner <id>","Filter by owner ID").option("--public","Only public roadmaps").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.type&&(e.type=t.type.toUpperCase()),t.owner&&(e.ownerId=t.owner),t.public&&(e.isPublic=true),t.search&&(e.search=t.search),await l(Be,"planmagnetRoadmaps",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Public","Owner"],row:n=>[r(n.id,12),n.name,n.type,String(n.isPublic),r(n.ownerId,12)]});}),a.command("get").description("Get a roadmap by id").argument("<id>","Roadmap ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ge,{id:t});if(!n.planmagnetRoadmap)throw new o(`Roadmap ${t} not found`);i(e,n.planmagnetRoadmap);}catch(n){h$1(n);}}),a.command("create").description("Create a roadmap").requiredOption("--name <name>","Roadmap name").requiredOption("--type <t>","Type (TIMELINE|GANTT|SWIMLANE|CUSTOM)").requiredOption("--owner <id>","Owner actor ID").option("--description <s>","Description").option("--public","Mark as publicly shared").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,type:t.type.toUpperCase(),ownerId:t.owner};t.description&&(e.description=t.description),t.public&&(e.isPublic=!0);let n=await b$1(Qe,{input:e});k$1(`Roadmap created: ${n.planmagnetCreateRoadmap.name}`),i(t,n.planmagnetCreateRoadmap);}catch(e){h$1(e);}}),a.command("update").description("Update a roadmap").argument("<id>","Roadmap ID").option("--name <name>","Roadmap name").option("--description <s>","Description").option("--type <t>","Type").option("--public <bool>","Public flag (true|false)").option("--owner <id>","Owner actor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.type&&(n.type=e.type.toUpperCase()),e.public!==void 0&&(n.isPublic=e.public==="true"),e.owner&&(n.ownerId=e.owner),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Je,{id:t,input:n});k$1("Roadmap updated"),i(e,d.planmagnetUpdateRoadmap);}catch(n){h$1(n);}}),a.command("delete").description("Delete a roadmap").argument("<id>","Roadmap ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ye,{id:t});if(!n.planmagnetDeleteRoadmap)throw new o(`Roadmap ${t} could not be deleted`);k$1(`Roadmap ${t} deleted`),i(e,{deleted:n.planmagnetDeleteRoadmap});}catch(n){h$1(n);}}),a.command("items").description("List roadmap items").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--roadmap <id>","Filter by roadmap ID").option("--project <id>","Filter by project ID").option("--milestone <id>","Filter by milestone ID").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.roadmap&&(e.roadmapId=t.roadmap),t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(We,"planmagnetRoadmapItems",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Status","Roadmap"],row:n=>[r(n.id,12),r(n.title,32),n.status,r(n.roadmapId,12)]});}),a.command("get-item").description("Get a roadmap item by id").argument("<id>","Roadmap item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ve,{id:t});if(!n.planmagnetRoadmapItem)throw new o(`Roadmap item ${t} not found`);i(e,n.planmagnetRoadmapItem);}catch(n){h$1(n);}}),a.command("create-item").description("Create a roadmap item").requiredOption("--roadmap <id>","Roadmap ID").requiredOption("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--project <id>","Linked project ID").option("--milestone <id>","Linked milestone ID").option("--work-item <id>","Linked work item ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--color <c>","Display color").option("--swimlane <s>","Swimlane / row").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={roadmapId:t.roadmap,title:t.title};t.description&&(e.description=t.description),t.status&&(e.status=t.status.toUpperCase()),t.project&&(e.projectId=t.project),t.milestone&&(e.milestoneId=t.milestone),t.workItem&&(e.workItemId=t.workItem),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.color&&(e.color=t.color),t.swimlane&&(e.swimlane=t.swimlane),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(Ke,{input:e});k$1(`Roadmap item created: ${n.planmagnetCreateRoadmapItem.title}`),i(t,n.planmagnetCreateRoadmapItem);}catch(e){h$1(e);}}),a.command("update-item").description("Update a roadmap item").argument("<id>","Roadmap item ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--color <c>","Display color").option("--swimlane <s>","Swimlane / row").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.color&&(n.color=e.color),e.swimlane&&(n.swimlane=e.swimlane),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(Xe,{id:t,input:n});k$1("Roadmap item updated"),i(e,d.planmagnetUpdateRoadmapItem);}catch(n){h$1(n);}}),a.command("delete-item").description("Delete a roadmap item").argument("<id>","Roadmap item ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(ze,{id:t});if(!n.planmagnetDeleteRoadmapItem)throw new o(`Roadmap item ${t} could not be deleted`);k$1(`Roadmap item ${t} deleted`),i(e,{deleted:n.planmagnetDeleteRoadmapItem});}catch(n){h$1(n);}});}function aa(c){let a=c.command("features").description("Planmagnet feature requests");a.command("list").description("List feature requests in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--submitted-by <id>","Filter by submitter ID").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.submittedBy&&(e.submittedBy=t.submittedBy),t.search&&(e.search=t.search),await l(He,"planmagnetFeatureRequests",t,Object.keys(e).length?e:void 0,{headers:["ID","Title","Status","Votes","Priority","Submitter"],row:n=>[r(n.id,12),r(n.title,28),n.status,String(n.voteCount),n.priorityScore==null?"-":String(n.priorityScore),r(n.submittedBy,12)]});}),a.command("get").description("Get a feature request by id").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Ze,{id:t});if(!n.planmagnetFeatureRequest)throw new o(`Feature request ${t} not found`);i(e,n.planmagnetFeatureRequest);}catch(n){h$1(n);}}),a.command("create").description("Create a feature request").requiredOption("--title <s>","Feature title").option("--description <s>","Description").option("--project <id>","Project ID").option("--status <s>","Status").option("--business-value <n>","Business value rating (1-10)",u).option("--effort-estimate <s>","Effort estimate (XS|S|M|L|XL)").option("--work-item <id>","Linked work item ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title};t.description&&(e.description=t.description),t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.businessValue!==void 0&&(e.businessValue=t.businessValue),t.effortEstimate&&(e.effortEstimate=t.effortEstimate),t.workItem&&(e.workItemId=t.workItem),t.tags&&(e.tags=f(t.tags));let n=await b$1(tn,{input:e});k$1(`Feature request created: ${n.planmagnetCreateFeatureRequest.title}`),i(t,n.planmagnetCreateFeatureRequest);}catch(e){h$1(e);}}),a.command("update").description("Update a feature request").argument("<id>","Feature request ID").option("--title <s>","Title").option("--description <s>","Description").option("--status <s>","Status").option("--business-value <n>","Business value (1-10)",u).option("--effort-estimate <s>","Effort estimate").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),e.businessValue!==void 0&&(n.businessValue=e.businessValue),e.effortEstimate&&(n.effortEstimate=e.effortEstimate),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(en,{id:t,input:n});k$1("Feature request updated"),i(e,d.planmagnetUpdateFeatureRequest);}catch(n){h$1(n);}}),a.command("delete").description("Delete a feature request").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(nn,{id:t});if(!n.planmagnetDeleteFeatureRequest)throw new o(`Feature request ${t} could not be deleted`);k$1(`Feature request ${t} deleted`),i(e,{deleted:n.planmagnetDeleteFeatureRequest});}catch(n){h$1(n);}}),a.command("vote").description("Vote on a feature request").argument("<id>","Feature request ID").option("--weight <n>","Vote weight",u).option("--comment <s>","Optional comment").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};e.weight!==void 0&&(n.weight=e.weight),e.comment&&(n.comment=e.comment);let d=await b$1(an,{featureRequestId:t,input:Object.keys(n).length?n:void 0});k$1(`Voted on feature request ${t}`),i(e,d.planmagnetVoteOnFeature);}catch(n){h$1(n);}}),a.command("remove-vote").description("Remove your vote from a feature request").argument("<id>","Feature request ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(on,{featureRequestId:t});if(!n.planmagnetRemoveFeatureVote)throw new o(`No vote to remove from feature request ${t}`);k$1(`Vote removed from feature request ${t}`),i(e,{removed:n.planmagnetRemoveFeatureVote});}catch(n){h$1(n);}}),a.command("link-competitor").description("Link a competitor to a feature request").requiredOption("--feature <id>","Feature request ID").requiredOption("--competitor <id>","Competitor ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(rn,{input:{featureRequestId:t.feature,competitorId:t.competitor}});k$1("Competitor linked"),i(t,e.planmagnetLinkCompetitorToFeature);}catch(e){h$1(e);}}),a.command("unlink-competitor").description("Unlink a competitor from a feature request").requiredOption("--feature <id>","Feature request ID").requiredOption("--competitor <id>","Competitor ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(sn,{input:{featureRequestId:t.feature,competitorId:t.competitor}});k$1("Competitor unlinked"),i(t,e.planmagnetUnlinkCompetitorFromFeature);}catch(e){h$1(e);}});}function ia(c){let a=c.command("competitors").description("Planmagnet competitors");a.command("list").description("List competitors in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.search&&(e.search=t.search),await l(pn,"planmagnetCompetitors",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Website"],row:n=>[r(n.id,12),n.name,n.website??"-"]});}),a.command("get").description("Get a competitor by id").argument("<id>","Competitor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(mn,{id:t});if(!n.planmagnetCompetitor)throw new o(`Competitor ${t} not found`);i(e,n.planmagnetCompetitor);}catch(n){h$1(n);}}),a.command("create").description("Create a competitor").requiredOption("--name <name>","Competitor name").option("--description <s>","Description / notes").option("--website <url>","Website URL").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.description&&(e.description=t.description),t.website&&(e.website=t.website),t.tags&&(e.tags=f(t.tags));let n=await b$1(dn,{input:e});k$1(`Competitor created: ${n.planmagnetCreateCompetitor.name}`),i(t,n.planmagnetCreateCompetitor);}catch(e){h$1(e);}}),a.command("update").description("Update a competitor").argument("<id>","Competitor ID").option("--name <name>","Name").option("--description <s>","Description").option("--website <url>","Website URL").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.website&&(n.website=e.website),e.tags&&(n.tags=f(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(cn,{id:t,input:n});k$1("Competitor updated"),i(e,d.planmagnetUpdateCompetitor);}catch(n){h$1(n);}}),a.command("delete").description("Delete a competitor").argument("<id>","Competitor ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(un,{id:t});if(!n.planmagnetDeleteCompetitor)throw new o(`Competitor ${t} could not be deleted`);k$1(`Competitor ${t} deleted`),i(e,{deleted:n.planmagnetDeleteCompetitor});}catch(n){h$1(n);}});}function oa(c){let a=c.command("custom-fields").description("Planmagnet custom field definitions & values");a.command("list").description("List custom field definitions in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--field-type <t>","Filter by field type").option("--required","Only required fields").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.fieldType&&(e.fieldType=t.fieldType.toUpperCase()),t.required&&(e.isRequired=true),t.search&&(e.search=t.search),await l(gn,"planmagnetCustomFieldDefinitions",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Type","Required","Project"],row:n=>[r(n.id,12),n.name,n.fieldType,String(n.isRequired),r(n.projectId,12)]});}),a.command("get").description("Get a custom field definition by id").argument("<id>","Definition ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(fn,{id:t});if(!n.planmagnetCustomFieldDefinition)throw new o(`Custom field definition ${t} not found`);i(e,n.planmagnetCustomFieldDefinition);}catch(n){h$1(n);}}),a.command("create").description("Create a custom field definition").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Field name").requiredOption("--field-type <t>","Field type (TEXT|NUMBER|DATE|SELECT|\u2026)").option("--description <s>","Description").option("--required","Mark as required").option("--default-value <json>","Default value JSON").option("--options <json>","Options JSON (for SELECT/MULTI_SELECT)").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,fieldType:t.fieldType.toUpperCase()};t.description&&(e.description=t.description),t.required&&(e.isRequired=!0),t.defaultValue&&(e.defaultValue=g("default-value",t.defaultValue)),t.options&&(e.options=g("options",t.options)),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1(yn,{input:e});k$1(`Custom field created: ${n.planmagnetCreateCustomFieldDefinition.name}`),i(t,n.planmagnetCreateCustomFieldDefinition);}catch(e){h$1(e);}}),a.command("update").description("Update a custom field definition").argument("<id>","Definition ID").option("--name <name>","Field name").option("--description <s>","Description").option("--field-type <t>","Field type").option("--required <bool>","Required flag (true|false)").option("--options <json>","Options JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.fieldType&&(n.fieldType=e.fieldType.toUpperCase()),e.required!==void 0&&(n.isRequired=e.required==="true"),e.options&&(n.options=g("options",e.options)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(wn,{id:t,input:n});k$1("Custom field definition updated"),i(e,d.planmagnetUpdateCustomFieldDefinition);}catch(n){h$1(n);}}),a.command("delete").description("Delete a custom field definition").argument("<id>","Definition ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(En,{id:t});if(!n.planmagnetDeleteCustomFieldDefinition)throw new o(`Custom field definition ${t} could not be deleted`);k$1(`Custom field definition ${t} deleted`),i(e,{deleted:n.planmagnetDeleteCustomFieldDefinition});}catch(n){h$1(n);}}),a.command("values").description("List custom field values").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--definition <id>","Filter by definition ID").option("--work-item <id>","Filter by work item ID").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.definition&&(e.definitionId=t.definition),t.workItem&&(e.workItemId=t.workItem),await l(In,"planmagnetCustomFieldValues",t,Object.keys(e).length?e:void 0,{headers:["ID","Definition","Work Item","Set By"],row:n=>[r(n.id,12),r(n.definitionId,12),r(n.workItemId,12),r(n.setBy,12)]});}),a.command("set-value").description("Set a custom field value on a work item").requiredOption("--definition <id>","Definition ID").requiredOption("--work-item <id>","Work item ID").requiredOption("--value <json>","Value JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={definitionId:t.definition,workItemId:t.workItem,value:g("value",t.value)},n=await b$1(Dn,{input:e});k$1("Custom field value set"),i(t,n.planmagnetSetCustomFieldValue);}catch(e){h$1(e);}}),a.command("remove-value").description("Remove a custom field value from a work item").requiredOption("--definition <id>","Definition ID").requiredOption("--work-item <id>","Work item ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(Tn,{workItemId:t.workItem,definitionId:t.definition});if(!e.planmagnetRemoveCustomFieldValue)throw new o("Custom field value could not be removed");k$1("Custom field value removed"),i(t,{removed:e.planmagnetRemoveCustomFieldValue});}catch(e){h$1(e);}});}function ra(c){let a=c.command("automations").description("Planmagnet automation rules");a.command("list").description("List automation rules in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--status <s>","Filter by status").option("--trigger-type <t>","Filter by trigger type").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.status&&(e.status=t.status.toUpperCase()),t.triggerType&&(e.triggerType=t.triggerType.toUpperCase()),t.search&&(e.search=t.search),await l(Pn,"planmagnetAutomationRules",t,Object.keys(e).length?e:void 0,{headers:["ID","Name","Status","Trigger","Runs","Project"],row:n=>[r(n.id,12),n.name,n.status,n.triggerType,String(n.executionCount),r(n.projectId,12)]});}),a.command("get").description("Get an automation rule by id").argument("<id>","Automation rule ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(On,{id:t});if(!n.planmagnetAutomationRule)throw new o(`Automation rule ${t} not found`);i(e,n.planmagnetAutomationRule);}catch(n){h$1(n);}}),a.command("create").description("Create an automation rule").requiredOption("--project <id>","Project ID").requiredOption("--name <name>","Rule name").requiredOption("--trigger-type <t>","Trigger type (e.g. WORK_ITEM_CREATED)").requiredOption("--trigger-config <json>","Trigger configuration JSON").requiredOption("--actions <json>","Actions JSON array").option("--description <s>","Description").option("--conditions <json>","Conditions JSON array").option("--sort-order <n>","Sort order",u).option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,name:t.name,triggerType:t.triggerType.toUpperCase(),triggerConfig:g("trigger-config",t.triggerConfig),actions:g("actions",t.actions)};t.description&&(e.description=t.description),t.conditions&&(e.conditions=g("conditions",t.conditions)),t.sortOrder!==void 0&&(e.sortOrder=t.sortOrder);let n=await b$1($n,{input:e});k$1(`Automation rule created: ${n.planmagnetCreateAutomationRule.name}`),i(t,n.planmagnetCreateAutomationRule);}catch(e){h$1(e);}}),a.command("update").description("Update an automation rule").argument("<id>","Automation rule ID").option("--name <name>","Rule name").option("--description <s>","Description").option("--trigger-type <t>","Trigger type").option("--trigger-config <json>","Trigger configuration JSON").option("--conditions <json>","Conditions JSON array").option("--actions <json>","Actions JSON array").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.triggerType&&(n.triggerType=e.triggerType.toUpperCase()),e.triggerConfig&&(n.triggerConfig=g("trigger-config",e.triggerConfig)),e.conditions&&(n.conditions=g("conditions",e.conditions)),e.actions&&(n.actions=g("actions",e.actions)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(kn,{id:t,input:n});k$1("Automation rule updated"),i(e,d.planmagnetUpdateAutomationRule);}catch(n){h$1(n);}}),a.command("delete").description("Delete an automation rule").argument("<id>","Automation rule ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Sn,{id:t});if(!n.planmagnetDeleteAutomationRule)throw new o(`Automation rule ${t} could not be deleted`);k$1(`Automation rule ${t} deleted`),i(e,{deleted:n.planmagnetDeleteAutomationRule});}catch(n){h$1(n);}}),a.command("toggle").description("Toggle an automation rule (activate/pause)").argument("<id>","Automation rule ID").requiredOption("--status <s>","Status (ACTIVE|PAUSED|DISABLED|ERROR)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(hn,{id:t,status:e.status.toUpperCase()});k$1(`Automation rule ${t} \u2192 ${n.planmagnetToggleAutomationRule.status}`),i(e,n.planmagnetToggleAutomationRule);}catch(n){h$1(n);}}),a.command("execute").description("Manually execute an automation rule").argument("<id>","Automation rule ID").option("--trigger-data <json>","Trigger data JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=e.triggerData?g("trigger-data",e.triggerData):void 0,d=await b$1(An,{id:t,triggerData:n});k$1(`Automation rule executed: ${d.planmagnetExecuteAutomationRule.status}`),i(e,d.planmagnetExecuteAutomationRule);}catch(n){h$1(n);}}),a.command("executions").description("List automation executions").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--rule <id>","Filter by rule ID").option("--status <s>","Filter by execution status").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.rule&&(e.ruleId=t.rule),t.status&&(e.status=t.status.toUpperCase()),await l(Cn,"planmagnetAutomationExecutions",t,Object.keys(e).length?e:void 0,{headers:["ID","Rule","Status","Executed At","Duration (ms)"],row:n=>[r(n.id,12),r(n.ruleId,12),n.status,n.executedAt,n.durationMs==null?"-":String(n.durationMs)]});});}async function sa(c,a,t,e,n){try{let P=(await b$1(c,{id:t}))[a];if(!P)throw new o(`Sync ${t} could not be ${e}`);k$1(`Sync ${t} ${e}`),i(n,P);}catch(d){h$1(d);}}function pa(c){let a=c.command("syncs").description("Planmagnet external syncs");a.command("list").description("List external syncs in a workspace").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--project <id>","Filter by project ID").option("--provider <p>","Filter by provider").option("--direction <d>","Filter by direction").option("--status <s>","Filter by status").option("--search <q>","Free-text search").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.project&&(e.projectId=t.project),t.provider&&(e.provider=t.provider.toUpperCase()),t.direction&&(e.direction=t.direction.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search),await l(bn,"planmagnetExternalSyncs",t,Object.keys(e).length?e:void 0,{headers:["ID","Provider","Direction","Status","Project","Synced"],row:n=>[r(n.id,12),n.provider,n.direction,n.status,r(n.projectId,12),String(n.totalItemsSynced)]});}),a.command("get").description("Get an external sync by id").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(_n,{id:t});if(!n.planmagnetExternalSync)throw new o(`Sync ${t} not found`);i(e,n.planmagnetExternalSync);}catch(n){h$1(n);}}),a.command("create").description("Create an external sync configuration").requiredOption("--project <id>","Project ID").requiredOption("--provider <p>","Provider (JIRA|GITHUB|LINEAR|\u2026)").requiredOption("--direction <d>","Direction (INBOUND|OUTBOUND|BIDIRECTIONAL)").requiredOption("--external-project <id>","External project/board ID").requiredOption("--connection-config <json>","Connection configuration JSON").option("--external-project-url <url>","External project URL").option("--field-mapping <json>","Field mapping JSON").option("--sync-filters <json>","Sync filter rules JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={projectId:t.project,provider:t.provider.toUpperCase(),direction:t.direction.toUpperCase(),externalProjectId:t.externalProject,connectionConfig:g("connection-config",t.connectionConfig)};t.externalProjectUrl&&(e.externalProjectUrl=t.externalProjectUrl),t.fieldMapping&&(e.fieldMapping=g("field-mapping",t.fieldMapping)),t.syncFilters&&(e.syncFilters=g("sync-filters",t.syncFilters));let n=await b$1(Ln,{input:e});k$1(`Sync created: ${n.planmagnetCreateExternalSync.provider}`),i(t,n.planmagnetCreateExternalSync);}catch(e){h$1(e);}}),a.command("update").description("Update an external sync configuration").argument("<id>","Sync ID").option("--direction <d>","Direction").option("--external-project <id>","External project ID").option("--external-project-url <url>","External project URL").option("--connection-config <json>","Connection configuration JSON").option("--field-mapping <json>","Field mapping JSON").option("--sync-filters <json>","Sync filter rules JSON").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.direction&&(n.direction=e.direction.toUpperCase()),e.externalProject&&(n.externalProjectId=e.externalProject),e.externalProjectUrl&&(n.externalProjectUrl=e.externalProjectUrl),e.connectionConfig&&(n.connectionConfig=g("connection-config",e.connectionConfig)),e.fieldMapping&&(n.fieldMapping=g("field-mapping",e.fieldMapping)),e.syncFilters&&(n.syncFilters=g("sync-filters",e.syncFilters)),!Object.keys(n).length)throw new o("No updates specified");let d=await b$1(jn,{id:t,input:n});k$1("Sync updated"),i(e,d.planmagnetUpdateExternalSync);}catch(n){h$1(n);}}),a.command("delete").description("Delete an external sync configuration").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(xn,{id:t});if(!n.planmagnetDeleteExternalSync)throw new o(`Sync ${t} could not be deleted`);k$1(`Sync ${t} deleted`),i(e,{deleted:n.planmagnetDeleteExternalSync});}catch(n){h$1(n);}}),a.command("pause").description("Pause a sync").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action((t,e)=>sa(Fn,"planmagnetPauseExternalSync",t,"paused",e)),a.command("resume").description("Resume a paused sync").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action((t,e)=>sa(Mn,"planmagnetResumeExternalSync",t,"resumed",e)),a.command("start").description("Start a sync operation").argument("<id>","Sync ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(Nn,{id:t});k$1(`Sync ${t} started`),i(e,n.planmagnetStartSync);}catch(n){h$1(n);}}),a.command("export").description("Export items to an external tool").requiredOption("--sync <id>","Sync ID").option("--all","Export all eligible items").option("--ids <csv>","Comma-separated internal IDs to export").option("-f, --format <format>","Output format").action(async t=>{try{let e={syncId:t.sync};t.all&&(e.exportAll=!0),t.ids&&(e.internalIds=f(t.ids));let n=await b$1(qn,{input:e});k$1("Export started"),i(t,n.planmagnetExportToExternal);}catch(e){h$1(e);}}),a.command("import").description("Import items from an external tool").requiredOption("--sync <id>","Sync ID").option("--all","Import all eligible items").option("--ids <csv>","Comma-separated external IDs to import").option("-f, --format <format>","Output format").action(async t=>{try{let e={syncId:t.sync};t.all&&(e.importAll=!0),t.ids&&(e.externalIds=f(t.ids));let n=await b$1(vn,{input:e});k$1("Import started"),i(t,n.planmagnetImportFromExternal);}catch(e){h$1(e);}}),a.command("mappings").description("List external mappings").option("--workspace <id>","Workspace ID (defaults to the authenticated workspace)").option("--sync <id>","Filter by sync ID").option("--internal-type <t>","Filter by internal type").option("--internal-id <id>","Filter by internal ID").option("--external-type <t>","Filter by external type").option("--external-id <id>","Filter by external ID").option("--limit <n>","Page size",Number,50).option("--cursor <c>","Pagination cursor (after)").option("-f, --format <format>","Output format").action(async t=>{let e={};t.sync&&(e.syncId=t.sync),t.internalType&&(e.internalType=t.internalType),t.internalId&&(e.internalId=t.internalId),t.externalType&&(e.externalType=t.externalType),t.externalId&&(e.externalId=t.externalId),await l(Un,"planmagnetExternalMappings",t,Object.keys(e).length?e:void 0,{headers:["ID","Sync","Internal","Internal ID","External","External ID"],row:n=>[r(n.id,12),r(n.syncId,12),n.internalType,r(n.internalId,12),n.externalType,r(n.externalId,12)]});});}var ua={id:"planmagnet",version:"1.0.0",displayName:"Planmagnet",dependsOn:["auth","workspaces"],register(c,a$1){a(a$1);let t=c.command("planmagnet").description("Planmagnet project & portfolio management");Bn(t),Gn(t),Wn(t),Vn(t),Qn(t),Jn(t),Yn(t),Kn(t),Xn(t),zn(t),Hn(t),Zn(t),ta(t),ea(t),na(t),aa(t),ia(t),oa(t),ra(t),pa(t);}},Ei=ua;export{Ei as default};
|