@burdenoff/cli-sdk 2026.1021.1 → 2026.1031.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/{chunk-NLEVVDXR.js → chunk-SQSFZFQZ.js} +1 -1
  2. package/dist/{chunk-IZXPWPKX.js → chunk-UAFYTYK6.js} +7 -7
  3. package/dist/core/index.cjs +7 -7
  4. package/dist/core/index.js +1 -1
  5. package/dist/index.cjs +7 -7
  6. package/dist/index.js +1 -1
  7. package/dist/modules/adaptercloud/index.js +1 -1
  8. package/dist/modules/artistrybase/index.cjs +3 -3
  9. package/dist/modules/artistrybase/index.js +1 -1
  10. package/dist/modules/assethandler/index.cjs +1 -1
  11. package/dist/modules/assethandler/index.js +1 -1
  12. package/dist/modules/atheletebridge/index.cjs +6 -6
  13. package/dist/modules/atheletebridge/index.js +1 -1
  14. package/dist/modules/auth/index.cjs +39 -17
  15. package/dist/modules/auth/index.js +42 -20
  16. package/dist/modules/billing/index.js +1 -1
  17. package/dist/modules/brainyrich/index.cjs +2 -2
  18. package/dist/modules/brainyrich/index.js +1 -1
  19. package/dist/modules/buildmyiq/index.cjs +1 -1
  20. package/dist/modules/buildmyiq/index.js +1 -1
  21. package/dist/modules/channels/index.cjs +13 -14
  22. package/dist/modules/channels/index.js +11 -12
  23. package/dist/modules/collabkin/index.js +1 -1
  24. package/dist/modules/comradecircle/index.cjs +3 -3
  25. package/dist/modules/comradecircle/index.js +1 -1
  26. package/dist/modules/conversations/index.cjs +1 -1
  27. package/dist/modules/conversations/index.js +5 -5
  28. package/dist/modules/coolandlovely/index.js +1 -1
  29. package/dist/modules/cosmicintersection/index.cjs +4 -4
  30. package/dist/modules/cosmicintersection/index.js +1 -1
  31. package/dist/modules/crewfoundry/index.cjs +4 -4
  32. package/dist/modules/crewfoundry/index.js +1 -1
  33. package/dist/modules/devportal/index.cjs +3 -3
  34. package/dist/modules/devportal/index.js +1 -1
  35. package/dist/modules/ecoimpacthub/index.js +1 -1
  36. package/dist/modules/eventfullymanaged/index.js +1 -1
  37. package/dist/modules/export/index.cjs +2 -2
  38. package/dist/modules/export/index.js +1 -1
  39. package/dist/modules/files/index.cjs +4 -4
  40. package/dist/modules/files/index.js +1 -1
  41. package/dist/modules/fluidgrids/index.js +1 -1
  42. package/dist/modules/ggnomad/index.cjs +3 -3
  43. package/dist/modules/ggnomad/index.js +1 -1
  44. package/dist/modules/govcitizenhub/index.cjs +2 -2
  45. package/dist/modules/govcitizenhub/index.js +1 -1
  46. package/dist/modules/groups/index.cjs +16 -15
  47. package/dist/modules/groups/index.js +15 -14
  48. package/dist/modules/headshotmarketing/index.js +1 -1
  49. package/dist/modules/hookmovies/index.js +1 -1
  50. package/dist/modules/housingvista/index.cjs +6 -6
  51. package/dist/modules/housingvista/index.js +1 -1
  52. package/dist/modules/integrations/index.cjs +1 -1
  53. package/dist/modules/integrations/index.js +1 -1
  54. package/dist/modules/intelwatchtower/index.cjs +3 -3
  55. package/dist/modules/intelwatchtower/index.js +1 -1
  56. package/dist/modules/kadaikodi/index.js +1 -1
  57. package/dist/modules/labsofscience/index.cjs +3 -3
  58. package/dist/modules/labsofscience/index.js +1 -1
  59. package/dist/modules/manufacturedops/index.js +1 -1
  60. package/dist/modules/movethewheels/index.js +1 -1
  61. package/dist/modules/mybodyshield/index.cjs +4 -4
  62. package/dist/modules/mybodyshield/index.js +1 -1
  63. package/dist/modules/notifications/index.cjs +2 -2
  64. package/dist/modules/notifications/index.js +1 -1
  65. package/dist/modules/organizations/index.js +1 -1
  66. package/dist/modules/planmagnet/index.js +1 -1
  67. package/dist/modules/products/index.cjs +5 -5
  68. package/dist/modules/products/index.js +5 -5
  69. package/dist/modules/proserviceworld/index.js +1 -1
  70. package/dist/modules/rbac/index.cjs +8 -19
  71. package/dist/modules/rbac/index.js +6 -17
  72. package/dist/modules/sandbox/index.cjs +3 -3
  73. package/dist/modules/sandbox/index.js +1 -1
  74. package/dist/modules/scheduler/index.cjs +4 -4
  75. package/dist/modules/scheduler/index.js +1 -1
  76. package/dist/modules/security/index.cjs +2 -2
  77. package/dist/modules/security/index.js +1 -1
  78. package/dist/modules/semanticfed/index.js +1 -1
  79. package/dist/modules/store/index.cjs +2 -2
  80. package/dist/modules/store/index.js +1 -1
  81. package/dist/modules/subscriberbot/index.js +1 -1
  82. package/dist/modules/support/index.js +1 -1
  83. package/dist/modules/tags/index.cjs +2 -2
  84. package/dist/modules/tags/index.js +1 -1
  85. package/dist/modules/technospam/index.cjs +2 -2
  86. package/dist/modules/technospam/index.js +1 -1
  87. package/dist/modules/theculturepost/index.js +1 -1
  88. package/dist/modules/theglobalfuel/index.js +1 -1
  89. package/dist/modules/timecampus/index.js +1 -1
  90. package/dist/modules/tours/index.cjs +2 -2
  91. package/dist/modules/tours/index.js +1 -1
  92. package/dist/modules/vibecontrols/index.js +1 -1
  93. package/dist/modules/workspaces/index.cjs +10 -10
  94. package/dist/modules/workspaces/index.js +12 -12
  95. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var p=class extends Error{exitCode;hint;constructor(n,e){super(n),this.name="CliUserError",this.exitCode=e?.exitCode??1,this.hint=e?.hint;}},h=class extends p{constructor(n,e){super(n,{exitCode:2,hint:e?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},b=class extends Error{cause;constructor(n,e){super(n),this.name="CliInternalError",this.cause=e;}};var C=null;function E(o){C=o;}function I(){if(!C)throw new b("vibecontrols module helpers used before setHelpersContext was called");return C}function De(){let o=I();if(!o.auth.isAuthenticated())throw new h("Authentication required.",{hint:`Run \`${o.productName} auth login\` to authenticate.`})}async function c(o,n){return De(),I().gql.workspace.request(o,n)}async function w(o,n){return I().gql.workspaceAuthOnly.request(o,n)}function a(o){let n=o instanceof Error?o.message:String(o);throw new p(n)}function s(o,n,e){I().output.formatAndOutput(o,n,e);}function d(o){I().output.printSuccess(o);}function y(o){return I().output.formatDate(o)}function m(o,n){return I().output.truncate(o,n)}var S=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var p=class extends Error{exitCode;hint;constructor(n,e){super(n),this.name="CliUserError",this.exitCode=e?.exitCode??1,this.hint=e?.hint;}},h=class extends p{constructor(n,e){super(n,{exitCode:2,hint:e?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},b=class extends Error{cause;constructor(n,e){super(n),this.name="CliInternalError",this.cause=e;}};var C=null;function E(o){C=o;}function I(){if(!C)throw new b("vibecontrols module helpers used before setHelpersContext was called");return C}function De(){let o=I();if(!o.auth.isAuthenticated())throw new h("Authentication required.",{hint:`Run \`${o.productName} auth login\` to authenticate.`})}async function c(o,n){return De(),I().gql.workspace.request(o,n)}async function w(o,n){return I().gql.workspaceAuthOnly.request(o,n)}function s(o){let n=o instanceof Error?o.message:String(o);throw new p(n)}function a(o,n,e){I().output.formatAndOutput(o,n,e);}function d(o){I().output.printSuccess(o);}function y(o){return I().output.formatDate(o)}function m(o,n){return I().output.truncate(o,n)}var S=`
2
2
  query MybListPrograms(
3
3
  $memberId: ID
4
4
  $status: MybProgramStatus
@@ -268,14 +268,14 @@
268
268
  shareMetrics notes createdAt workspaceId
269
269
  }
270
270
  }
271
- `,ae=`
271
+ `,se=`
272
272
  mutation MybTransitionCoaching($id: ID!, $status: MybCoachingStatus!) {
273
273
  mybTransitionCoaching(id: $id, status: $status) {
274
274
  id coachId memberId status startedAt endedAt updatedAt
275
275
  }
276
276
  }
277
- `,se=`
277
+ `,ae=`
278
278
  query MybHealth {
279
279
  mybHealth
280
280
  }
281
- `;function i(o){let n=Number.parseInt(o,10);if(Number.isNaN(n))throw new p(`Expected an integer but got "${o}"`);return n}function l(o){let n=Number.parseFloat(o);if(Number.isNaN(n))throw new p(`Expected a number but got "${o}"`);return n}function k(o){return o.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function ce(o){let n=o.command("programs").description("Mybodyshield training programs");n.command("list").description("List training programs").option("--member <id>","Filter by member ID").option("--status <s>","DRAFT|ACTIVE|COMPLETED|ARCHIVED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(S,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});s(e,t.mybListPrograms.items,{headers:["ID","Name","Goal","Level","Phase","Status"],rows:t.mybListPrograms.items.map(r=>[m(r.id,12),r.name,r.goalType,r.level,r.phase,r.status])});}catch(t){a(t);}}),n.command("get").description("Get a training program by id").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(x,{id:e});if(!r.mybProgram)throw new p(`Program ${e} not found`);s(t,r.mybProgram);}catch(r){a(r);}}),n.command("workouts").description("List workouts for a program").argument("<programId>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(O,{programId:e});s(t,r.mybProgramWorkouts,{headers:["ID","Name","Type","Day","Week","Duration"],rows:r.mybProgramWorkouts.map(g=>[m(g.id,12),g.name,g.type,g.dayOfWeek!=null?String(g.dayOfWeek):"-",g.weekNumber!=null?String(g.weekNumber):"-",g.durationMin!=null?String(g.durationMin):"-"])});}catch(r){a(r);}}),n.command("create").description("Create a training program").requiredOption("--name <name>","Program name").option("--member <id>","Member ID").option("--coach <id>","Coach ID").option("--description <s>","Description").option("--goal-type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|ELITE").option("--phase <p>","BUILD|PEAK|DELOAD|MAINTENANCE").option("--weeks <n>","Number of weeks",i).option("--days-per-week <n>","Days per week",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.member&&(t.memberId=e.member),e.coach&&(t.coachId=e.coach),e.description&&(t.description=e.description),e.goalType&&(t.goalType=e.goalType.toUpperCase()),e.level&&(t.level=e.level.toUpperCase()),e.phase&&(t.phase=e.phase.toUpperCase()),e.weeks!==void 0&&(t.weeks=e.weeks),e.daysPerWeek!==void 0&&(t.daysPerWeek=e.daysPerWeek),e.startDate&&(t.startDate=e.startDate),e.endDate&&(t.endDate=e.endDate),e.tags&&(t.tags=k(e.tags));let r=await c(D,{input:t});d(`Program created: ${r.mybCreateProgram.name}`),s(e,r.mybCreateProgram);}catch(t){a(t);}}),n.command("update").description("Update a training program").argument("<id>","Program ID").option("--name <name>","Program name").option("--description <s>","Description").option("--goal-type <t>","Goal type").option("--level <l>","Fitness level").option("--phase <p>","Program phase").option("--weeks <n>","Number of weeks",i).option("--days-per-week <n>","Days per week",i).option("--coach <id>","Coach ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.name&&(r.name=t.name),t.description!==void 0&&(r.description=t.description),t.goalType&&(r.goalType=t.goalType.toUpperCase()),t.level&&(r.level=t.level.toUpperCase()),t.phase&&(r.phase=t.phase.toUpperCase()),t.weeks!==void 0&&(r.weeks=t.weeks),t.daysPerWeek!==void 0&&(r.daysPerWeek=t.daysPerWeek),t.coach&&(r.coachId=t.coach),t.startDate&&(r.startDate=t.startDate),t.endDate&&(r.endDate=t.endDate),t.tags&&(r.tags=k(t.tags)),!Object.keys(r).length)throw new p("No updates specified");let g=await c(v,{id:e,input:r});d("Program updated"),s(t,g.mybUpdateProgram);}catch(r){a(r);}}),n.command("transition").description("Advance a program through its lifecycle").argument("<id>","Program ID").requiredOption("--status <s>","DRAFT|ACTIVE|COMPLETED|ARCHIVED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(R,{id:e,status:t.status.toUpperCase()});d(`Program transitioned to ${r.mybTransitionProgram.status}`),s(t,r.mybTransitionProgram);}catch(r){a(r);}}),n.command("archive").description("Archive a training program").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(P,{id:e});d(r.mybArchiveProgram?"Program archived":"Program not archived"),s(t,{archived:r.mybArchiveProgram});}catch(r){a(r);}});}function de(o){let n=o.command("workouts").description("Mybodyshield workouts & exercises");n.command("add").description("Add a workout to a program").requiredOption("--program <id>","Program ID").requiredOption("--name <name>","Workout name").option("--description <s>","Description").option("--type <t>","STRENGTH|CARDIO|HIIT|MOBILITY|RECOVERY|YOGA").option("--day-of-week <n>","Day of week (0-6)",i).option("--week-number <n>","Week number",i).option("--duration-min <n>","Duration (minutes)",i).option("--order-index <n>","Order index",i).option("-f, --format <format>","Output format").action(async e=>{try{let t={programId:e.program,name:e.name};e.description&&(t.description=e.description),e.type&&(t.type=e.type.toUpperCase()),e.dayOfWeek!==void 0&&(t.dayOfWeek=e.dayOfWeek),e.weekNumber!==void 0&&(t.weekNumber=e.weekNumber),e.durationMin!==void 0&&(t.durationMin=e.durationMin),e.orderIndex!==void 0&&(t.orderIndex=e.orderIndex);let r=await c(M,{input:t});d(`Workout added: ${r.mybAddWorkout.name}`),s(e,r.mybAddWorkout);}catch(t){a(t);}}),n.command("add-exercise").description("Add an exercise to a workout").requiredOption("--workout <id>","Workout ID").requiredOption("--name <name>","Exercise name").option("--muscle-group <g>","CHEST|BACK|LEGS|SHOULDERS|ARMS|CORE|FULL_BODY").option("--sets <n>","Sets",i).option("--reps <n>","Reps",i).option("--rest-seconds <n>","Rest (seconds)",i).option("--target-weight <n>","Target weight",l).option("--order-index <n>","Order index",i).option("--instructions <s>","Instructions").option("--demo-file-id <id>","Demo file ID").option("-f, --format <format>","Output format").action(async e=>{try{let t={workoutId:e.workout,name:e.name};e.muscleGroup&&(t.muscleGroup=e.muscleGroup.toUpperCase()),e.sets!==void 0&&(t.sets=e.sets),e.reps!==void 0&&(t.reps=e.reps),e.restSeconds!==void 0&&(t.restSeconds=e.restSeconds),e.targetWeight!==void 0&&(t.targetWeight=e.targetWeight),e.orderIndex!==void 0&&(t.orderIndex=e.orderIndex),e.instructions&&(t.instructions=e.instructions),e.demoFileId&&(t.demoFileId=e.demoFileId);let r=await c(N,{input:t});d(`Exercise added: ${r.mybAddExercise.name}`),s(e,r.mybAddExercise);}catch(t){a(t);}});}function ue(o){let n=o.command("sessions").description("Mybodyshield workout sessions");n.command("list").description("List workout sessions").option("--program <id>","Filter by program ID").option("--status <s>","SCHEDULED|IN_PROGRESS|COMPLETED|SKIPPED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(L,{programId:e.program,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});s(e,t.mybListSessions.items,{headers:["ID","Member","Status","Scheduled","Started"],rows:t.mybListSessions.items.map(r=>[m(r.id,12),m(r.memberId,12),r.status,y(r.scheduledFor),y(r.startedAt)])});}catch(t){a(t);}}),n.command("get").description("Get a workout session by id").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c($,{id:e});if(!r.mybSession)throw new p(`Session ${e} not found`);s(t,r.mybSession);}catch(r){a(r);}}),n.command("start").description("Start a workout session").option("--program <id>","Program ID").option("--workout <id>","Workout ID").option("--scheduled-for <iso>","Scheduled time (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async e=>{try{let t={};e.program&&(t.programId=e.program),e.workout&&(t.workoutId=e.workout),e.scheduledFor&&(t.scheduledFor=e.scheduledFor),e.notes&&(t.notes=e.notes);let r=await c(G,{input:t});d(`Session started: ${m(r.mybStartSession.id,12)}`),s(e,r.mybStartSession);}catch(t){a(t);}}),n.command("log-set").description("Log a set within a session").requiredOption("--session <id>","Session ID").requiredOption("--exercise-name <name>","Exercise name").option("--set-number <n>","Set number",i).option("--reps <n>","Reps",i).option("--weight <n>","Weight",l).option("--distance-m <n>","Distance (meters)",l).option("--duration-sec <n>","Duration (seconds)",i).option("--personal-record","Mark as a personal record").option("-f, --format <format>","Output format").action(async e=>{try{let t={sessionId:e.session,exerciseName:e.exerciseName};e.setNumber!==void 0&&(t.setNumber=e.setNumber),e.reps!==void 0&&(t.reps=e.reps),e.weight!==void 0&&(t.weight=e.weight),e.distanceM!==void 0&&(t.distanceM=e.distanceM),e.durationSec!==void 0&&(t.durationSec=e.durationSec),e.personalRecord&&(t.isPersonalRecord=!0);let r=await c(_,{input:t});d(`Set logged for ${r.mybLogSet.exerciseName}`),s(e,r.mybLogSet);}catch(t){a(t);}}),n.command("complete").description("Complete a workout session").argument("<id>","Session ID").option("--calories-burned <n>","Calories burned",i).option("--perceived-exertion <n>","Perceived exertion (1-10)",i).option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};t.caloriesBurned!==void 0&&(r.caloriesBurned=t.caloriesBurned),t.perceivedExertion!==void 0&&(r.perceivedExertion=t.perceivedExertion),t.notes&&(r.notes=t.notes);let g=await c(W,{id:e,input:r});d("Session completed"),s(t,g.mybCompleteSession);}catch(r){a(r);}});}function pe(o){let n=o.command("goals").description("Mybodyshield fitness goals");n.command("list").description("List fitness goals").option("--member <id>","Filter by member ID").option("--status <s>","ACTIVE|ACHIEVED|PAUSED|ABANDONED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(U,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});s(e,t.mybListGoals.items,{headers:["ID","Title","Type","Status","Current","Target"],rows:t.mybListGoals.items.map(r=>[m(r.id,12),r.title,r.type,r.status,`${r.currentValue??0}${r.unit?` ${r.unit}`:""}`,`${r.targetValue??0}${r.unit?` ${r.unit}`:""}`])});}catch(t){a(t);}}),n.command("get").description("Get a goal by id").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(q,{id:e});if(!r.mybGoal)throw new p(`Goal ${e} not found`);s(t,r.mybGoal);}catch(r){a(r);}}),n.command("create").description("Create a fitness goal").requiredOption("--title <t>","Goal title").option("--member <id>","Member ID").option("--type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--description <s>","Description").option("--target-value <n>","Target value",l).option("--baseline-value <n>","Baseline value",l).option("--unit <u>","Unit").option("--target-date <iso>","Target date (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title};e.member&&(t.memberId=e.member),e.type&&(t.type=e.type.toUpperCase()),e.description&&(t.description=e.description),e.targetValue!==void 0&&(t.targetValue=e.targetValue),e.baselineValue!==void 0&&(t.baselineValue=e.baselineValue),e.unit&&(t.unit=e.unit),e.targetDate&&(t.targetDate=e.targetDate);let r=await c(F,{input:t});d(`Goal created: ${r.mybCreateGoal.title}`),s(e,r.mybCreateGoal);}catch(t){a(t);}}),n.command("update").description("Update a fitness goal").argument("<id>","Goal ID").option("--title <t>","Goal title").option("--type <t>","Goal type").option("--description <s>","Description").option("--target-value <n>","Target value",l).option("--current-value <n>","Current value",l).option("--baseline-value <n>","Baseline value",l).option("--unit <u>","Unit").option("--target-date <iso>","Target date (ISO)").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.type&&(r.type=t.type.toUpperCase()),t.description!==void 0&&(r.description=t.description),t.targetValue!==void 0&&(r.targetValue=t.targetValue),t.currentValue!==void 0&&(r.currentValue=t.currentValue),t.baselineValue!==void 0&&(r.baselineValue=t.baselineValue),t.unit&&(r.unit=t.unit),t.targetDate&&(r.targetDate=t.targetDate),!Object.keys(r).length)throw new p("No updates specified");let g=await c(V,{id:e,input:r});d("Goal updated"),s(t,g.mybUpdateGoal);}catch(r){a(r);}}),n.command("achieve").description("Mark a goal as achieved").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(H,{id:e});d(`Goal achieved: ${r.mybAchieveGoal.title}`),s(t,r.mybAchieveGoal);}catch(r){a(r);}});}function me(o){let n=o.command("metrics").description("Mybodyshield body metrics");n.command("list").description("List body metrics").option("--member <id>","Filter by member ID").option("--type <t>","WEIGHT|BODY_FAT|CHEST|WAIST|HIPS|THIGH|ARM|RESTING_HEART_RATE").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(B,{memberId:e.member,type:e.type?e.type.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});s(e,t.mybListBodyMetrics.items,{headers:["ID","Type","Value","Unit","Measured"],rows:t.mybListBodyMetrics.items.map(r=>[m(r.id,12),r.type,String(r.value),r.unit,y(r.measuredAt)])});}catch(t){a(t);}}),n.command("record").description("Record a body metric").requiredOption("--type <t>","WEIGHT|BODY_FAT|CHEST|WAIST|HIPS|THIGH|ARM|RESTING_HEART_RATE").requiredOption("--value <n>","Measured value",l).option("--member <id>","Member ID").option("--unit <u>","Unit").option("--measured-at <iso>","Measured at (ISO)").option("--notes <s>","Notes").option("--photo-file-id <id>","Progress photo file ID").option("-f, --format <format>","Output format").action(async e=>{try{let t={type:e.type.toUpperCase(),value:e.value};e.member&&(t.memberId=e.member),e.unit&&(t.unit=e.unit),e.measuredAt&&(t.measuredAt=e.measuredAt),e.notes&&(t.notes=e.notes),e.photoFileId&&(t.photoFileId=e.photoFileId);let r=await c(j,{input:t});d(`Metric recorded: ${r.mybRecordBodyMetric.type}`),s(e,r.mybRecordBodyMetric);}catch(t){a(t);}});}function ge(o){let n=o.command("nutrition").description("Mybodyshield nutrition plans");n.command("get").description("Get a nutrition plan by id").argument("<id>","Plan ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(Y,{id:e});if(!r.mybNutritionPlan)throw new p(`Nutrition plan ${e} not found`);s(t,r.mybNutritionPlan);}catch(r){a(r);}}),n.command("active").description("Get a member's active nutrition plan").option("--member <id>","Member ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(z,{memberId:e.member});if(!t.mybActiveNutritionPlan)throw new p("No active nutrition plan found");s(e,t.mybActiveNutritionPlan);}catch(t){a(t);}}),n.command("macros").description("Roll up a member's logged meals for a day against the active plan").option("--member <id>","Member ID").option("--date <iso>","Date (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(K,{memberId:e.member,date:e.date});s(e,t.mybDailyMacros);}catch(t){a(t);}}),n.command("create").description("Create a nutrition plan").requiredOption("--name <name>","Plan name").option("--member <id>","Member ID").option("--coach <id>","Coach ID").option("--goal-type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--calorie-target <n>","Calorie target",i).option("--protein-target <n>","Protein target (g)",i).option("--carbs-target <n>","Carbs target (g)",i).option("--fat-target <n>","Fat target (g)",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.member&&(t.memberId=e.member),e.coach&&(t.coachId=e.coach),e.goalType&&(t.goalType=e.goalType.toUpperCase()),e.calorieTarget!==void 0&&(t.calorieTarget=e.calorieTarget),e.proteinTarget!==void 0&&(t.proteinTarget=e.proteinTarget),e.carbsTarget!==void 0&&(t.carbsTarget=e.carbsTarget),e.fatTarget!==void 0&&(t.fatTarget=e.fatTarget),e.startDate&&(t.startDate=e.startDate),e.endDate&&(t.endDate=e.endDate),e.notes&&(t.notes=e.notes);let r=await c(J,{input:t});d(`Nutrition plan created: ${r.mybCreateNutritionPlan.name}`),s(e,r.mybCreateNutritionPlan);}catch(t){a(t);}}),n.command("update").description("Update a nutrition plan").argument("<id>","Plan ID").option("--name <name>","Plan name").option("--goal-type <t>","Goal type").option("--calorie-target <n>","Calorie target",i).option("--protein-target <n>","Protein target (g)",i).option("--carbs-target <n>","Carbs target (g)",i).option("--fat-target <n>","Fat target (g)",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.name&&(r.name=t.name),t.goalType&&(r.goalType=t.goalType.toUpperCase()),t.calorieTarget!==void 0&&(r.calorieTarget=t.calorieTarget),t.proteinTarget!==void 0&&(r.proteinTarget=t.proteinTarget),t.carbsTarget!==void 0&&(r.carbsTarget=t.carbsTarget),t.fatTarget!==void 0&&(r.fatTarget=t.fatTarget),t.startDate&&(r.startDate=t.startDate),t.endDate&&(r.endDate=t.endDate),t.notes!==void 0&&(r.notes=t.notes),!Object.keys(r).length)throw new p("No updates specified");let g=await c(Q,{id:e,input:r});d("Nutrition plan updated"),s(t,g.mybUpdateNutritionPlan);}catch(r){a(r);}}),n.command("activate").description("Activate a nutrition plan").argument("<id>","Plan ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(X,{id:e});d(`Nutrition plan activated: ${r.mybActivateNutritionPlan.name}`),s(t,r.mybActivateNutritionPlan);}catch(r){a(r);}});}function le(o){let n=o.command("meals").description("Mybodyshield meal logs");n.command("list").description("List logged meals").option("--meal-type <t>","BREAKFAST|LUNCH|DINNER|SNACK").option("--plan <id>","Filter by nutrition plan ID").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(Z,{mealType:e.mealType?e.mealType.toUpperCase():void 0,planId:e.plan,pagination:{limit:e.limit,offset:e.offset}});s(e,t.mybListMeals.items,{headers:["ID","Name","Meal","Calories","Protein"],rows:t.mybListMeals.items.map(r=>[m(r.id,12),r.name,r.mealType,String(r.calories??0),`${r.proteinG??0}g`])});}catch(t){a(t);}}),n.command("log").description("Log a meal").requiredOption("--name <name>","Meal name").option("--meal-type <t>","BREAKFAST|LUNCH|DINNER|SNACK").option("--plan <id>","Nutrition plan ID").option("--calories <n>","Calories",i).option("--protein-g <n>","Protein (g)",i).option("--carbs-g <n>","Carbs (g)",i).option("--fat-g <n>","Fat (g)",i).option("--servings <n>","Servings",l).option("--favorite","Mark as favorite").option("--logged-at <iso>","Logged at (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.mealType&&(t.mealType=e.mealType.toUpperCase()),e.plan&&(t.planId=e.plan),e.calories!==void 0&&(t.calories=e.calories),e.proteinG!==void 0&&(t.proteinG=e.proteinG),e.carbsG!==void 0&&(t.carbsG=e.carbsG),e.fatG!==void 0&&(t.fatG=e.fatG),e.servings!==void 0&&(t.servings=e.servings),e.favorite&&(t.isFavorite=!0),e.loggedAt&&(t.loggedAt=e.loggedAt);let r=await c(ee,{input:t});d(`Meal logged: ${r.mybLogMeal.name}`),s(e,r.mybLogMeal);}catch(t){a(t);}}),n.command("delete").description("Delete a logged meal").argument("<id>","Meal log ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(te,{id:e});d(r.mybDeleteMeal?"Meal deleted":"Meal not deleted"),s(t,{deleted:r.mybDeleteMeal});}catch(r){a(r);}});}function fe(o){let n=o.command("recovery").description("Mybodyshield recovery logs");n.command("list").description("List recovery logs").option("--member <id>","Filter by member ID").option("--metric <m>","READINESS|SLEEP|SORENESS|STRESS|MOOD").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(re,{memberId:e.member,metric:e.metric?e.metric.toUpperCase():void 0});s(e,t.mybListRecoveryLogs,{headers:["ID","Metric","Score","Sleep (h)","Logged"],rows:t.mybListRecoveryLogs.map(r=>[m(r.id,12),r.metric,String(r.score),r.sleepHours!=null?String(r.sleepHours):"-",y(r.loggedAt)])});}catch(t){a(t);}}),n.command("log").description("Log a recovery metric").option("--member <id>","Member ID").option("--metric <m>","READINESS|SLEEP|SORENESS|STRESS|MOOD").option("--score <n>","Score",i).option("--sleep-hours <n>","Sleep hours",l).option("--notes <s>","Notes").option("--logged-at <iso>","Logged at (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={};e.member&&(t.memberId=e.member),e.metric&&(t.metric=e.metric.toUpperCase()),e.score!==void 0&&(t.score=e.score),e.sleepHours!==void 0&&(t.sleepHours=e.sleepHours),e.notes&&(t.notes=e.notes),e.loggedAt&&(t.loggedAt=e.loggedAt);let r=await c(ne,{input:t});d(`Recovery logged: ${r.mybLogRecovery.metric}`),s(e,r.mybLogRecovery);}catch(t){a(t);}});}function ye(o){let n=o.command("coaching").description("Mybodyshield coaching relationships");n.command("list").description("List coaching relationships").option("--member <id>","Filter by member ID").option("--status <s>","PENDING|ACTIVE|PAUSED|ENDED").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(oe,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0});s(e,t.mybListCoaching,{headers:["ID","Coach","Member","Status","Specialty"],rows:t.mybListCoaching.map(r=>[m(r.id,12),m(r.coachId,12),m(r.memberId,12),r.status,r.specialty??"-"])});}catch(t){a(t);}}),n.command("create").description("Create a coaching relationship").requiredOption("--coach <id>","Coach ID").requiredOption("--member <id>","Member ID").option("--specialty <s>","Specialty").option("--share-workouts","Share workouts with the coach").option("--share-nutrition","Share nutrition with the coach").option("--share-metrics","Share body metrics with the coach").option("-f, --format <format>","Output format").action(async e=>{try{let t={coachId:e.coach,memberId:e.member};e.specialty&&(t.specialty=e.specialty),e.shareWorkouts&&(t.shareWorkouts=!0),e.shareNutrition&&(t.shareNutrition=!0),e.shareMetrics&&(t.shareMetrics=!0);let r=await c(ie,{input:t});d("Coaching relationship created"),s(e,r.mybCreateCoaching);}catch(t){a(t);}}),n.command("transition").description("Transition a coaching relationship status").argument("<id>","Coaching relationship ID").requiredOption("--status <s>","PENDING|ACTIVE|PAUSED|ENDED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(ae,{id:e,status:t.status.toUpperCase()});d(`Coaching transitioned to ${r.mybTransitionCoaching.status}`),s(t,r.mybTransitionCoaching);}catch(r){a(r);}});}function be(o){o.command("health").description("Mybodyshield service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=await w(se);d(e.mybHealth),s(n,{health:e.mybHealth});}catch(e){a(e);}});}var ve={id:"mybodyshield",version:"1.0.0",displayName:"Mybodyshield",dependsOn:["auth","workspaces"],register(o,n){E(n);let e=o.command("mybodyshield").description("Mybodyshield fitness coaching platform");ce(e),de(e),ue(e),pe(e),me(e),ge(e),le(e),fe(e),ye(e),be(e);}},Sr=ve;module.exports=Sr;
281
+ `;function i(o){let n=Number.parseInt(o,10);if(Number.isNaN(n))throw new p(`Expected an integer but got "${o}"`);return n}function l(o){let n=Number.parseFloat(o);if(Number.isNaN(n))throw new p(`Expected a number but got "${o}"`);return n}function k(o){return o.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function ce(o){let n=o.command("programs").description("Mybodyshield training programs");n.command("list").description("List training programs").option("--member <id>","Filter by member ID").option("--status <s>","DRAFT|ACTIVE|COMPLETED|ARCHIVED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(S,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.mybListPrograms.items,{headers:["ID","Name","Goal","Level","Phase","Status"],rows:t.mybListPrograms.items.map(r=>[m(r.id,12),r.name,r.goalType,r.level,r.phase,r.status])});}catch(t){s(t);}}),n.command("get").description("Get a training program by id").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(x,{id:e});if(!r.mybProgram)throw new p(`Program ${e} not found`);a(t,r.mybProgram);}catch(r){s(r);}}),n.command("workouts").description("List workouts for a program").argument("<programId>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(O,{programId:e});a(t,r.mybProgramWorkouts,{headers:["ID","Name","Type","Day","Week","Duration"],rows:r.mybProgramWorkouts.map(g=>[m(g.id,12),g.name,g.type,g.dayOfWeek!=null?String(g.dayOfWeek):"-",g.weekNumber!=null?String(g.weekNumber):"-",g.durationMin!=null?String(g.durationMin):"-"])});}catch(r){s(r);}}),n.command("create").description("Create a training program").requiredOption("--name <name>","Program name").option("--member <id>","Member ID").option("--coach <id>","Coach ID").option("--description <s>","Description").option("--goal-type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--level <l>","BEGINNER|INTERMEDIATE|ADVANCED|ELITE").option("--phase <p>","BUILD|PEAK|DELOAD|MAINTENANCE").option("--weeks <n>","Number of weeks",i).option("--days-per-week <n>","Days per week",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.member&&(t.memberId=e.member),e.coach&&(t.coachId=e.coach),e.description&&(t.description=e.description),e.goalType&&(t.goalType=e.goalType.toUpperCase()),e.level&&(t.level=e.level.toUpperCase()),e.phase&&(t.phase=e.phase.toUpperCase()),e.weeks!==void 0&&(t.weeks=e.weeks),e.daysPerWeek!==void 0&&(t.daysPerWeek=e.daysPerWeek),e.startDate&&(t.startDate=e.startDate),e.endDate&&(t.endDate=e.endDate),e.tags&&(t.tags=k(e.tags));let r=await c(D,{input:t});d(`Program created: ${r.mybCreateProgram.name}`),a(e,r.mybCreateProgram);}catch(t){s(t);}}),n.command("update").description("Update a training program").argument("<id>","Program ID").option("--name <name>","Program name").option("--description <s>","Description").option("--goal-type <t>","Goal type").option("--level <l>","Fitness level").option("--phase <p>","Program phase").option("--weeks <n>","Number of weeks",i).option("--days-per-week <n>","Days per week",i).option("--coach <id>","Coach ID").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.name&&(r.name=t.name),t.description!==void 0&&(r.description=t.description),t.goalType&&(r.goalType=t.goalType.toUpperCase()),t.level&&(r.level=t.level.toUpperCase()),t.phase&&(r.phase=t.phase.toUpperCase()),t.weeks!==void 0&&(r.weeks=t.weeks),t.daysPerWeek!==void 0&&(r.daysPerWeek=t.daysPerWeek),t.coach&&(r.coachId=t.coach),t.startDate&&(r.startDate=t.startDate),t.endDate&&(r.endDate=t.endDate),t.tags&&(r.tags=k(t.tags)),!Object.keys(r).length)throw new p("No updates specified");let g=await c(v,{id:e,input:r});d("Program updated"),a(t,g.mybUpdateProgram);}catch(r){s(r);}}),n.command("transition").description("Advance a program through its lifecycle").argument("<id>","Program ID").requiredOption("--status <s>","DRAFT|ACTIVE|COMPLETED|ARCHIVED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(R,{id:e,status:t.status.toUpperCase()});d(`Program transitioned to ${r.mybTransitionProgram.status}`),a(t,r.mybTransitionProgram);}catch(r){s(r);}}),n.command("archive").description("Archive a training program").argument("<id>","Program ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(P,{id:e});d(r.mybArchiveProgram?"Program archived":"Program not archived"),a(t,{archived:r.mybArchiveProgram});}catch(r){s(r);}});}function de(o){let n=o.command("workouts").description("Mybodyshield workouts & exercises");n.command("add").description("Add a workout to a program").requiredOption("--program <id>","Program ID").requiredOption("--name <name>","Workout name").option("--description <s>","Description").option("--type <t>","STRENGTH|CARDIO|HIIT|MOBILITY|RECOVERY|YOGA").option("--day-of-week <n>","Day of week (0-6)",i).option("--week-number <n>","Week number",i).option("--duration-min <n>","Duration (minutes)",i).option("--order-index <n>","Order index",i).option("-f, --format <format>","Output format").action(async e=>{try{let t={programId:e.program,name:e.name};e.description&&(t.description=e.description),e.type&&(t.type=e.type.toUpperCase()),e.dayOfWeek!==void 0&&(t.dayOfWeek=e.dayOfWeek),e.weekNumber!==void 0&&(t.weekNumber=e.weekNumber),e.durationMin!==void 0&&(t.durationMin=e.durationMin),e.orderIndex!==void 0&&(t.orderIndex=e.orderIndex);let r=await c(M,{input:t});d(`Workout added: ${r.mybAddWorkout.name}`),a(e,r.mybAddWorkout);}catch(t){s(t);}}),n.command("add-exercise").description("Add an exercise to a workout").requiredOption("--workout <id>","Workout ID").requiredOption("--name <name>","Exercise name").option("--muscle-group <g>","CHEST|BACK|LEGS|SHOULDERS|ARMS|CORE|FULL_BODY").option("--sets <n>","Sets",i).option("--reps <n>","Reps",i).option("--rest-seconds <n>","Rest (seconds)",i).option("--target-weight <n>","Target weight",l).option("--order-index <n>","Order index",i).option("--instructions <s>","Instructions").option("--demo-file-id <id>","Demo file ID").option("-f, --format <format>","Output format").action(async e=>{try{let t={workoutId:e.workout,name:e.name};e.muscleGroup&&(t.muscleGroup=e.muscleGroup.toUpperCase()),e.sets!==void 0&&(t.sets=e.sets),e.reps!==void 0&&(t.reps=e.reps),e.restSeconds!==void 0&&(t.restSeconds=e.restSeconds),e.targetWeight!==void 0&&(t.targetWeight=e.targetWeight),e.orderIndex!==void 0&&(t.orderIndex=e.orderIndex),e.instructions&&(t.instructions=e.instructions),e.demoFileId&&(t.demoFileId=e.demoFileId);let r=await c(N,{input:t});d(`Exercise added: ${r.mybAddExercise.name}`),a(e,r.mybAddExercise);}catch(t){s(t);}});}function ue(o){let n=o.command("sessions").description("Mybodyshield workout sessions");n.command("list").description("List workout sessions").option("--program <id>","Filter by program ID").option("--status <s>","SCHEDULED|IN_PROGRESS|COMPLETED|SKIPPED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(L,{programId:e.program,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.mybListSessions.items,{headers:["ID","Member","Status","Scheduled","Started"],rows:t.mybListSessions.items.map(r=>[m(r.id,12),m(r.memberId,12),r.status,y(r.scheduledFor),y(r.startedAt)])});}catch(t){s(t);}}),n.command("get").description("Get a workout session by id").argument("<id>","Session ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c($,{id:e});if(!r.mybSession)throw new p(`Session ${e} not found`);a(t,r.mybSession);}catch(r){s(r);}}),n.command("start").description("Start a workout session").option("--program <id>","Program ID").option("--workout <id>","Workout ID").option("--scheduled-for <iso>","Scheduled time (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async e=>{try{let t={};e.program&&(t.programId=e.program),e.workout&&(t.workoutId=e.workout),e.scheduledFor&&(t.scheduledFor=e.scheduledFor),e.notes&&(t.notes=e.notes);let r=await c(G,{input:t});d(`Session started: ${m(r.mybStartSession.id,12)}`),a(e,r.mybStartSession);}catch(t){s(t);}}),n.command("log-set").description("Log a set within a session").requiredOption("--session <id>","Session ID").requiredOption("--exercise-name <name>","Exercise name").option("--set-number <n>","Set number",i).option("--reps <n>","Reps",i).option("--weight <n>","Weight",l).option("--distance-m <n>","Distance (meters)",l).option("--duration-sec <n>","Duration (seconds)",i).option("--personal-record","Mark as a personal record").option("-f, --format <format>","Output format").action(async e=>{try{let t={sessionId:e.session,exerciseName:e.exerciseName};e.setNumber!==void 0&&(t.setNumber=e.setNumber),e.reps!==void 0&&(t.reps=e.reps),e.weight!==void 0&&(t.weight=e.weight),e.distanceM!==void 0&&(t.distanceM=e.distanceM),e.durationSec!==void 0&&(t.durationSec=e.durationSec),e.personalRecord&&(t.isPersonalRecord=!0);let r=await c(_,{input:t});d(`Set logged for ${r.mybLogSet.exerciseName}`),a(e,r.mybLogSet);}catch(t){s(t);}}),n.command("complete").description("Complete a workout session").argument("<id>","Session ID").option("--calories-burned <n>","Calories burned",i).option("--perceived-exertion <n>","Perceived exertion (1-10)",i).option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};t.caloriesBurned!==void 0&&(r.caloriesBurned=t.caloriesBurned),t.perceivedExertion!==void 0&&(r.perceivedExertion=t.perceivedExertion),t.notes&&(r.notes=t.notes);let g=await c(W,{id:e,input:r});d("Session completed"),a(t,g.mybCompleteSession);}catch(r){s(r);}});}function pe(o){let n=o.command("goals").description("Mybodyshield fitness goals");n.command("list").description("List fitness goals").option("--member <id>","Filter by member ID").option("--status <s>","ACTIVE|ACHIEVED|PAUSED|ABANDONED").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(U,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.mybListGoals.items,{headers:["ID","Title","Type","Status","Current","Target"],rows:t.mybListGoals.items.map(r=>[m(r.id,12),r.title,r.type,r.status,`${r.currentValue??0}${r.unit?` ${r.unit}`:""}`,`${r.targetValue??0}${r.unit?` ${r.unit}`:""}`])});}catch(t){s(t);}}),n.command("get").description("Get a goal by id").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(q,{id:e});if(!r.mybGoal)throw new p(`Goal ${e} not found`);a(t,r.mybGoal);}catch(r){s(r);}}),n.command("create").description("Create a fitness goal").requiredOption("--title <t>","Goal title").option("--member <id>","Member ID").option("--type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--description <s>","Description").option("--target-value <n>","Target value",l).option("--baseline-value <n>","Baseline value",l).option("--unit <u>","Unit").option("--target-date <iso>","Target date (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={title:e.title};e.member&&(t.memberId=e.member),e.type&&(t.type=e.type.toUpperCase()),e.description&&(t.description=e.description),e.targetValue!==void 0&&(t.targetValue=e.targetValue),e.baselineValue!==void 0&&(t.baselineValue=e.baselineValue),e.unit&&(t.unit=e.unit),e.targetDate&&(t.targetDate=e.targetDate);let r=await c(F,{input:t});d(`Goal created: ${r.mybCreateGoal.title}`),a(e,r.mybCreateGoal);}catch(t){s(t);}}),n.command("update").description("Update a fitness goal").argument("<id>","Goal ID").option("--title <t>","Goal title").option("--type <t>","Goal type").option("--description <s>","Description").option("--target-value <n>","Target value",l).option("--current-value <n>","Current value",l).option("--baseline-value <n>","Baseline value",l).option("--unit <u>","Unit").option("--target-date <iso>","Target date (ISO)").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.title&&(r.title=t.title),t.type&&(r.type=t.type.toUpperCase()),t.description!==void 0&&(r.description=t.description),t.targetValue!==void 0&&(r.targetValue=t.targetValue),t.currentValue!==void 0&&(r.currentValue=t.currentValue),t.baselineValue!==void 0&&(r.baselineValue=t.baselineValue),t.unit&&(r.unit=t.unit),t.targetDate&&(r.targetDate=t.targetDate),!Object.keys(r).length)throw new p("No updates specified");let g=await c(V,{id:e,input:r});d("Goal updated"),a(t,g.mybUpdateGoal);}catch(r){s(r);}}),n.command("achieve").description("Mark a goal as achieved").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(H,{id:e});d(`Goal achieved: ${r.mybAchieveGoal.title}`),a(t,r.mybAchieveGoal);}catch(r){s(r);}});}function me(o){let n=o.command("metrics").description("Mybodyshield body metrics");n.command("list").description("List body metrics").option("--member <id>","Filter by member ID").option("--type <t>","WEIGHT|BODY_FAT|CHEST|WAIST|HIPS|THIGH|ARM|RESTING_HEART_RATE").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(B,{memberId:e.member,type:e.type?e.type.toUpperCase():void 0,pagination:{limit:e.limit,offset:e.offset}});a(e,t.mybListBodyMetrics.items,{headers:["ID","Type","Value","Unit","Measured"],rows:t.mybListBodyMetrics.items.map(r=>[m(r.id,12),r.type,String(r.value),r.unit,y(r.measuredAt)])});}catch(t){s(t);}}),n.command("record").description("Record a body metric").requiredOption("--type <t>","WEIGHT|BODY_FAT|CHEST|WAIST|HIPS|THIGH|ARM|RESTING_HEART_RATE").requiredOption("--value <n>","Measured value",l).option("--member <id>","Member ID").option("--unit <u>","Unit").option("--measured-at <iso>","Measured at (ISO)").option("--notes <s>","Notes").option("--photo-file-id <id>","Progress photo file ID").option("-f, --format <format>","Output format").action(async e=>{try{let t={type:e.type.toUpperCase(),value:e.value};e.member&&(t.memberId=e.member),e.unit&&(t.unit=e.unit),e.measuredAt&&(t.measuredAt=e.measuredAt),e.notes&&(t.notes=e.notes),e.photoFileId&&(t.photoFileId=e.photoFileId);let r=await c(j,{input:t});d(`Metric recorded: ${r.mybRecordBodyMetric.type}`),a(e,r.mybRecordBodyMetric);}catch(t){s(t);}});}function ge(o){let n=o.command("nutrition").description("Mybodyshield nutrition plans");n.command("get").description("Get a nutrition plan by id").argument("<id>","Plan ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(Y,{id:e});if(!r.mybNutritionPlan)throw new p(`Nutrition plan ${e} not found`);a(t,r.mybNutritionPlan);}catch(r){s(r);}}),n.command("active").description("Get a member's active nutrition plan").option("--member <id>","Member ID").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(z,{memberId:e.member});if(!t.mybActiveNutritionPlan)throw new p("No active nutrition plan found");a(e,t.mybActiveNutritionPlan);}catch(t){s(t);}}),n.command("macros").description("Roll up a member's logged meals for a day against the active plan").option("--member <id>","Member ID").option("--date <iso>","Date (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(K,{memberId:e.member,date:e.date});a(e,t.mybDailyMacros);}catch(t){s(t);}}),n.command("create").description("Create a nutrition plan").requiredOption("--name <name>","Plan name").option("--member <id>","Member ID").option("--coach <id>","Coach ID").option("--goal-type <t>","WEIGHT_LOSS|MUSCLE_GAIN|STRENGTH|ENDURANCE|MOBILITY|GENERAL_FITNESS").option("--calorie-target <n>","Calorie target",i).option("--protein-target <n>","Protein target (g)",i).option("--carbs-target <n>","Carbs target (g)",i).option("--fat-target <n>","Fat target (g)",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.member&&(t.memberId=e.member),e.coach&&(t.coachId=e.coach),e.goalType&&(t.goalType=e.goalType.toUpperCase()),e.calorieTarget!==void 0&&(t.calorieTarget=e.calorieTarget),e.proteinTarget!==void 0&&(t.proteinTarget=e.proteinTarget),e.carbsTarget!==void 0&&(t.carbsTarget=e.carbsTarget),e.fatTarget!==void 0&&(t.fatTarget=e.fatTarget),e.startDate&&(t.startDate=e.startDate),e.endDate&&(t.endDate=e.endDate),e.notes&&(t.notes=e.notes);let r=await c(J,{input:t});d(`Nutrition plan created: ${r.mybCreateNutritionPlan.name}`),a(e,r.mybCreateNutritionPlan);}catch(t){s(t);}}),n.command("update").description("Update a nutrition plan").argument("<id>","Plan ID").option("--name <name>","Plan name").option("--goal-type <t>","Goal type").option("--calorie-target <n>","Calorie target",i).option("--protein-target <n>","Protein target (g)",i).option("--carbs-target <n>","Carbs target (g)",i).option("--fat-target <n>","Fat target (g)",i).option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r={};if(t.name&&(r.name=t.name),t.goalType&&(r.goalType=t.goalType.toUpperCase()),t.calorieTarget!==void 0&&(r.calorieTarget=t.calorieTarget),t.proteinTarget!==void 0&&(r.proteinTarget=t.proteinTarget),t.carbsTarget!==void 0&&(r.carbsTarget=t.carbsTarget),t.fatTarget!==void 0&&(r.fatTarget=t.fatTarget),t.startDate&&(r.startDate=t.startDate),t.endDate&&(r.endDate=t.endDate),t.notes!==void 0&&(r.notes=t.notes),!Object.keys(r).length)throw new p("No updates specified");let g=await c(Q,{id:e,input:r});d("Nutrition plan updated"),a(t,g.mybUpdateNutritionPlan);}catch(r){s(r);}}),n.command("activate").description("Activate a nutrition plan").argument("<id>","Plan ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(X,{id:e});d(`Nutrition plan activated: ${r.mybActivateNutritionPlan.name}`),a(t,r.mybActivateNutritionPlan);}catch(r){s(r);}});}function le(o){let n=o.command("meals").description("Mybodyshield meal logs");n.command("list").description("List logged meals").option("--meal-type <t>","BREAKFAST|LUNCH|DINNER|SNACK").option("--plan <id>","Filter by nutrition plan ID").option("--limit <n>","Page size",i,50).option("--offset <n>","Offset",i,0).option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(Z,{mealType:e.mealType?e.mealType.toUpperCase():void 0,planId:e.plan,pagination:{limit:e.limit,offset:e.offset}});a(e,t.mybListMeals.items,{headers:["ID","Name","Meal","Calories","Protein"],rows:t.mybListMeals.items.map(r=>[m(r.id,12),r.name,r.mealType,String(r.calories??0),`${r.proteinG??0}g`])});}catch(t){s(t);}}),n.command("log").description("Log a meal").requiredOption("--name <name>","Meal name").option("--meal-type <t>","BREAKFAST|LUNCH|DINNER|SNACK").option("--plan <id>","Nutrition plan ID").option("--calories <n>","Calories",i).option("--protein-g <n>","Protein (g)",i).option("--carbs-g <n>","Carbs (g)",i).option("--fat-g <n>","Fat (g)",i).option("--servings <n>","Servings",l).option("--favorite","Mark as favorite").option("--logged-at <iso>","Logged at (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={name:e.name};e.mealType&&(t.mealType=e.mealType.toUpperCase()),e.plan&&(t.planId=e.plan),e.calories!==void 0&&(t.calories=e.calories),e.proteinG!==void 0&&(t.proteinG=e.proteinG),e.carbsG!==void 0&&(t.carbsG=e.carbsG),e.fatG!==void 0&&(t.fatG=e.fatG),e.servings!==void 0&&(t.servings=e.servings),e.favorite&&(t.isFavorite=!0),e.loggedAt&&(t.loggedAt=e.loggedAt);let r=await c(ee,{input:t});d(`Meal logged: ${r.mybLogMeal.name}`),a(e,r.mybLogMeal);}catch(t){s(t);}}),n.command("delete").description("Delete a logged meal").argument("<id>","Meal log ID").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(te,{id:e});d(r.mybDeleteMeal?"Meal deleted":"Meal not deleted"),a(t,{deleted:r.mybDeleteMeal});}catch(r){s(r);}});}function fe(o){let n=o.command("recovery").description("Mybodyshield recovery logs");n.command("list").description("List recovery logs").option("--member <id>","Filter by member ID").option("--metric <m>","READINESS|SLEEP|SORENESS|STRESS|MOOD").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(re,{memberId:e.member,metric:e.metric?e.metric.toUpperCase():void 0});a(e,t.mybListRecoveryLogs,{headers:["ID","Metric","Score","Sleep (h)","Logged"],rows:t.mybListRecoveryLogs.map(r=>[m(r.id,12),r.metric,String(r.score),r.sleepHours!=null?String(r.sleepHours):"-",y(r.loggedAt)])});}catch(t){s(t);}}),n.command("log").description("Log a recovery metric").option("--member <id>","Member ID").option("--metric <m>","READINESS|SLEEP|SORENESS|STRESS|MOOD").option("--score <n>","Score",i).option("--sleep-hours <n>","Sleep hours",l).option("--notes <s>","Notes").option("--logged-at <iso>","Logged at (ISO)").option("-f, --format <format>","Output format").action(async e=>{try{let t={};e.member&&(t.memberId=e.member),e.metric&&(t.metric=e.metric.toUpperCase()),e.score!==void 0&&(t.score=e.score),e.sleepHours!==void 0&&(t.sleepHours=e.sleepHours),e.notes&&(t.notes=e.notes),e.loggedAt&&(t.loggedAt=e.loggedAt);let r=await c(ne,{input:t});d(`Recovery logged: ${r.mybLogRecovery.metric}`),a(e,r.mybLogRecovery);}catch(t){s(t);}});}function ye(o){let n=o.command("coaching").description("Mybodyshield coaching relationships");n.command("list").description("List coaching relationships").option("--member <id>","Filter by member ID").option("--status <s>","PENDING|ACTIVE|PAUSED|ENDED").option("-f, --format <format>","Output format").action(async e=>{try{let t=await c(oe,{memberId:e.member,status:e.status?e.status.toUpperCase():void 0});a(e,t.mybListCoaching,{headers:["ID","Coach","Member","Status","Specialty"],rows:t.mybListCoaching.map(r=>[m(r.id,12),m(r.coachId,12),m(r.memberId,12),r.status,r.specialty??"-"])});}catch(t){s(t);}}),n.command("create").description("Create a coaching relationship").requiredOption("--coach <id>","Coach ID").requiredOption("--member <id>","Member ID").option("--specialty <s>","Specialty").option("--share-workouts","Share workouts with the coach").option("--share-nutrition","Share nutrition with the coach").option("--share-metrics","Share body metrics with the coach").option("-f, --format <format>","Output format").action(async e=>{try{let t={coachId:e.coach,memberId:e.member};e.specialty&&(t.specialty=e.specialty),e.shareWorkouts&&(t.shareWorkouts=!0),e.shareNutrition&&(t.shareNutrition=!0),e.shareMetrics&&(t.shareMetrics=!0);let r=await c(ie,{input:t});d("Coaching relationship created"),a(e,r.mybCreateCoaching);}catch(t){s(t);}}),n.command("transition").description("Transition a coaching relationship status").argument("<id>","Coaching relationship ID").requiredOption("--status <s>","PENDING|ACTIVE|PAUSED|ENDED").option("-f, --format <format>","Output format").action(async(e,t)=>{try{let r=await c(se,{id:e,status:t.status.toUpperCase()});d(`Coaching transitioned to ${r.mybTransitionCoaching.status}`),a(t,r.mybTransitionCoaching);}catch(r){s(r);}});}function be(o){o.command("health").description("Mybodyshield service health check (public)").option("-f, --format <format>","Output format").action(async n=>{try{let e=await w(ae);d(e.mybHealth),a(n,{health:e.mybHealth});}catch(e){s(e);}});}var ve={id:"mybodyshield",version:"1.0.0",displayName:"Mybodyshield",dependsOn:["auth","workspaces"],register(o,n){E(n);let e=o.command("mybodyshield").description("Mybodyshield fitness coaching platform");ce(e),de(e),ue(e),pe(e),me(e),ge(e),le(e),fe(e),ye(e),be(e);}},Sr=ve;module.exports=Sr;
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p,g,i,o as o$2,d}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';var T=`
1
+ import {a,b,h as h$1,p,g,i,o as o$2,d}from'../../chunk-SQSFZFQZ.js';import {o as o$1}from'../../chunk-UAFYTYK6.js';var T=`
2
2
  query MybListPrograms(
3
3
  $memberId: ID
4
4
  $status: MybProgramStatus
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(n,i){super(n),this.name="CliUserError",this.exitCode=i?.exitCode??1,this.hint=i?.hint;}};var a=class extends Error{cause;constructor(n,i){super(n),this.name="CliInternalError",this.cause=i;}};var m=null;function b(e){m=e;}function c(){if(!m)throw new a("vibecontrols module helpers used before setHelpersContext was called");return m}async function d(e,n){return c().gql.global.request(e,n)}function f(e){let n=e instanceof Error?e.message:String(e);throw new u(n)}function h(e,n,i){c().output.formatAndOutput(e,n,i);}function C(e){c().output.printSuccess(e);}function T(e){return c().output.formatStatus(e)}function E(e){return c().output.formatDate(e)}function g(e,n){return c().output.truncate(e,n)}function w(){return c()}var v=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(n,i){super(n),this.name="CliUserError",this.exitCode=i?.exitCode??1,this.hint=i?.hint;}};var a=class extends Error{cause;constructor(n,i){super(n),this.name="CliInternalError",this.cause=i;}};var m=null;function b(e){m=e;}function c(){if(!m)throw new a("vibecontrols module helpers used before setHelpersContext was called");return m}async function d(e,n){return c().gql.global.request(e,n)}function f(e){let n=e instanceof Error?e.message:String(e);throw new u(n)}function h(e,n,i){c().output.formatAndOutput(e,n,i);}function w(e){c().output.printSuccess(e);}function T(e){return c().output.formatStatus(e)}function E(e){return c().output.formatDate(e)}function g(e,n){return c().output.truncate(e,n)}function C(){return c()}var v=`
2
2
  query ListNotifications($filter: NotificationFilterInput, $limit: Int, $offset: Int) {
3
3
  notifications(filter: $filter, limit: $limit, offset: $offset) {
4
4
  items { id title message channel status isRead createdAt }
@@ -23,4 +23,4 @@
23
23
  id channel enabled frequency
24
24
  }
25
25
  }
26
- `;function R(e){let n=e.command("notifications").description("Notification inbox & preferences");n.command("list").description("List the current user's notifications").option("--unread","Only unread").option("--channel <c>","Filter by channel").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let r={};t.unread&&(r.isRead=!1),t.channel&&(r.channel=t.channel.toUpperCase());let p=await d(v,{filter:Object.keys(r).length?r:void 0,limit:t.limit,offset:0});h(t,p.notifications.items,{headers:["ID","Title","Channel","Status","Read","When"],rows:p.notifications.items.map(s=>[g(s.id,12),g(s.title??"-",40),s.channel??"-",T(s.status),String(!!s.isRead),E(s.createdAt)])});}catch(r){f(r);}}),n.command("read").description("Mark a notification as read").argument("<id>").action(async t=>{try{await d(A,{id:t}),C("Notification marked read");}catch(r){f(r);}});let i=n.command("preferences").description("Notification preferences");i.command("get").description("Show current user's notification preferences").option("--user <id>","Override user id").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let r=w().auth.read(),p=t.user??r?.workspaceId??"",s=p?{userId:p}:{},k=await d(O,{filter:Object.keys(s).length?s:void 0,limit:t.limit});h(t,k.notificationPreferences.items,{headers:["ID","Channel","Enabled","Frequency","Scope"],rows:k.notificationPreferences.items.map(l=>[g(l.id,12),l.channel,String(l.enabled),l.frequency??"-",l.scope??"-"])});}catch(r){f(r);}}),i.command("set").description("Set a notification preference").requiredOption("--channel <c>","EMAIL|SMS|IN_APP|PUSH|WEBHOOK").requiredOption("--enabled <bool>","true or false").option("--frequency <f>","IMMEDIATE|HOURLY|DAILY|WEEKLY","IMMEDIATE").option("--scope <s>","GLOBAL|WORKSPACE|VIBE","GLOBAL").option("--topic <id>").option("--user <id>").action(async t=>{try{let r={channel:t.channel.toUpperCase(),enabled:t.enabled==="true",frequency:(t.frequency??"IMMEDIATE").toUpperCase(),scope:(t.scope??"GLOBAL").toUpperCase(),topicId:t.topic,userId:t.user??w().auth.read()?.workspaceId};await d(S,{input:r}),C("Preference saved");}catch(r){f(r);}});}var U={id:"notifications",version:"1.0.0",displayName:"Notifications",dependsOn:["auth"],register(e,n){b(n),R(e);}},Ze=U;module.exports=Ze;
26
+ `;function R(e){let n=e.command("notifications").description("Notification inbox & preferences");n.command("list").description("List the current user's notifications").option("--unread","Only unread").option("--channel <c>","Filter by channel").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let r={};t.unread&&(r.isRead=!1),t.channel&&(r.channel=t.channel.toUpperCase());let p=await d(v,{filter:Object.keys(r).length?r:void 0,limit:t.limit,offset:0});h(t,p.notifications.items,{headers:["ID","Title","Channel","Status","Read","When"],rows:p.notifications.items.map(s=>[g(s.id,12),g(s.title??"-",40),s.channel??"-",T(s.status),String(!!s.isRead),E(s.createdAt)])});}catch(r){f(r);}}),n.command("read").description("Mark a notification as read").argument("<id>").action(async t=>{try{await d(A,{id:t}),w("Notification marked read");}catch(r){f(r);}});let i=n.command("preferences").description("Notification preferences");i.command("get").description("Show current user's notification preferences").option("--user <id>","Override user id").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let r=C().auth.read(),p=t.user??r?.workspaceId??"",s=p?{userId:p}:{},k=await d(O,{filter:Object.keys(s).length?s:void 0,limit:t.limit});h(t,k.notificationPreferences.items,{headers:["ID","Channel","Enabled","Frequency","Scope"],rows:k.notificationPreferences.items.map(l=>[g(l.id,12),l.channel,String(l.enabled),l.frequency??"-",l.scope??"-"])});}catch(r){f(r);}}),i.command("set").description("Set a notification preference").requiredOption("--channel <c>","EMAIL|SMS|IN_APP|PUSH|WEBHOOK").requiredOption("--enabled <bool>","true or false").option("--frequency <f>","IMMEDIATE|HOURLY|DAILY|WEEKLY","IMMEDIATE").option("--scope <s>","GLOBAL|WORKSPACE|VIBE","GLOBAL").option("--topic <id>").option("--user <id>").action(async t=>{try{let r={channel:t.channel.toUpperCase(),enabled:t.enabled==="true",frequency:(t.frequency??"IMMEDIATE").toUpperCase(),scope:(t.scope??"GLOBAL").toUpperCase(),topicId:t.topic,userId:t.user??C().auth.read()?.workspaceId};await d(S,{input:r}),w("Preference saved");}catch(r){f(r);}});}var U={id:"notifications",version:"1.0.0",displayName:"Notifications",dependsOn:["auth"],register(e,n){b(n),R(e);}},Ze=U;module.exports=Ze;
@@ -1,4 +1,4 @@
1
- import {a,c,h as h$1,p,n,o,g,i,s}from'../../chunk-NLEVVDXR.js';import'../../chunk-IZXPWPKX.js';var h=`
1
+ import {a,c,h as h$1,p,n,o,g,i,s}from'../../chunk-SQSFZFQZ.js';import'../../chunk-UAFYTYK6.js';var h=`
2
2
  query ListNotifications($filter: NotificationFilterInput, $limit: Int, $offset: Int) {
3
3
  notifications(filter: $filter, limit: $limit, offset: $offset) {
4
4
  items { id title message channel status isRead createdAt }
@@ -1,4 +1,4 @@
1
- import {a,c,h,p,n,o,g,i}from'../../chunk-NLEVVDXR.js';import'../../chunk-IZXPWPKX.js';var f=`
1
+ import {a,c,h,p,n,o,g,i}from'../../chunk-SQSFZFQZ.js';import'../../chunk-UAFYTYK6.js';var f=`
2
2
  query MyOrganizations($limit: Int, $offset: Int) {
3
3
  myOrganizations(limit: $limit, offset: $offset) {
4
4
  items {
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,g as g$1,i,t,p}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var I="pageInfo { hasNextPage endCursor } totalCount",S=`
1
+ import {a,b as b$1,h as h$1,g as g$1,i,t,p}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.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=`
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var d=class extends Error{exitCode;hint;constructor(o,l){super(o),this.name="CliUserError",this.exitCode=l?.exitCode??1,this.hint=l?.hint;}};var g=class extends Error{cause;constructor(o,l){super(o),this.name="CliInternalError",this.cause=l;}};var C=null;function E(i){C=i;}function y(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}async function s(i,o){return y().gql.global.request(i,o)}function a(i){let o=i instanceof Error?i.message:String(i);throw new d(o)}function c(i,o,l){y().output.formatAndOutput(i,o,l);}function p(i){y().output.printSuccess(i);}function w(i){return y().output.formatStatus(i)}function f(i,o){return y().output.truncate(i,o)}var x=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var d=class extends Error{exitCode;hint;constructor(o,l){super(o),this.name="CliUserError",this.exitCode=l?.exitCode??1,this.hint=l?.hint;}};var g=class extends Error{cause;constructor(o,l){super(o),this.name="CliInternalError",this.cause=l;}};var C=null;function E(i){C=i;}function y(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}async function s(i,o){return y().gql.global.request(i,o)}function a(i){let o=i instanceof Error?i.message:String(i);throw new d(o)}function u(i,o,l){y().output.formatAndOutput(i,o,l);}function p(i){y().output.printSuccess(i);}function w(i){return y().output.formatStatus(i)}function f(i,o){return y().output.truncate(i,o)}var x=`
2
2
  query ListProducts($filter: PlatformProductFilterInput, $limit: Int, $offset: Int) {
3
3
  platformProducts(filter: $filter, limit: $limit, offset: $offset) {
4
4
  items { id name slug status logoUrl appUrl }
@@ -27,13 +27,13 @@
27
27
  mutation DeletePlatformProduct($id: ID!) {
28
28
  deletePlatformProduct(id: $id)
29
29
  }
30
- `,S=`
30
+ `,O=`
31
31
  query ListShortcuts($filter: KeyboardShortcutFilterInput, $limit: Int) {
32
32
  keyboardShortcuts(filter: $filter, limit: $limit) {
33
33
  items { id label shortcutKey category eventName isEnabled productId }
34
34
  }
35
35
  }
36
- `,O=`
36
+ `,S=`
37
37
  mutation CreateKeyboardShortcut($input: CreateKeyboardShortcutInput!) {
38
38
  createKeyboardShortcut(input: $input) {
39
39
  id label shortcutKey isEnabled
@@ -50,7 +50,7 @@
50
50
  deleteKeyboardShortcut(id: $id)
51
51
  }
52
52
  `,D=`
53
- query ListContentPages($productId: ID!, $filter: ContentPageFilterInput, $limit: Int) {
53
+ query ListContentPages($productId: String, $filter: ContentPageFilterInput, $limit: Int) {
54
54
  contentPages(productId: $productId, filter: $filter, limit: $limit) {
55
55
  items { id slug title visibility isPublished }
56
56
  }
@@ -99,4 +99,4 @@
99
99
  evaluations { key flagType value variant reason }
100
100
  }
101
101
  }
102
- `;function W(i){let o=i.command("products").description("Platform products, shortcuts, content-pages, feature-flags");o.command("list").description("List platform products").option("--search <q>").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.search&&(e.search=t.search),t.status&&(e.status=t.status.toUpperCase());let n=await s(x,{filter:Object.keys(e).length?e:void 0,limit:t.limit,offset:0});c(t,n.platformProducts.items,{headers:["ID","Name","Slug","Status"],rows:n.platformProducts.items.map(r=>[f(r.id,12),r.name,r.slug??"-",w(r.status)])});}catch(e){a(e);}}),o.command("get").description("Get a product").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(I,{id:t});if(!n.platformProduct)throw new d(`Product ${t} not found`);c(e,n.platformProduct);}catch(n){a(n);}}),o.command("create").description("Create a platform product").requiredOption("--name <s>").requiredOption("--slug <s>").option("--description <s>").option("--status <s>","DRAFT|ACTIVE|ARCHIVED","DRAFT").option("--app-url <url>").option("--logo-url <url>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,status:(t.status??"DRAFT").toUpperCase(),appUrl:t.appUrl,logoUrl:t.logoUrl},n=await s(v,{input:e});p(`Product created: ${n.createPlatformProduct.name}`),c(t,n.createPlatformProduct);}catch(e){a(e);}}),o.command("update").description("Update a product").argument("<id>").option("--name <s>").option("--description <s>").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new d("No updates specified");let r=await s(P,{id:t,input:n});p("Product updated"),c(e,r.updatePlatformProduct);}catch(n){a(n);}}),o.command("delete").description("Delete a product").argument("<id>").action(async t=>{try{await s(A,{id:t}),p("Product deleted");}catch(e){a(e);}});let l=o.command("shortcuts").description("Keyboard shortcuts");l.command("list").description("List shortcuts").option("--product <id>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.category&&(e.category=t.category);let n=await s(S,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.keyboardShortcuts.items,{headers:["ID","Label","Key","Category","Event","Enabled"],rows:n.keyboardShortcuts.items.map(r=>[f(r.id,12),r.label,r.shortcutKey,r.category??"-",r.eventName??"-",String(!!r.isEnabled)])});}catch(e){a(e);}}),l.command("create").description("Create a shortcut").requiredOption("--label <s>").requiredOption("--key <s>",'Shortcut key sequence (e.g. "g h")').requiredOption("--event <name>","Event emitted when shortcut fires").requiredOption("--product <id>","Owning product id").option("--category <c>","Navigation|Editing|...").option("--enabled").option("-f, --format <format>").action(async t=>{try{let e={label:t.label,shortcutKey:t.key,eventName:t.event,productId:t.product,category:t.category,isEnabled:t.enabled!==!1},n=await s(O,{input:e});p("Shortcut created"),c(t,n.createKeyboardShortcut);}catch(e){a(e);}}),l.command("update").description("Update a shortcut").argument("<id>").option("--label <s>").option("--key <s>").option("--enabled <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.label&&(n.label=e.label),e.key&&(n.shortcutKey=e.key),e.enabled!==void 0&&(n.isEnabled=e.enabled==="true"),!Object.keys(n).length)throw new d("No updates specified");let r=await s(R,{id:t,input:n});p("Shortcut updated"),c(e,r.updateKeyboardShortcut);}catch(n){a(n);}}),l.command("delete").description("Delete a shortcut").argument("<id>").action(async t=>{try{await s($,{id:t}),p("Shortcut deleted");}catch(e){a(e);}});let h=o.command("content-pages").description("Content pages (legal, marketing)");h.command("list").description("List content pages for a product").requiredOption("--product <id>").option("--published").option("--visibility <v>","PUBLIC|PRIVATE").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.published!==void 0&&(e.isPublished=t.published),t.visibility&&(e.visibility=t.visibility.toUpperCase());let n=await s(D,{productId:t.product,filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.contentPages.items,{headers:["ID","Slug","Title","Visibility","Published"],rows:n.contentPages.items.map(r=>[f(r.id,12),r.slug,f(r.title,40),r.visibility??"-",String(!!r.isPublished)])});}catch(e){a(e);}}),h.command("create").description("Create a content page").requiredOption("--product <id>").requiredOption("--slug <s>").requiredOption("--title <s>").requiredOption("--content <s>").option("--visibility <v>","PUBLIC|PRIVATE","PUBLIC").option("--published").option("-f, --format <format>").action(async t=>{try{let e={productId:t.product,slug:t.slug,title:t.title,content:t.content,visibility:(t.visibility??"PUBLIC").toUpperCase(),isPublished:!!t.published},n=await s(F,{input:e});p("Content page created"),c(t,n.createContentPage);}catch(e){a(e);}}),h.command("update").description("Update a content page").argument("<id>").option("--title <s>").option("--content <s>").option("--visibility <v>").option("--published <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.content!==void 0&&(n.content=e.content),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.published!==void 0&&(n.isPublished=e.published==="true"),!Object.keys(n).length)throw new d("No updates specified");let r=await s(L,{id:t,input:n});p("Content page updated"),c(e,r.updateContentPage);}catch(n){a(n);}}),h.command("delete").description("Delete a content page").argument("<id>").action(async t=>{try{await s(_,{id:t}),p("Content page deleted");}catch(e){a(e);}});let m=o.command("feature-flags").description("Feature flag administration (highest SRE/ops value)");m.command("list").description("List feature flags").option("--product <id>").option("--status <s>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.status&&(e.status=t.status.toUpperCase()),t.category&&(e.category=t.category);let n=await s(U,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.featureFlags.items,{headers:["ID","Key","Type","Status","Default"],rows:n.featureFlags.items.map(r=>[f(r.id,12),r.key,r.flagType??"-",w(r.status),String(r.defaultValue)])});}catch(e){a(e);}}),m.command("create").description("Create a feature flag").requiredOption("--key <s>","Stable key (e.g. enable-beta-ui)").requiredOption("--name <s>","Human label").requiredOption("--product <id>","Owning product id").option("--type <t>","BOOLEAN|STRING|NUMBER|JSON","BOOLEAN").option("--default <s>","Default value (parsed as JSON)").option("--description <s>").option("--category <c>").option("--previewable").option("--tags <s>","Comma-separated tags").option("-f, --format <format>").action(async t=>{try{let e={key:t.key,name:t.name,productId:t.product,flagType:(t.type??"BOOLEAN").toUpperCase(),defaultValue:t.default?JSON.parse(t.default):!1,description:t.description,category:t.category,previewable:!!t.previewable,tags:t.tags?t.tags.split(","):void 0},n=await s(q,{input:e});p(`Feature flag created: ${n.createFeatureFlag.key}`),c(t,n.createFeatureFlag);}catch(e){a(e);}}),m.command("update").description("Update a feature flag").argument("<id>").option("--name <s>").option("--default <s>","Default value (parsed as JSON)").option("--status <s>","ACTIVE|ARCHIVED").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.default!==void 0&&(n.defaultValue=JSON.parse(e.default)),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new d("No updates specified");let r=await s(N,{id:t,input:n});p("Feature flag updated"),c(e,r.updateFeatureFlag);}catch(n){a(n);}}),m.command("delete").description("Delete a feature flag").argument("<id>").action(async t=>{try{await s(G,{id:t}),p("Feature flag deleted");}catch(e){a(e);}}),m.command("evaluate").description("Evaluate flags in a workspace context").requiredOption("--workspace <id>").requiredOption("--keys <s>","Comma-separated flag keys").option("-f, --format <format>").action(async t=>{try{let e={workspaceId:t.workspace,keys:t.keys.split(",")},n=await s(j,{input:e});c(t,n.evaluateFeatureFlags.evaluations);}catch(e){a(e);}});}var et={id:"products",version:"1.0.0",displayName:"Platform Products",dependsOn:["auth"],register(i,o){E(o),W(i);}},de=et;module.exports=de;
102
+ `;function W(i){let o=i.command("products").description("Platform products, shortcuts, content-pages, feature-flags");o.command("list").description("List platform products").option("--search <q>").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.search&&(e.search=t.search),t.status&&(e.status=t.status.toUpperCase());let n=await s(x,{filter:Object.keys(e).length?e:void 0,limit:t.limit,offset:0});u(t,n.platformProducts.items,{headers:["ID","Name","Slug","Status"],rows:n.platformProducts.items.map(r=>[f(r.id,12),r.name,r.slug??"-",w(r.status)])});}catch(e){a(e);}}),o.command("get").description("Get a product").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(I,{id:t});if(!n.platformProduct)throw new d(`Product ${t} not found`);u(e,n.platformProduct);}catch(n){a(n);}}),o.command("create").description("Create a platform product").requiredOption("--name <s>").requiredOption("--slug <s>").option("--description <s>").option("--status <s>","DRAFT|ACTIVE|ARCHIVED","DRAFT").option("--app-url <url>").option("--logo-url <url>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,status:(t.status??"DRAFT").toUpperCase(),appUrl:t.appUrl,logoUrl:t.logoUrl},n=await s(v,{input:e});p(`Product created: ${n.createPlatformProduct.name}`),u(t,n.createPlatformProduct);}catch(e){a(e);}}),o.command("update").description("Update a product").argument("<id>").option("--name <s>").option("--description <s>").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new d("No updates specified");let r=await s(P,{id:t,input:n});p("Product updated"),u(e,r.updatePlatformProduct);}catch(n){a(n);}}),o.command("delete").description("Delete a product").argument("<id>").action(async t=>{try{await s(A,{id:t}),p("Product deleted");}catch(e){a(e);}});let l=o.command("shortcuts").description("Keyboard shortcuts");l.command("list").description("List shortcuts").option("--product <id>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.category&&(e.category=t.category);let n=await s(O,{filter:Object.keys(e).length?e:void 0,limit:t.limit});u(t,n.keyboardShortcuts.items,{headers:["ID","Label","Key","Category","Event","Enabled"],rows:n.keyboardShortcuts.items.map(r=>[f(r.id,12),r.label,r.shortcutKey,r.category??"-",r.eventName??"-",String(!!r.isEnabled)])});}catch(e){a(e);}}),l.command("create").description("Create a shortcut").requiredOption("--label <s>").requiredOption("--key <s>",'Shortcut key sequence (e.g. "g h")').requiredOption("--event <name>","Event emitted when shortcut fires").requiredOption("--product <id>","Owning product id").option("--category <c>","Navigation|Editing|...").option("--enabled").option("-f, --format <format>").action(async t=>{try{let e={label:t.label,shortcutKey:t.key,eventName:t.event,productId:t.product,category:t.category,isEnabled:t.enabled!==!1},n=await s(S,{input:e});p("Shortcut created"),u(t,n.createKeyboardShortcut);}catch(e){a(e);}}),l.command("update").description("Update a shortcut").argument("<id>").option("--label <s>").option("--key <s>").option("--enabled <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.label&&(n.label=e.label),e.key&&(n.shortcutKey=e.key),e.enabled!==void 0&&(n.isEnabled=e.enabled==="true"),!Object.keys(n).length)throw new d("No updates specified");let r=await s(R,{id:t,input:n});p("Shortcut updated"),u(e,r.updateKeyboardShortcut);}catch(n){a(n);}}),l.command("delete").description("Delete a shortcut").argument("<id>").action(async t=>{try{await s($,{id:t}),p("Shortcut deleted");}catch(e){a(e);}});let h=o.command("content-pages").description("Content pages (legal, marketing)");h.command("list").description("List content pages for a product").requiredOption("--product <id>").option("--published").option("--visibility <v>","PUBLIC|PRIVATE").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.published!==void 0&&(e.isPublished=t.published),t.visibility&&(e.visibility=t.visibility.toUpperCase());let n=await s(D,{productId:t.product,filter:Object.keys(e).length?e:void 0,limit:t.limit});u(t,n.contentPages.items,{headers:["ID","Slug","Title","Visibility","Published"],rows:n.contentPages.items.map(r=>[f(r.id,12),r.slug,f(r.title,40),r.visibility??"-",String(!!r.isPublished)])});}catch(e){a(e);}}),h.command("create").description("Create a content page").requiredOption("--product <id>").requiredOption("--slug <s>").requiredOption("--title <s>").requiredOption("--content <s>").option("--visibility <v>","PUBLIC|PRIVATE","PUBLIC").option("--published").option("-f, --format <format>").action(async t=>{try{let e={productId:t.product,slug:t.slug,title:t.title,content:t.content,visibility:(t.visibility??"PUBLIC").toUpperCase(),isPublished:!!t.published},n=await s(F,{input:e});p("Content page created"),u(t,n.createContentPage);}catch(e){a(e);}}),h.command("update").description("Update a content page").argument("<id>").option("--title <s>").option("--content <s>").option("--visibility <v>").option("--published <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.content!==void 0&&(n.content=e.content),e.visibility&&(n.visibility=e.visibility.toUpperCase()),e.published!==void 0&&(n.isPublished=e.published==="true"),!Object.keys(n).length)throw new d("No updates specified");let r=await s(L,{id:t,input:n});p("Content page updated"),u(e,r.updateContentPage);}catch(n){a(n);}}),h.command("delete").description("Delete a content page").argument("<id>").action(async t=>{try{await s(_,{id:t}),p("Content page deleted");}catch(e){a(e);}});let m=o.command("feature-flags").description("Feature flag administration (highest SRE/ops value)");m.command("list").description("List feature flags").option("--product <id>").option("--status <s>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.status&&(e.status=t.status.toUpperCase()),t.category&&(e.category=t.category);let n=await s(U,{filter:Object.keys(e).length?e:void 0,limit:t.limit});u(t,n.featureFlags.items,{headers:["ID","Key","Type","Status","Default"],rows:n.featureFlags.items.map(r=>[f(r.id,12),r.key,r.flagType??"-",w(r.status),String(r.defaultValue)])});}catch(e){a(e);}}),m.command("create").description("Create a feature flag").requiredOption("--key <s>","Stable key (e.g. enable-beta-ui)").requiredOption("--name <s>","Human label").requiredOption("--product <id>","Owning product id").option("--type <t>","BOOLEAN|STRING|NUMBER|JSON","BOOLEAN").option("--default <s>","Default value (parsed as JSON)").option("--description <s>").option("--category <c>").option("--previewable").option("--tags <s>","Comma-separated tags").option("-f, --format <format>").action(async t=>{try{let e={key:t.key,name:t.name,productId:t.product,flagType:(t.type??"BOOLEAN").toUpperCase(),defaultValue:t.default?JSON.parse(t.default):!1,description:t.description,category:t.category,previewable:!!t.previewable,tags:t.tags?t.tags.split(","):void 0},n=await s(q,{input:e});p(`Feature flag created: ${n.createFeatureFlag.key}`),u(t,n.createFeatureFlag);}catch(e){a(e);}}),m.command("update").description("Update a feature flag").argument("<id>").option("--name <s>").option("--default <s>","Default value (parsed as JSON)").option("--status <s>","ACTIVE|ARCHIVED").option("-f, --format <format>").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.default!==void 0&&(n.defaultValue=JSON.parse(e.default)),e.status&&(n.status=e.status.toUpperCase()),!Object.keys(n).length)throw new d("No updates specified");let r=await s(N,{id:t,input:n});p("Feature flag updated"),u(e,r.updateFeatureFlag);}catch(n){a(n);}}),m.command("delete").description("Delete a feature flag").argument("<id>").action(async t=>{try{await s(G,{id:t}),p("Feature flag deleted");}catch(e){a(e);}}),m.command("evaluate").description("Evaluate flags in a workspace context").requiredOption("--workspace <id>").requiredOption("--keys <s>","Comma-separated flag keys").option("-f, --format <format>").action(async t=>{try{let e={workspaceId:t.workspace,keys:t.keys.split(",")},n=await s(j,{input:e});u(t,n.evaluateFeatureFlags.evaluations);}catch(e){a(e);}});}var et={id:"products",version:"1.0.0",displayName:"Platform Products",dependsOn:["auth"],register(i,o){E(o),W(i);}},de=et;module.exports=de;
@@ -1,4 +1,4 @@
1
- import {a,c,h as h$1,p,n,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var b=`
1
+ import {a,c,h as h$1,p,n,g,i}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var b=`
2
2
  query ListProducts($filter: PlatformProductFilterInput, $limit: Int, $offset: Int) {
3
3
  platformProducts(filter: $filter, limit: $limit, offset: $offset) {
4
4
  items { id name slug status logoUrl appUrl }
@@ -50,7 +50,7 @@ import {a,c,h as h$1,p,n,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../
50
50
  deleteKeyboardShortcut(id: $id)
51
51
  }
52
52
  `,S=`
53
- query ListContentPages($productId: ID!, $filter: ContentPageFilterInput, $limit: Int) {
53
+ query ListContentPages($productId: String, $filter: ContentPageFilterInput, $limit: Int) {
54
54
  contentPages(productId: $productId, filter: $filter, limit: $limit) {
55
55
  items { id slug title visibility isPublished }
56
56
  }
@@ -77,13 +77,13 @@ import {a,c,h as h$1,p,n,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../
77
77
  items { id key name flagType status defaultValue category productId }
78
78
  }
79
79
  }
80
- `,D=`
80
+ `,v=`
81
81
  mutation CreateFeatureFlag($input: CreateFeatureFlagInput!) {
82
82
  createFeatureFlag(input: $input) {
83
83
  id key name flagType status
84
84
  }
85
85
  }
86
- `,v=`
86
+ `,D=`
87
87
  mutation UpdateFeatureFlag($id: ID!, $input: UpdateFeatureFlagInput!) {
88
88
  updateFeatureFlag(id: $id, input: $input) {
89
89
  id key status defaultValue
@@ -99,4 +99,4 @@ import {a,c,h as h$1,p,n,g,i}from'../../chunk-NLEVVDXR.js';import {o}from'../../
99
99
  evaluations { key flagType value variant reason }
100
100
  }
101
101
  }
102
- `;function N(m){let d=m.command("products").description("Platform products, shortcuts, content-pages, feature-flags");d.command("list").description("List platform products").option("--search <q>").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.search&&(e.search=t.search),t.status&&(e.status=t.status.toUpperCase());let i=await c(b,{filter:Object.keys(e).length?e:void 0,limit:t.limit,offset:0});h$1(t,i.platformProducts.items,{headers:["ID","Name","Slug","Status"],rows:i.platformProducts.items.map(a=>[p(a.id,12),a.name,a.slug??"-",n(a.status)])});}catch(e){g(e);}}),d.command("get").description("Get a product").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let i=await c(h,{id:t});if(!i.platformProduct)throw new o(`Product ${t} not found`);h$1(e,i.platformProduct);}catch(i){g(i);}}),d.command("create").description("Create a platform product").requiredOption("--name <s>").requiredOption("--slug <s>").option("--description <s>").option("--status <s>","DRAFT|ACTIVE|ARCHIVED","DRAFT").option("--app-url <url>").option("--logo-url <url>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,status:(t.status??"DRAFT").toUpperCase(),appUrl:t.appUrl,logoUrl:t.logoUrl},i$1=await c(T,{input:e});i(`Product created: ${i$1.createPlatformProduct.name}`),h$1(t,i$1.createPlatformProduct);}catch(e){g(e);}}),d.command("update").description("Update a product").argument("<id>").option("--name <s>").option("--description <s>").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.name&&(i$1.name=e.name),e.description!==void 0&&(i$1.description=e.description),e.status&&(i$1.status=e.status.toUpperCase()),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(C,{id:t,input:i$1});i("Product updated"),h$1(e,a.updatePlatformProduct);}catch(i){g(i);}}),d.command("delete").description("Delete a product").argument("<id>").action(async t=>{try{await c(F,{id:t}),i("Product deleted");}catch(e){g(e);}});let l=d.command("shortcuts").description("Keyboard shortcuts");l.command("list").description("List shortcuts").option("--product <id>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.category&&(e.category=t.category);let i=await c(U,{filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.keyboardShortcuts.items,{headers:["ID","Label","Key","Category","Event","Enabled"],rows:i.keyboardShortcuts.items.map(a=>[p(a.id,12),a.label,a.shortcutKey,a.category??"-",a.eventName??"-",String(!!a.isEnabled)])});}catch(e){g(e);}}),l.command("create").description("Create a shortcut").requiredOption("--label <s>").requiredOption("--key <s>",'Shortcut key sequence (e.g. "g h")').requiredOption("--event <name>","Event emitted when shortcut fires").requiredOption("--product <id>","Owning product id").option("--category <c>","Navigation|Editing|...").option("--enabled").option("-f, --format <format>").action(async t=>{try{let e={label:t.label,shortcutKey:t.key,eventName:t.event,productId:t.product,category:t.category,isEnabled:t.enabled!==!1},i$1=await c(w,{input:e});i("Shortcut created"),h$1(t,i$1.createKeyboardShortcut);}catch(e){g(e);}}),l.command("update").description("Update a shortcut").argument("<id>").option("--label <s>").option("--key <s>").option("--enabled <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.label&&(i$1.label=e.label),e.key&&(i$1.shortcutKey=e.key),e.enabled!==void 0&&(i$1.isEnabled=e.enabled==="true"),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(R,{id:t,input:i$1});i("Shortcut updated"),h$1(e,a.updateKeyboardShortcut);}catch(i){g(i);}}),l.command("delete").description("Delete a shortcut").argument("<id>").action(async t=>{try{await c(I,{id:t}),i("Shortcut deleted");}catch(e){g(e);}});let g$1=d.command("content-pages").description("Content pages (legal, marketing)");g$1.command("list").description("List content pages for a product").requiredOption("--product <id>").option("--published").option("--visibility <v>","PUBLIC|PRIVATE").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.published!==void 0&&(e.isPublished=t.published),t.visibility&&(e.visibility=t.visibility.toUpperCase());let i=await c(S,{productId:t.product,filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.contentPages.items,{headers:["ID","Slug","Title","Visibility","Published"],rows:i.contentPages.items.map(a=>[p(a.id,12),a.slug,p(a.title,40),a.visibility??"-",String(!!a.isPublished)])});}catch(e){g(e);}}),g$1.command("create").description("Create a content page").requiredOption("--product <id>").requiredOption("--slug <s>").requiredOption("--title <s>").requiredOption("--content <s>").option("--visibility <v>","PUBLIC|PRIVATE","PUBLIC").option("--published").option("-f, --format <format>").action(async t=>{try{let e={productId:t.product,slug:t.slug,title:t.title,content:t.content,visibility:(t.visibility??"PUBLIC").toUpperCase(),isPublished:!!t.published},i$1=await c(O,{input:e});i("Content page created"),h$1(t,i$1.createContentPage);}catch(e){g(e);}}),g$1.command("update").description("Update a content page").argument("<id>").option("--title <s>").option("--content <s>").option("--visibility <v>").option("--published <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.title&&(i$1.title=e.title),e.content!==void 0&&(i$1.content=e.content),e.visibility&&(i$1.visibility=e.visibility.toUpperCase()),e.published!==void 0&&(i$1.isPublished=e.published==="true"),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(A,{id:t,input:i$1});i("Content page updated"),h$1(e,a.updateContentPage);}catch(i){g(i);}}),g$1.command("delete").description("Delete a content page").argument("<id>").action(async t=>{try{await c(k,{id:t}),i("Content page deleted");}catch(e){g(e);}});let p$1=d.command("feature-flags").description("Feature flag administration (highest SRE/ops value)");p$1.command("list").description("List feature flags").option("--product <id>").option("--status <s>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.status&&(e.status=t.status.toUpperCase()),t.category&&(e.category=t.category);let i=await c($,{filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.featureFlags.items,{headers:["ID","Key","Type","Status","Default"],rows:i.featureFlags.items.map(a=>[p(a.id,12),a.key,a.flagType??"-",n(a.status),String(a.defaultValue)])});}catch(e){g(e);}}),p$1.command("create").description("Create a feature flag").requiredOption("--key <s>","Stable key (e.g. enable-beta-ui)").requiredOption("--name <s>","Human label").requiredOption("--product <id>","Owning product id").option("--type <t>","BOOLEAN|STRING|NUMBER|JSON","BOOLEAN").option("--default <s>","Default value (parsed as JSON)").option("--description <s>").option("--category <c>").option("--previewable").option("--tags <s>","Comma-separated tags").option("-f, --format <format>").action(async t=>{try{let e={key:t.key,name:t.name,productId:t.product,flagType:(t.type??"BOOLEAN").toUpperCase(),defaultValue:t.default?JSON.parse(t.default):!1,description:t.description,category:t.category,previewable:!!t.previewable,tags:t.tags?t.tags.split(","):void 0},i$1=await c(D,{input:e});i(`Feature flag created: ${i$1.createFeatureFlag.key}`),h$1(t,i$1.createFeatureFlag);}catch(e){g(e);}}),p$1.command("update").description("Update a feature flag").argument("<id>").option("--name <s>").option("--default <s>","Default value (parsed as JSON)").option("--status <s>","ACTIVE|ARCHIVED").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.name&&(i$1.name=e.name),e.default!==void 0&&(i$1.defaultValue=JSON.parse(e.default)),e.status&&(i$1.status=e.status.toUpperCase()),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(v,{id:t,input:i$1});i("Feature flag updated"),h$1(e,a.updateFeatureFlag);}catch(i){g(i);}}),p$1.command("delete").description("Delete a feature flag").argument("<id>").action(async t=>{try{await c(_,{id:t}),i("Feature flag deleted");}catch(e){g(e);}}),p$1.command("evaluate").description("Evaluate flags in a workspace context").requiredOption("--workspace <id>").requiredOption("--keys <s>","Comma-separated flag keys").option("-f, --format <format>").action(async t=>{try{let e={workspaceId:t.workspace,keys:t.keys.split(",")},i=await c(L,{input:e});h$1(t,i.evaluateFeatureFlags.evaluations);}catch(e){g(e);}});}var q={id:"products",version:"1.0.0",displayName:"Platform Products",dependsOn:["auth"],register(m,d){a(d),N(m);}},J=q;export{J as default};
102
+ `;function N(m){let d=m.command("products").description("Platform products, shortcuts, content-pages, feature-flags");d.command("list").description("List platform products").option("--search <q>").option("--status <s>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.search&&(e.search=t.search),t.status&&(e.status=t.status.toUpperCase());let i=await c(b,{filter:Object.keys(e).length?e:void 0,limit:t.limit,offset:0});h$1(t,i.platformProducts.items,{headers:["ID","Name","Slug","Status"],rows:i.platformProducts.items.map(a=>[p(a.id,12),a.name,a.slug??"-",n(a.status)])});}catch(e){g(e);}}),d.command("get").description("Get a product").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let i=await c(h,{id:t});if(!i.platformProduct)throw new o(`Product ${t} not found`);h$1(e,i.platformProduct);}catch(i){g(i);}}),d.command("create").description("Create a platform product").requiredOption("--name <s>").requiredOption("--slug <s>").option("--description <s>").option("--status <s>","DRAFT|ACTIVE|ARCHIVED","DRAFT").option("--app-url <url>").option("--logo-url <url>").option("-f, --format <format>").action(async t=>{try{let e={name:t.name,slug:t.slug,description:t.description,status:(t.status??"DRAFT").toUpperCase(),appUrl:t.appUrl,logoUrl:t.logoUrl},i$1=await c(T,{input:e});i(`Product created: ${i$1.createPlatformProduct.name}`),h$1(t,i$1.createPlatformProduct);}catch(e){g(e);}}),d.command("update").description("Update a product").argument("<id>").option("--name <s>").option("--description <s>").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.name&&(i$1.name=e.name),e.description!==void 0&&(i$1.description=e.description),e.status&&(i$1.status=e.status.toUpperCase()),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(C,{id:t,input:i$1});i("Product updated"),h$1(e,a.updatePlatformProduct);}catch(i){g(i);}}),d.command("delete").description("Delete a product").argument("<id>").action(async t=>{try{await c(F,{id:t}),i("Product deleted");}catch(e){g(e);}});let l=d.command("shortcuts").description("Keyboard shortcuts");l.command("list").description("List shortcuts").option("--product <id>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.category&&(e.category=t.category);let i=await c(U,{filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.keyboardShortcuts.items,{headers:["ID","Label","Key","Category","Event","Enabled"],rows:i.keyboardShortcuts.items.map(a=>[p(a.id,12),a.label,a.shortcutKey,a.category??"-",a.eventName??"-",String(!!a.isEnabled)])});}catch(e){g(e);}}),l.command("create").description("Create a shortcut").requiredOption("--label <s>").requiredOption("--key <s>",'Shortcut key sequence (e.g. "g h")').requiredOption("--event <name>","Event emitted when shortcut fires").requiredOption("--product <id>","Owning product id").option("--category <c>","Navigation|Editing|...").option("--enabled").option("-f, --format <format>").action(async t=>{try{let e={label:t.label,shortcutKey:t.key,eventName:t.event,productId:t.product,category:t.category,isEnabled:t.enabled!==!1},i$1=await c(w,{input:e});i("Shortcut created"),h$1(t,i$1.createKeyboardShortcut);}catch(e){g(e);}}),l.command("update").description("Update a shortcut").argument("<id>").option("--label <s>").option("--key <s>").option("--enabled <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.label&&(i$1.label=e.label),e.key&&(i$1.shortcutKey=e.key),e.enabled!==void 0&&(i$1.isEnabled=e.enabled==="true"),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(R,{id:t,input:i$1});i("Shortcut updated"),h$1(e,a.updateKeyboardShortcut);}catch(i){g(i);}}),l.command("delete").description("Delete a shortcut").argument("<id>").action(async t=>{try{await c(I,{id:t}),i("Shortcut deleted");}catch(e){g(e);}});let g$1=d.command("content-pages").description("Content pages (legal, marketing)");g$1.command("list").description("List content pages for a product").requiredOption("--product <id>").option("--published").option("--visibility <v>","PUBLIC|PRIVATE").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.published!==void 0&&(e.isPublished=t.published),t.visibility&&(e.visibility=t.visibility.toUpperCase());let i=await c(S,{productId:t.product,filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.contentPages.items,{headers:["ID","Slug","Title","Visibility","Published"],rows:i.contentPages.items.map(a=>[p(a.id,12),a.slug,p(a.title,40),a.visibility??"-",String(!!a.isPublished)])});}catch(e){g(e);}}),g$1.command("create").description("Create a content page").requiredOption("--product <id>").requiredOption("--slug <s>").requiredOption("--title <s>").requiredOption("--content <s>").option("--visibility <v>","PUBLIC|PRIVATE","PUBLIC").option("--published").option("-f, --format <format>").action(async t=>{try{let e={productId:t.product,slug:t.slug,title:t.title,content:t.content,visibility:(t.visibility??"PUBLIC").toUpperCase(),isPublished:!!t.published},i$1=await c(O,{input:e});i("Content page created"),h$1(t,i$1.createContentPage);}catch(e){g(e);}}),g$1.command("update").description("Update a content page").argument("<id>").option("--title <s>").option("--content <s>").option("--visibility <v>").option("--published <bool>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.title&&(i$1.title=e.title),e.content!==void 0&&(i$1.content=e.content),e.visibility&&(i$1.visibility=e.visibility.toUpperCase()),e.published!==void 0&&(i$1.isPublished=e.published==="true"),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(A,{id:t,input:i$1});i("Content page updated"),h$1(e,a.updateContentPage);}catch(i){g(i);}}),g$1.command("delete").description("Delete a content page").argument("<id>").action(async t=>{try{await c(k,{id:t}),i("Content page deleted");}catch(e){g(e);}});let p$1=d.command("feature-flags").description("Feature flag administration (highest SRE/ops value)");p$1.command("list").description("List feature flags").option("--product <id>").option("--status <s>").option("--category <c>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product),t.status&&(e.status=t.status.toUpperCase()),t.category&&(e.category=t.category);let i=await c($,{filter:Object.keys(e).length?e:void 0,limit:t.limit});h$1(t,i.featureFlags.items,{headers:["ID","Key","Type","Status","Default"],rows:i.featureFlags.items.map(a=>[p(a.id,12),a.key,a.flagType??"-",n(a.status),String(a.defaultValue)])});}catch(e){g(e);}}),p$1.command("create").description("Create a feature flag").requiredOption("--key <s>","Stable key (e.g. enable-beta-ui)").requiredOption("--name <s>","Human label").requiredOption("--product <id>","Owning product id").option("--type <t>","BOOLEAN|STRING|NUMBER|JSON","BOOLEAN").option("--default <s>","Default value (parsed as JSON)").option("--description <s>").option("--category <c>").option("--previewable").option("--tags <s>","Comma-separated tags").option("-f, --format <format>").action(async t=>{try{let e={key:t.key,name:t.name,productId:t.product,flagType:(t.type??"BOOLEAN").toUpperCase(),defaultValue:t.default?JSON.parse(t.default):!1,description:t.description,category:t.category,previewable:!!t.previewable,tags:t.tags?t.tags.split(","):void 0},i$1=await c(v,{input:e});i(`Feature flag created: ${i$1.createFeatureFlag.key}`),h$1(t,i$1.createFeatureFlag);}catch(e){g(e);}}),p$1.command("update").description("Update a feature flag").argument("<id>").option("--name <s>").option("--default <s>","Default value (parsed as JSON)").option("--status <s>","ACTIVE|ARCHIVED").option("-f, --format <format>").action(async(t,e)=>{try{let i$1={};if(e.name&&(i$1.name=e.name),e.default!==void 0&&(i$1.defaultValue=JSON.parse(e.default)),e.status&&(i$1.status=e.status.toUpperCase()),!Object.keys(i$1).length)throw new o("No updates specified");let a=await c(D,{id:t,input:i$1});i("Feature flag updated"),h$1(e,a.updateFeatureFlag);}catch(i){g(i);}}),p$1.command("delete").description("Delete a feature flag").argument("<id>").action(async t=>{try{await c(_,{id:t}),i("Feature flag deleted");}catch(e){g(e);}}),p$1.command("evaluate").description("Evaluate flags in a workspace context").requiredOption("--workspace <id>").requiredOption("--keys <s>","Comma-separated flag keys").option("-f, --format <format>").action(async t=>{try{let e={workspaceId:t.workspace,keys:t.keys.split(",")},i=await c(L,{input:e});h$1(t,i.evaluateFeatureFlags.evaluations);}catch(e){g(e);}});}var q={id:"products",version:"1.0.0",displayName:"Platform Products",dependsOn:["auth"],register(m,d){a(d),N(m);}},J=q;export{J as default};
@@ -1,4 +1,4 @@
1
- import {a,b as b$1,h as h$1,p,g,i,o as o$1,d}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var P=`
1
+ import {a,b as b$1,h as h$1,p,g,i,o as o$1,d}from'../../chunk-SQSFZFQZ.js';import {o}from'../../chunk-UAFYTYK6.js';var P=`
2
2
  query PswClient($id: ID!) {
3
3
  pswClient(id: $id) {
4
4
  id name type status industry contactName contactEmail contactPhone
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var p=class extends Error{exitCode;hint;constructor(n,a){super(n),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},w=class extends p{constructor(n,a){super(n,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},f=class extends Error{cause;constructor(n,a){super(n),this.name="CliInternalError",this.cause=a;}};var x=null;function E(r){x=r;}function d(){if(!x)throw new f("vibecontrols module helpers used before setHelpersContext was called");return x}function X(){let r=d();if(!r.auth.isAuthenticated())throw new w("Authentication required.",{hint:`Run \`${r.productName} auth login\` to authenticate.`})}async function v(r,n){return X(),d().gql.workspace.request(r,n)}async function R(r,n){return d().gql.global.request(r,n)}function l(r){let n=r instanceof Error?r.message:String(r);throw new p(n)}function m(r,n,a){d().output.formatAndOutput(r,n,a);}function k(r){d().output.printSuccess(r);}function A(r){return d().output.formatStatus(r)}function h(r,n){return d().output.truncate(r,n)}function O(){return d()}var S=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},w=class extends u{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},g=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var C=null;function T(n){C=n;}function p(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}function Y(){let n=p();if(!n.auth.isAuthenticated())throw new w("Authentication required.",{hint:`Run \`${n.productName} auth login\` to authenticate.`})}async function E(n,r){return Y(),p().gql.workspace.request(n,r)}async function v(n,r){return p().gql.global.request(n,r)}function l(n){let r=n instanceof Error?n.message:String(n);throw new u(r)}function f(n,r,a){p().output.formatAndOutput(n,r,a);}function k(n){p().output.printSuccess(n);}function R(n){return p().output.formatStatus(n)}function h(n,r){return p().output.truncate(n,r)}function A(){return p()}var S=`
2
2
  query ListRoles($filter: RoleFilterInput, $pagination: PaginationInput, $scopeId: String!) {
3
3
  roles(filter: $filter, pagination: $pagination, scopeId: $scopeId) {
4
4
  id
@@ -13,7 +13,7 @@
13
13
  }
14
14
  }
15
15
  }
16
- `,P=`
16
+ `,O=`
17
17
  query GetRole($id: ID!) {
18
18
  role(id: $id) {
19
19
  id
@@ -28,7 +28,7 @@
28
28
  }
29
29
  }
30
30
  }
31
- `,L=`
31
+ `,P=`
32
32
  mutation CreateRole($input: CreateRoleInput!) {
33
33
  createRole(input: $input) {
34
34
  id
@@ -37,7 +37,7 @@
37
37
  scopeId
38
38
  }
39
39
  }
40
- `,$=`
40
+ `,L=`
41
41
  mutation UpdateRole($id: ID!, $input: UpdateRoleInput!) {
42
42
  updateRole(id: $id, input: $input) {
43
43
  id
@@ -46,11 +46,11 @@
46
46
  priority
47
47
  }
48
48
  }
49
- `,D=`
49
+ `,$=`
50
50
  mutation DeleteRole($id: ID!, $reassignToRoleId: ID) {
51
51
  deleteRole(id: $id, reassignToRoleId: $reassignToRoleId)
52
52
  }
53
- `,q=`
53
+ `,D=`
54
54
  query PolicyReferences($filter: PolicyReferenceFilterInput, $pagination: PaginationInput) {
55
55
  policyReferences(filter: $filter, pagination: $pagination) {
56
56
  id
@@ -63,18 +63,7 @@
63
63
  priority
64
64
  }
65
65
  }
66
- `,_=`
67
- mutation AttachPolicyToRole($roleId: ID!, $policyId: ID!) {
68
- attachPolicyToRole(roleId: $roleId, policyId: $policyId) {
69
- id
70
- name
71
- }
72
- }
73
- `,N=`
74
- mutation DetachPolicyFromRole($roleId: ID!, $policyId: ID!) {
75
- detachPolicyFromRole(roleId: $roleId, policyId: $policyId)
76
- }
77
- `,F=`
66
+ `,q=`
78
67
  query CheckPermission($input: PermissionCheckInput!) {
79
68
  checkPermission(input: $input) {
80
69
  allowed
@@ -84,4 +73,4 @@
84
73
  overrideType
85
74
  }
86
75
  }
87
- `;function u(r,n,a){return r==="workspace"?v(n,a):R(n,a)}function I(r){let n=O().auth.read();if(r==="workspace"){if(!n?.workspaceId)throw new p("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return n.workspaceId}if(!n?.organizationId)throw new p("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return n.organizationId}function G(r){let n=r.command("rbac").description("Role-based access control"),a=n.command("roles").description("Manage roles");a.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>","Output format").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??I(t),o={};e.includeSystem&&(o.includeSystem=!0);let s=await u(t,S,{filter:Object.keys(o).length?o:void 0,pagination:{limit:e.limit,offset:0},scopeId:i});m(e,s.roles,{headers:["ID","Name","Scope","Priority","System"],rows:s.roles.map(g=>[h(g.id,12),g.name,h(g.scopeId,12),String(g.priority),String(g.isSystem)])});}catch(t){l(t);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o=await u(i,P,{id:e});if(!o.role)throw new p(`Role ${e} not found`);m(t,o.role);}catch(i){l(i);}}),a.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",e=>parseInt(e,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??I(t),o={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:i};t==="global"&&e.scopeType&&(o.scopeType=e.scopeType);let s=await u(t,L,{input:o});k(`Role created: ${s.createRole.name}`),m(e,s.createRole);}catch(t){l(t);}}),a.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",e=>parseInt(e,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o={};if(t.name&&(o.name=t.name),t.description!==void 0&&(o.description=t.description),t.priority!==void 0&&(o.priority=t.priority),t.parent&&(o.parentId=t.parent),!Object.keys(o).length)throw new p("No updates specified");let s=await u(i,$,{id:e,input:o});k("Role updated"),m(t,s.updateRole);}catch(i){l(i);}}),a.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace";await u(i,D,{id:e,reassignToRoleId:t.reassign}),k("Role deleted");}catch(i){l(i);}});let C=n.command("policies").description("Manage policy references");C.command("list").description("List policy references").option("--layer <layer>","workspace or global","workspace").option("--resource-type <s>","Filter by resource type").option("--action <s>","Filter by action").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i={};e.resourceType&&(i.resourceType=e.resourceType),e.action&&(i.action=e.action);let o=await u(t,q,{filter:Object.keys(i).length?i:void 0,pagination:{limit:e.limit,offset:0}});m(e,o.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:o.policyReferences.map(s=>[h(s.id,12),s.name,s.resourceType??"-",s.action??"-",String(s.isActive),String(s.priority??"-")])});}catch(t){l(t);}}),C.command("attach").description("Attach a policy to a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let t=e.layer==="global"?"global":"workspace";await u(t,_,{roleId:e.role,policyId:e.policy}),k("Policy attached");}catch(t){l(t);}}),C.command("detach").description("Detach a policy from a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let t=e.layer==="global"?"global":"workspace";await u(t,N,{roleId:e.role,policyId:e.policy}),k("Policy detached");}catch(t){l(t);}}),n.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t,i,o)=>{try{let s=o.layer==="global"?"global":"workspace",g=o.scope??I(s),j={actorId:e,actorType:(o.actorType??"USER").toUpperCase(),action:t,resourceType:i,resourceId:o.resourceId,scopeId:g},y=await u(s,F,{input:j});m(o,y.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[A(y.checkPermission.allowed?"ACTIVE":"ERROR"),y.checkPermission.decisionPath,y.checkPermission.roleName??"-",y.checkPermission.roleLevel??"-",y.checkPermission.overrideType??"-"]]});}catch(s){l(s);}});}var ee={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(r,n){E(n),G(r);}},lt=ee;module.exports=lt;
76
+ `;function m(n,r,a){return n==="workspace"?E(r,a):v(r,a)}function x(n){let r=A().auth.read();if(n==="workspace"){if(!r?.workspaceId)throw new u("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return r.workspaceId}if(!r?.organizationId)throw new u("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return r.organizationId}function _(n){let r=n.command("rbac").description("Role-based access control"),a=r.command("roles").description("Manage roles");a.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>","Output format").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??x(t),o={};e.includeSystem&&(o.includeSystem=!0);let s=await m(t,S,{filter:Object.keys(o).length?o:void 0,pagination:{limit:e.limit,offset:0},scopeId:i});f(e,s.roles,{headers:["ID","Name","Scope","Priority","System"],rows:s.roles.map(d=>[h(d.id,12),d.name,h(d.scopeId,12),String(d.priority),String(d.isSystem)])});}catch(t){l(t);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o=await m(i,O,{id:e});if(!o.role)throw new u(`Role ${e} not found`);f(t,o.role);}catch(i){l(i);}}),a.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",e=>parseInt(e,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??x(t),o={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:i};t==="global"&&e.scopeType&&(o.scopeType=e.scopeType);let s=await m(t,P,{input:o});k(`Role created: ${s.createRole.name}`),f(e,s.createRole);}catch(t){l(t);}}),a.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",e=>parseInt(e,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o={};if(t.name&&(o.name=t.name),t.description!==void 0&&(o.description=t.description),t.priority!==void 0&&(o.priority=t.priority),t.parent&&(o.parentId=t.parent),!Object.keys(o).length)throw new u("No updates specified");let s=await m(i,L,{id:e,input:o});k("Role updated"),f(t,s.updateRole);}catch(i){l(i);}}),a.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace";await m(i,$,{id:e,reassignToRoleId:t.reassign}),k("Role deleted");}catch(i){l(i);}}),r.command("policies").description("Manage policy references").command("list").description("List policy references").option("--layer <layer>","workspace or global","workspace").option("--resource-type <s>","Filter by resource type").option("--action <s>","Filter by action").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i={};e.resourceType&&(i.resourceType=e.resourceType),e.action&&(i.action=e.action);let o=await m(t,D,{filter:Object.keys(i).length?i:void 0,pagination:{limit:e.limit,offset:0}});f(e,o.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:o.policyReferences.map(s=>[h(s.id,12),s.name,s.resourceType??"-",s.action??"-",String(s.isActive),String(s.priority??"-")])});}catch(t){l(t);}}),r.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t,i,o)=>{try{let s=o.layer==="global"?"global":"workspace",d=o.scope??x(s),N={actorId:e,actorType:(o.actorType??"USER").toUpperCase(),action:t,resourceType:i,resourceId:o.resourceId,scopeId:d},y=await m(s,q,{input:N});f(o,y.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[R(y.checkPermission.allowed?"ACTIVE":"ERROR"),y.checkPermission.decisionPath,y.checkPermission.roleName??"-",y.checkPermission.roleLevel??"-",y.checkPermission.overrideType??"-"]]});}catch(s){l(s);}});}var Q={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(n,r){T(r),_(n);}},ct=Q;module.exports=ct;