@burdenoff/cli-sdk 2026.1102.1 → 2026.1102.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/chunk-O6UCQ5IT.js +1 -0
  2. package/dist/{chunk-AYNNSLCL.js → chunk-ZGT7IIOP.js} +409 -418
  3. package/dist/modules/adaptercloud/index.cjs +9 -6
  4. package/dist/modules/adaptercloud/index.js +7 -4
  5. package/dist/modules/artistrybase/index.js +2 -2
  6. package/dist/modules/assethandler/index.cjs +2 -2
  7. package/dist/modules/assethandler/index.js +2 -2
  8. package/dist/modules/atheletebridge/index.cjs +35 -21
  9. package/dist/modules/atheletebridge/index.js +33 -19
  10. package/dist/modules/auth/index.cjs +37 -37
  11. package/dist/modules/auth/index.js +33 -29
  12. package/dist/modules/billing/index.cjs +1 -1
  13. package/dist/modules/billing/index.js +2 -2
  14. package/dist/modules/brainyrich/index.cjs +44 -28
  15. package/dist/modules/brainyrich/index.js +47 -31
  16. package/dist/modules/buildmyiq/index.cjs +64 -67
  17. package/dist/modules/buildmyiq/index.js +60 -63
  18. package/dist/modules/channels/index.cjs +3 -3
  19. package/dist/modules/channels/index.js +2 -2
  20. package/dist/modules/collabkin/index.cjs +4 -4
  21. package/dist/modules/collabkin/index.js +2 -2
  22. package/dist/modules/comradecircle/index.cjs +24 -16
  23. package/dist/modules/comradecircle/index.js +20 -12
  24. package/dist/modules/conversations/index.cjs +7 -7
  25. package/dist/modules/conversations/index.js +2 -2
  26. package/dist/modules/coolandlovely/index.cjs +28 -15
  27. package/dist/modules/coolandlovely/index.js +30 -17
  28. package/dist/modules/cosmicintersection/index.cjs +6 -6
  29. package/dist/modules/cosmicintersection/index.js +2 -2
  30. package/dist/modules/crewfoundry/index.js +2 -2
  31. package/dist/modules/devportal/index.cjs +2 -2
  32. package/dist/modules/devportal/index.js +2 -2
  33. package/dist/modules/ecoimpacthub/index.cjs +23 -13
  34. package/dist/modules/ecoimpacthub/index.js +20 -10
  35. package/dist/modules/eventfullymanaged/index.cjs +74 -74
  36. package/dist/modules/eventfullymanaged/index.js +78 -78
  37. package/dist/modules/export/index.cjs +4 -4
  38. package/dist/modules/export/index.js +2 -2
  39. package/dist/modules/files/index.cjs +3 -3
  40. package/dist/modules/files/index.js +4 -4
  41. package/dist/modules/fluidgrids/index.cjs +16 -16
  42. package/dist/modules/fluidgrids/index.js +3 -3
  43. package/dist/modules/ggnomad/index.cjs +4 -4
  44. package/dist/modules/ggnomad/index.js +2 -2
  45. package/dist/modules/govcitizenhub/index.cjs +10 -7
  46. package/dist/modules/govcitizenhub/index.js +8 -5
  47. package/dist/modules/groups/index.cjs +4 -4
  48. package/dist/modules/groups/index.js +2 -2
  49. package/dist/modules/headshotmarketing/index.js +2 -2
  50. package/dist/modules/hookmovies/index.cjs +6 -6
  51. package/dist/modules/hookmovies/index.js +2 -2
  52. package/dist/modules/housingvista/index.cjs +3 -3
  53. package/dist/modules/housingvista/index.js +2 -2
  54. package/dist/modules/integrations/index.cjs +5 -5
  55. package/dist/modules/integrations/index.js +2 -2
  56. package/dist/modules/intelwatchtower/index.cjs +28 -16
  57. package/dist/modules/intelwatchtower/index.js +25 -13
  58. package/dist/modules/kadaikodi/index.cjs +2 -2
  59. package/dist/modules/kadaikodi/index.js +2 -2
  60. package/dist/modules/labsofscience/index.cjs +10 -6
  61. package/dist/modules/labsofscience/index.js +9 -5
  62. package/dist/modules/manufacturedops/index.cjs +35 -22
  63. package/dist/modules/manufacturedops/index.js +35 -22
  64. package/dist/modules/movethewheels/index.js +2 -2
  65. package/dist/modules/notifications/index.cjs +2 -2
  66. package/dist/modules/notifications/index.js +2 -2
  67. package/dist/modules/organizations/index.js +2 -2
  68. package/dist/modules/planmagnet/index.cjs +21 -21
  69. package/dist/modules/planmagnet/index.js +32 -32
  70. package/dist/modules/products/index.cjs +4 -4
  71. package/dist/modules/products/index.js +2 -2
  72. package/dist/modules/proserviceworld/index.cjs +18 -13
  73. package/dist/modules/proserviceworld/index.js +18 -13
  74. package/dist/modules/rbac/index.js +2 -2
  75. package/dist/modules/sandbox/index.cjs +17 -17
  76. package/dist/modules/sandbox/index.js +1 -1
  77. package/dist/modules/scheduler/index.cjs +2 -2
  78. package/dist/modules/scheduler/index.js +2 -2
  79. package/dist/modules/security/index.cjs +3 -3
  80. package/dist/modules/security/index.js +2 -2
  81. package/dist/modules/semanticfed/index.cjs +3 -3
  82. package/dist/modules/semanticfed/index.js +2 -2
  83. package/dist/modules/store/index.cjs +3 -3
  84. package/dist/modules/store/index.js +2 -2
  85. package/dist/modules/subscriberbot/index.cjs +43 -19
  86. package/dist/modules/subscriberbot/index.js +47 -23
  87. package/dist/modules/support/index.cjs +2 -2
  88. package/dist/modules/support/index.js +2 -2
  89. package/dist/modules/tags/index.js +2 -2
  90. package/dist/modules/technospam/index.cjs +18 -9
  91. package/dist/modules/technospam/index.js +18 -9
  92. package/dist/modules/theculturepost/index.cjs +27 -22
  93. package/dist/modules/theculturepost/index.js +32 -27
  94. package/dist/modules/theglobalfuel/index.cjs +65 -60
  95. package/dist/modules/theglobalfuel/index.js +65 -60
  96. package/dist/modules/timecampus/index.js +2 -2
  97. package/dist/modules/tours/index.cjs +2 -2
  98. package/dist/modules/tours/index.js +2 -2
  99. package/dist/modules/vibecontrols/index.cjs +563 -567
  100. package/dist/modules/vibecontrols/index.js +5 -4
  101. package/dist/modules/workspaces/index.cjs +4 -4
  102. package/dist/modules/workspaces/index.js +2 -2
  103. package/package.json +1 -1
  104. package/dist/chunk-W4JZR7RJ.js +0 -1
@@ -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 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=`
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 h(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}async function s(i,o){return h().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){h().output.formatAndOutput(i,o,l);}function p(i){h().output.printSuccess(i);}function w(i){return h().output.formatStatus(i)}function f(i,o){return h().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
- `,O=`
30
+ `,S=`
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
- `,S=`
36
+ `,O=`
37
37
  mutation CreateKeyboardShortcut($input: CreateKeyboardShortcutInput!) {
38
38
  createKeyboardShortcut(input: $input) {
39
39
  id label shortcutKey isEnabled
@@ -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});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;
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(S,{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(O,{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 y=o.command("content-pages").description("Content pages (legal, marketing)");y.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);}}),y.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);}}),y.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);}}),y.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-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var b=`
1
+ import {a,c,i,r,p,h as h$1,k as k$1}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.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 }
@@ -99,4 +99,4 @@ import {a,c,h as h$1,p,n,g,i}from'../../chunk-W4JZR7RJ.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(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};
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$1=await c(b,{filter:Object.keys(e).length?e:void 0,limit:t.limit,offset:0});i(t,i$1.platformProducts.items,{headers:["ID","Name","Slug","Status"],rows:i$1.platformProducts.items.map(a=>[r(a.id,12),a.name,a.slug??"-",p(a.status)])});}catch(e){h$1(e);}}),d.command("get").description("Get a product").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let i$1=await c(h,{id:t});if(!i$1.platformProduct)throw new o(`Product ${t} not found`);i(e,i$1.platformProduct);}catch(i){h$1(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});k$1(`Product created: ${i$1.createPlatformProduct.name}`),i(t,i$1.createPlatformProduct);}catch(e){h$1(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});k$1("Product updated"),i(e,a.updatePlatformProduct);}catch(i){h$1(i);}}),d.command("delete").description("Delete a product").argument("<id>").action(async t=>{try{await c(F,{id:t}),k$1("Product deleted");}catch(e){h$1(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$1=await c(U,{filter:Object.keys(e).length?e:void 0,limit:t.limit});i(t,i$1.keyboardShortcuts.items,{headers:["ID","Label","Key","Category","Event","Enabled"],rows:i$1.keyboardShortcuts.items.map(a=>[r(a.id,12),a.label,a.shortcutKey,a.category??"-",a.eventName??"-",String(!!a.isEnabled)])});}catch(e){h$1(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});k$1("Shortcut created"),i(t,i$1.createKeyboardShortcut);}catch(e){h$1(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});k$1("Shortcut updated"),i(e,a.updateKeyboardShortcut);}catch(i){h$1(i);}}),l.command("delete").description("Delete a shortcut").argument("<id>").action(async t=>{try{await c(I,{id:t}),k$1("Shortcut deleted");}catch(e){h$1(e);}});let g=d.command("content-pages").description("Content pages (legal, marketing)");g.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$1=await c(S,{productId:t.product,filter:Object.keys(e).length?e:void 0,limit:t.limit});i(t,i$1.contentPages.items,{headers:["ID","Slug","Title","Visibility","Published"],rows:i$1.contentPages.items.map(a=>[r(a.id,12),a.slug,r(a.title,40),a.visibility??"-",String(!!a.isPublished)])});}catch(e){h$1(e);}}),g.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});k$1("Content page created"),i(t,i$1.createContentPage);}catch(e){h$1(e);}}),g.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});k$1("Content page updated"),i(e,a.updateContentPage);}catch(i){h$1(i);}}),g.command("delete").description("Delete a content page").argument("<id>").action(async t=>{try{await c(k,{id:t}),k$1("Content page deleted");}catch(e){h$1(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$1=await c($,{filter:Object.keys(e).length?e:void 0,limit:t.limit});i(t,i$1.featureFlags.items,{headers:["ID","Key","Type","Status","Default"],rows:i$1.featureFlags.items.map(a=>[r(a.id,12),a.key,a.flagType??"-",p(a.status),String(a.defaultValue)])});}catch(e){h$1(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});k$1(`Feature flag created: ${i$1.createFeatureFlag.key}`),i(t,i$1.createFeatureFlag);}catch(e){h$1(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});k$1("Feature flag updated"),i(e,a.updateFeatureFlag);}catch(i){h$1(i);}}),p$1.command("delete").description("Delete a feature flag").argument("<id>").action(async t=>{try{await c(_,{id:t}),k$1("Feature flag deleted");}catch(e){h$1(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$1=await c(L,{input:e});i(t,i$1.evaluateFeatureFlags.evaluations);}catch(e){h$1(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
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var p=class extends Error{exitCode;hint;constructor(r,t){super(r),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},y=class extends p{constructor(r,t){super(r,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},w=class extends Error{cause;constructor(r,t){super(r),this.name="CliInternalError",this.cause=t;}};var h=null;function v(i){h=i;}function I(){if(!h)throw new w("vibecontrols module helpers used before setHelpersContext was called");return h}function wt(){let i=I();if(!i.auth.isAuthenticated())throw new y("Authentication required.",{hint:`Run \`${i.productName} auth login\` to authenticate.`})}async function a(i,r){return wt(),I().gql.workspace.request(i,r)}async function A(i,r){return I().gql.workspaceAuthOnly.request(i,r)}function o(i){let r=i instanceof Error?i.message:String(i);throw new p(r)}function s(i,r,t){I().output.formatAndOutput(i,r,t);}function d(i){I().output.printSuccess(i);}function b(i){return I().output.formatDate(i)}function g(i,r){return I().output.truncate(i,r)}var x=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(r,t){super(r),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},y=class extends u{constructor(r,t){super(r,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},w=class extends Error{cause;constructor(r,t){super(r),this.name="CliInternalError",this.cause=t;}};var h=null;function v(i){h=i;}function I(){if(!h)throw new w("vibecontrols module helpers used before setHelpersContext was called");return h}function wt(){let i=I();if(!i.auth.isAuthenticated())throw new y("Authentication required.",{hint:`Run \`${i.productName} auth login\` to authenticate.`})}async function a(i,r){return wt(),I().gql.workspace.request(i,r)}async function A(i,r){return I().gql.workspaceAuthOnly.request(i,r)}function o(i){let r=i instanceof Error?i.message:String(i);throw new u(r)}function s(i,r,t){I().output.formatAndOutput(i,r,t);}function d(i){I().output.printSuccess(i);}function b(i){return I().output.formatDate(i)}function g(i,r){return I().output.truncate(i,r)}var x=`
2
2
  query PswClient($id: ID!) {
3
3
  pswClient(id: $id) {
4
4
  id name type status industry contactName contactEmail contactPhone
@@ -163,31 +163,36 @@
163
163
  $subjectType: String
164
164
  $pagination: PaginationInput
165
165
  ) {
166
- pswListComplianceChecks(
167
- status: $status
168
- subjectId: $subjectId
169
- subjectType: $subjectType
170
- pagination: $pagination
171
- ) {
172
- id type status title subjectId subjectType reviewerId dueDate
173
- resolvedAt details evidenceFileId createdAt updatedAt workspaceId
166
+ pswListComplianceChecks(status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {
167
+ items {
168
+ id type status title subjectId subjectType reviewerId dueDate resolvedAt details
169
+ evidenceFileId createdAt updatedAt workspaceId
170
+ }
171
+ pageInfo { cursor hasMore }
172
+ totalCount
174
173
  }
175
174
  }
176
175
  `,B=`
177
176
  query PswListConflictChecks($clientId: ID, $pagination: PaginationInput) {
178
177
  pswListConflictChecks(clientId: $clientId, pagination: $pagination) {
179
- id clientId matterId status searchedParties findings waiverReason
180
- clearedById resolvedAt createdAt updatedAt workspaceId
178
+ items {
179
+ id clientId matterId status searchedParties findings waiverReason clearedById
180
+ resolvedAt createdAt updatedAt workspaceId
181
+ }
182
+ pageInfo { cursor hasMore }
183
+ totalCount
181
184
  }
182
185
  }
183
186
  `,K=`
184
187
  query PswListPracticeAreas($pagination: PaginationInput) {
185
188
  pswListPracticeAreas(pagination: $pagination) {
186
- id name code description isActive createdAt updatedAt workspaceId
189
+ items { id name code description isActive createdAt updatedAt workspaceId }
190
+ pageInfo { cursor hasMore }
191
+ totalCount
187
192
  }
188
193
  }
189
194
  `,J=`
190
195
  query PswHealth {
191
196
  pswHealth
192
197
  }
193
- `;function Y(i,r){try{return JSON.parse(r)}catch{throw new p(`--${i} must be valid JSON`)}}function u(i){let r=Number.parseInt(i,10);if(Number.isNaN(r))throw new p(`Expected an integer but got "${i}"`);return r}function f(i){let r=Number.parseFloat(i);if(Number.isNaN(r))throw new p(`Expected a number but got "${i}"`);return r}function C(i){return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function m(i){let r={};return i.limit!==void 0&&(r.limit=i.limit),i.offset!==void 0&&(r.offset=i.offset),i.cursor!==void 0&&(r.cursor=i.cursor),Object.keys(r).length?r:void 0}function Q(i){let r=i.command("clients").description("ProServiceWorld clients");r.command("list").description("List clients").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListClients.items,{headers:["ID","Name","Type","Status","Industry","Contact"],rows:e.pswListClients.items.map(n=>[g(n.id,12),n.name,n.type,n.status,n.industry??"-",n.contactName??"-"])});}catch(e){o(e);}}),r.command("get").description("Get a client by id").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(x,{id:t});if(!n.pswClient)throw new p(`Client ${t} not found`);s(e,n.pswClient);}catch(n){o(n);}}),r.command("create").description("Create a client").requiredOption("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.industry&&(e.industry=t.industry),t.contactName&&(e.contactName=t.contactName),t.contactEmail&&(e.contactEmail=t.contactEmail),t.contactPhone&&(e.contactPhone=t.contactPhone),t.address&&(e.address=t.address),t.notes&&(e.notes=t.notes),t.relationshipOwner&&(e.relationshipOwnerId=t.relationshipOwner),t.tags&&(e.tags=C(t.tags));let n=await a(D,{input:e});d(`Client created: ${n.pswCreateClient.name}`),s(t,n.pswCreateClient);}catch(e){o(e);}}),r.command("update").description("Update a client").argument("<id>","Client ID").option("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.industry!==void 0&&(n.industry=e.industry),e.contactName!==void 0&&(n.contactName=e.contactName),e.contactEmail!==void 0&&(n.contactEmail=e.contactEmail),e.contactPhone!==void 0&&(n.contactPhone=e.contactPhone),e.address!==void 0&&(n.address=e.address),e.notes!==void 0&&(n.notes=e.notes),e.relationshipOwner&&(n.relationshipOwnerId=e.relationshipOwner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new p("No updates specified");let E=await a(O,{id:t,input:n});d("Client updated"),s(e,E.pswUpdateClient);}catch(n){o(n);}}),r.command("archive").description("Archive a client").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(S,{id:t});d(n.pswArchiveClient?`Client ${t} archived`:`Client ${t} not archived`),s(e,{archived:n.pswArchiveClient});}catch(n){o(n);}});}function X(i){let r=i.command("engagements").description("ProServiceWorld engagements");r.command("list").description("List engagements").option("--client <id>","Filter by client ID").option("--status <s>","Engagement status").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(R,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListEngagements.items,{headers:["ID","Name","Status","Fee","Amount","Currency"],rows:e.pswListEngagements.items.map(n=>[g(n.id,12),n.name,n.status,n.feeArrangement??"-",n.feeAmount!=null?String(n.feeAmount):"-",n.currency??"-"])});}catch(e){o(e);}}),r.command("get").description("Get an engagement by id").argument("<id>","Engagement ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(L,{id:t});if(!n.pswEngagement)throw new p(`Engagement ${t} not found`);s(e,n.pswEngagement);}catch(n){o(n);}}),r.command("create").description("Create an engagement").requiredOption("--client <id>","Client ID").requiredOption("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",f).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,name:t.name};t.description&&(e.description=t.description),t.feeArrangement&&(e.feeArrangement=t.feeArrangement.toUpperCase()),t.feeAmount!==void 0&&(e.feeAmount=t.feeAmount),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.responsiblePartner&&(e.responsiblePartnerId=t.responsiblePartner),t.tags&&(e.tags=C(t.tags));let n=await a($,{input:e});d(`Engagement created: ${n.pswCreateEngagement.name}`),s(t,n.pswCreateEngagement);}catch(e){o(e);}}),r.command("update").description("Update an engagement").argument("<id>","Engagement ID").option("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",f).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.feeArrangement&&(n.feeArrangement=e.feeArrangement.toUpperCase()),e.feeAmount!==void 0&&(n.feeAmount=e.feeAmount),e.currency&&(n.currency=e.currency),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.responsiblePartner&&(n.responsiblePartnerId=e.responsiblePartner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new p("No updates specified");let E=await a(N,{id:t,input:n});d("Engagement updated"),s(e,E.pswUpdateEngagement);}catch(n){o(n);}}),r.command("transition").description("Advance an engagement through its delivery lifecycle").argument("<id>","Engagement ID").requiredOption("--status <s>","PROPOSAL|ACCEPTED|IN_PROGRESS|REVIEW|DELIVERED|INVOICED|CLOSED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t,status:e.status.toUpperCase()});d(`Engagement transitioned to ${n.pswTransitionEngagement.status}`),s(e,n.pswTransitionEngagement);}catch(n){o(n);}});}function Z(i){let r=i.command("matters").description("ProServiceWorld matters");r.command("list").description("List matters").option("--client <id>","Filter by client ID").option("--engagement <id>","Filter by engagement ID").option("--status <s>","OPEN|ON_HOLD|CLOSED|ARCHIVED").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{clientId:t.client,engagementId:t.engagement,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListMatters.items,{headers:["ID","Title","Reference","Status","Priority","Privileged"],rows:e.pswListMatters.items.map(n=>[g(n.id,12),n.title,n.reference??"-",n.status,n.priority,n.isPrivileged?"yes":"no"])});}catch(e){o(e);}}),r.command("get").description("Get a matter by id").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(_,{id:t});if(!n.pswMatter)throw new p(`Matter ${t} not found`);s(e,n.pswMatter);}catch(n){o(n);}}),r.command("create").description("Create a matter").requiredOption("--client <id>","Client ID").requiredOption("--title <t>","Matter title").option("--reference <r>","External reference").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged","Mark as privileged").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,title:t.title};t.reference&&(e.reference=t.reference),t.description&&(e.description=t.description),t.engagement&&(e.engagementId=t.engagement),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.leadPractitioner&&(e.leadPractitionerId=t.leadPractitioner),t.priority&&(e.priority=t.priority.toUpperCase()),t.privileged&&(e.isPrivileged=!0),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=C(t.tags));let n=await a(U,{input:e});d(`Matter created: ${n.pswCreateMatter.title}`),s(t,n.pswCreateMatter);}catch(e){o(e);}}),r.command("update").description("Update a matter").argument("<id>","Matter ID").option("--title <t>","Matter title").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged <bool>","true|false",t=>t==="true").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.engagement&&(n.engagementId=e.engagement),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.leadPractitioner&&(n.leadPractitionerId=e.leadPractitioner),e.priority&&(n.priority=e.priority.toUpperCase()),e.privileged!==void 0&&(n.isPrivileged=e.privileged),e.dueDate&&(n.dueDate=e.dueDate),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new p("No updates specified");let E=await a(G,{id:t,input:n});d("Matter updated"),s(e,E.pswUpdateMatter);}catch(n){o(n);}}),r.command("close").description("Close a matter").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(W,{id:t});d(`Matter closed: ${n.pswCloseMatter.status}`),s(e,n.pswCloseMatter);}catch(n){o(n);}});}function tt(i){let r=i.command("invoices").description("ProServiceWorld invoices");r.command("list").description("List invoices").option("--client <id>","Filter by client ID").option("--status <s>","DRAFT|SENT|PAID|OVERDUE|CANCELLED").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListInvoices.items,{headers:["ID","Number","Status","Total","Currency"],rows:e.pswListInvoices.items.map(n=>[g(n.id,12),n.number,n.status,n.total!=null?String(n.total):"-",n.currency??"-"])});}catch(e){o(e);}}),r.command("create").description("Create an invoice").requiredOption("--client <id>","Client ID").requiredOption("--number <n>","Invoice number").option("--engagement <id>","Engagement ID").option("--currency <c>","Currency code").option("--issue-date <iso>","Issue date (ISO)").option("--due-date <iso>","Due date (ISO)").option("--subtotal <n>","Subtotal",f).option("--tax-amount <n>","Tax amount",f).option("--total <n>","Total",f).option("--line-items <json>","Line items JSON").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,number:t.number};t.engagement&&(e.engagementId=t.engagement),t.currency&&(e.currency=t.currency),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=Y("line-items",t.lineItems)),t.notes&&(e.notes=t.notes);let n=await a(F,{input:e});d(`Invoice created: ${n.pswCreateInvoice.number}`),s(t,n.pswCreateInvoice);}catch(e){o(e);}}),r.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(V,{id:t});d(`Invoice ${n.pswMarkInvoicePaid.number} marked ${n.pswMarkInvoicePaid.status}`),s(e,n.pswMarkInvoicePaid);}catch(n){o(n);}});}function et(i){i.command("time-entries").description("ProServiceWorld time entries").command("log").description("Log a time entry").requiredOption("--date <iso>","Entry date (ISO)").requiredOption("--minutes <n>","Minutes worked",u).option("--matter <id>","Matter ID").option("--engagement <id>","Engagement ID").option("--rate <n>","Hourly rate",f).option("--narrative <s>","Narrative").option("--non-billable","Mark entry as non-billable").option("-f, --format <format>","Output format").action(async t=>{try{if(!t.matter&&!t.engagement)throw new p("Provide --matter or --engagement to log time against");let e={date:t.date,minutes:t.minutes,billable:!t.nonBillable};t.matter&&(e.matterId=t.matter),t.engagement&&(e.engagementId=t.engagement),t.rate!==void 0&&(e.rate=t.rate),t.narrative&&(e.narrative=t.narrative);let n=await a(H,{input:e});d(`Time entry logged: ${n.pswLogTimeEntry.minutes} minutes`),s(t,n.pswLogTimeEntry);}catch(e){o(e);}});}function nt(i){i.command("compliance").description("ProServiceWorld compliance checks").command("list").description("List compliance checks").option("--status <s>","PENDING|IN_REVIEW|PASSED|FAILED|WAIVED").option("--subject <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(z,{status:t.status?t.status.toUpperCase():void 0,subjectId:t.subject,subjectType:t.subjectType,pagination:m(t)});s(t,e.pswListComplianceChecks,{headers:["ID","Title","Type","Status","Subject","Due"],rows:e.pswListComplianceChecks.map(n=>[g(n.id,12),n.title,n.type,n.status,g(n.subjectId,12),b(n.dueDate)])});}catch(e){o(e);}});}function rt(i){i.command("conflicts").description("ProServiceWorld conflict-of-interest checks").command("list").description("List conflict checks").option("--client <id>","Filter by client ID").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(B,{clientId:t.client,pagination:m(t)});s(t,e.pswListConflictChecks,{headers:["ID","Client","Matter","Status","Parties"],rows:e.pswListConflictChecks.map(n=>[g(n.id,12),g(n.clientId,12),n.matterId?g(n.matterId,12):"-",n.status,String(n.searchedParties.length)])});}catch(e){o(e);}});}function it(i){i.command("practice-areas").description("ProServiceWorld practice areas").command("list").description("List practice areas").option("--limit <n>","Page size",u,50).option("--offset <n>","Offset",u,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{pagination:m(t)});s(t,e.pswListPracticeAreas,{headers:["ID","Name","Code","Active"],rows:e.pswListPracticeAreas.map(n=>[g(n.id,12),n.name,n.code??"-",n.isActive?"yes":"no"])});}catch(e){o(e);}});}function ot(i){i.command("health").description("ProServiceWorld service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await A(J);d(t.pswHealth),s(r,{health:t.pswHealth});}catch(t){o(t);}});}var It={id:"proserviceworld",version:"1.0.0",displayName:"ProServiceWorld",dependsOn:["auth","workspaces"],register(i,r){v(r);let t=i.command("proserviceworld").description("ProServiceWorld professional-services automation");Q(t),X(t),Z(t),tt(t),et(t),nt(t),rt(t),it(t),ot(t);}},dn=It;module.exports=dn;
198
+ `;function Y(i,r){try{return JSON.parse(r)}catch{throw new u(`--${i} must be valid JSON`)}}function p(i){let r=Number.parseInt(i,10);if(Number.isNaN(r))throw new u(`Expected an integer but got "${i}"`);return r}function f(i){let r=Number.parseFloat(i);if(Number.isNaN(r))throw new u(`Expected a number but got "${i}"`);return r}function C(i){return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function m(i){let r={};return i.limit!==void 0&&(r.limit=i.limit),i.offset!==void 0&&(r.offset=i.offset),i.cursor!==void 0&&(r.cursor=i.cursor),Object.keys(r).length?r:void 0}function Q(i){let r=i.command("clients").description("ProServiceWorld clients");r.command("list").description("List clients").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(P,{status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListClients.items,{headers:["ID","Name","Type","Status","Industry","Contact"],rows:e.pswListClients.items.map(n=>[g(n.id,12),n.name,n.type,n.status,n.industry??"-",n.contactName??"-"])});}catch(e){o(e);}}),r.command("get").description("Get a client by id").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(x,{id:t});if(!n.pswClient)throw new u(`Client ${t} not found`);s(e,n.pswClient);}catch(n){o(n);}}),r.command("create").description("Create a client").requiredOption("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.industry&&(e.industry=t.industry),t.contactName&&(e.contactName=t.contactName),t.contactEmail&&(e.contactEmail=t.contactEmail),t.contactPhone&&(e.contactPhone=t.contactPhone),t.address&&(e.address=t.address),t.notes&&(e.notes=t.notes),t.relationshipOwner&&(e.relationshipOwnerId=t.relationshipOwner),t.tags&&(e.tags=C(t.tags));let n=await a(D,{input:e});d(`Client created: ${n.pswCreateClient.name}`),s(t,n.pswCreateClient);}catch(e){o(e);}}),r.command("update").description("Update a client").argument("<id>","Client ID").option("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.industry!==void 0&&(n.industry=e.industry),e.contactName!==void 0&&(n.contactName=e.contactName),e.contactEmail!==void 0&&(n.contactEmail=e.contactEmail),e.contactPhone!==void 0&&(n.contactPhone=e.contactPhone),e.address!==void 0&&(n.address=e.address),e.notes!==void 0&&(n.notes=e.notes),e.relationshipOwner&&(n.relationshipOwnerId=e.relationshipOwner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let E=await a(O,{id:t,input:n});d("Client updated"),s(e,E.pswUpdateClient);}catch(n){o(n);}}),r.command("archive").description("Archive a client").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(S,{id:t});d(n.pswArchiveClient?`Client ${t} archived`:`Client ${t} not archived`),s(e,{archived:n.pswArchiveClient});}catch(n){o(n);}});}function X(i){let r=i.command("engagements").description("ProServiceWorld engagements");r.command("list").description("List engagements").option("--client <id>","Filter by client ID").option("--status <s>","Engagement status").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(R,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListEngagements.items,{headers:["ID","Name","Status","Fee","Amount","Currency"],rows:e.pswListEngagements.items.map(n=>[g(n.id,12),n.name,n.status,n.feeArrangement??"-",n.feeAmount!=null?String(n.feeAmount):"-",n.currency??"-"])});}catch(e){o(e);}}),r.command("get").description("Get an engagement by id").argument("<id>","Engagement ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(L,{id:t});if(!n.pswEngagement)throw new u(`Engagement ${t} not found`);s(e,n.pswEngagement);}catch(n){o(n);}}),r.command("create").description("Create an engagement").requiredOption("--client <id>","Client ID").requiredOption("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",f).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,name:t.name};t.description&&(e.description=t.description),t.feeArrangement&&(e.feeArrangement=t.feeArrangement.toUpperCase()),t.feeAmount!==void 0&&(e.feeAmount=t.feeAmount),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.responsiblePartner&&(e.responsiblePartnerId=t.responsiblePartner),t.tags&&(e.tags=C(t.tags));let n=await a($,{input:e});d(`Engagement created: ${n.pswCreateEngagement.name}`),s(t,n.pswCreateEngagement);}catch(e){o(e);}}),r.command("update").description("Update an engagement").argument("<id>","Engagement ID").option("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",f).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.feeArrangement&&(n.feeArrangement=e.feeArrangement.toUpperCase()),e.feeAmount!==void 0&&(n.feeAmount=e.feeAmount),e.currency&&(n.currency=e.currency),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.responsiblePartner&&(n.responsiblePartnerId=e.responsiblePartner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let E=await a(N,{id:t,input:n});d("Engagement updated"),s(e,E.pswUpdateEngagement);}catch(n){o(n);}}),r.command("transition").description("Advance an engagement through its delivery lifecycle").argument("<id>","Engagement ID").requiredOption("--status <s>","PROPOSAL|ACCEPTED|IN_PROGRESS|REVIEW|DELIVERED|INVOICED|CLOSED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(M,{id:t,status:e.status.toUpperCase()});d(`Engagement transitioned to ${n.pswTransitionEngagement.status}`),s(e,n.pswTransitionEngagement);}catch(n){o(n);}});}function Z(i){let r=i.command("matters").description("ProServiceWorld matters");r.command("list").description("List matters").option("--client <id>","Filter by client ID").option("--engagement <id>","Filter by engagement ID").option("--status <s>","OPEN|ON_HOLD|CLOSED|ARCHIVED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(q,{clientId:t.client,engagementId:t.engagement,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListMatters.items,{headers:["ID","Title","Reference","Status","Priority","Privileged"],rows:e.pswListMatters.items.map(n=>[g(n.id,12),n.title,n.reference??"-",n.status,n.priority,n.isPrivileged?"yes":"no"])});}catch(e){o(e);}}),r.command("get").description("Get a matter by id").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(_,{id:t});if(!n.pswMatter)throw new u(`Matter ${t} not found`);s(e,n.pswMatter);}catch(n){o(n);}}),r.command("create").description("Create a matter").requiredOption("--client <id>","Client ID").requiredOption("--title <t>","Matter title").option("--reference <r>","External reference").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged","Mark as privileged").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,title:t.title};t.reference&&(e.reference=t.reference),t.description&&(e.description=t.description),t.engagement&&(e.engagementId=t.engagement),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.leadPractitioner&&(e.leadPractitionerId=t.leadPractitioner),t.priority&&(e.priority=t.priority.toUpperCase()),t.privileged&&(e.isPrivileged=!0),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=C(t.tags));let n=await a(U,{input:e});d(`Matter created: ${n.pswCreateMatter.title}`),s(t,n.pswCreateMatter);}catch(e){o(e);}}),r.command("update").description("Update a matter").argument("<id>","Matter ID").option("--title <t>","Matter title").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged <bool>","true|false",t=>t==="true").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.engagement&&(n.engagementId=e.engagement),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.leadPractitioner&&(n.leadPractitionerId=e.leadPractitioner),e.priority&&(n.priority=e.priority.toUpperCase()),e.privileged!==void 0&&(n.isPrivileged=e.privileged),e.dueDate&&(n.dueDate=e.dueDate),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new u("No updates specified");let E=await a(G,{id:t,input:n});d("Matter updated"),s(e,E.pswUpdateMatter);}catch(n){o(n);}}),r.command("close").description("Close a matter").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(W,{id:t});d(`Matter closed: ${n.pswCloseMatter.status}`),s(e,n.pswCloseMatter);}catch(n){o(n);}});}function tt(i){let r=i.command("invoices").description("ProServiceWorld invoices");r.command("list").description("List invoices").option("--client <id>","Filter by client ID").option("--status <s>","DRAFT|SENT|PAID|OVERDUE|CANCELLED").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(j,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:m(t)});s(t,e.pswListInvoices.items,{headers:["ID","Number","Status","Total","Currency"],rows:e.pswListInvoices.items.map(n=>[g(n.id,12),n.number,n.status,n.total!=null?String(n.total):"-",n.currency??"-"])});}catch(e){o(e);}}),r.command("create").description("Create an invoice").requiredOption("--client <id>","Client ID").requiredOption("--number <n>","Invoice number").option("--engagement <id>","Engagement ID").option("--currency <c>","Currency code").option("--issue-date <iso>","Issue date (ISO)").option("--due-date <iso>","Due date (ISO)").option("--subtotal <n>","Subtotal",f).option("--tax-amount <n>","Tax amount",f).option("--total <n>","Total",f).option("--line-items <json>","Line items JSON").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,number:t.number};t.engagement&&(e.engagementId=t.engagement),t.currency&&(e.currency=t.currency),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=Y("line-items",t.lineItems)),t.notes&&(e.notes=t.notes);let n=await a(F,{input:e});d(`Invoice created: ${n.pswCreateInvoice.number}`),s(t,n.pswCreateInvoice);}catch(e){o(e);}}),r.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await a(V,{id:t});d(`Invoice ${n.pswMarkInvoicePaid.number} marked ${n.pswMarkInvoicePaid.status}`),s(e,n.pswMarkInvoicePaid);}catch(n){o(n);}});}function et(i){i.command("time-entries").description("ProServiceWorld time entries").command("log").description("Log a time entry").requiredOption("--date <iso>","Entry date (ISO)").requiredOption("--minutes <n>","Minutes worked",p).option("--matter <id>","Matter ID").option("--engagement <id>","Engagement ID").option("--rate <n>","Hourly rate",f).option("--narrative <s>","Narrative").option("--non-billable","Mark entry as non-billable").option("-f, --format <format>","Output format").action(async t=>{try{if(!t.matter&&!t.engagement)throw new u("Provide --matter or --engagement to log time against");let e={date:t.date,minutes:t.minutes,billable:!t.nonBillable};t.matter&&(e.matterId=t.matter),t.engagement&&(e.engagementId=t.engagement),t.rate!==void 0&&(e.rate=t.rate),t.narrative&&(e.narrative=t.narrative);let n=await a(H,{input:e});d(`Time entry logged: ${n.pswLogTimeEntry.minutes} minutes`),s(t,n.pswLogTimeEntry);}catch(e){o(e);}});}function nt(i){i.command("compliance").description("ProServiceWorld compliance checks").command("list").description("List compliance checks").option("--status <s>","PENDING|IN_REVIEW|PASSED|FAILED|WAIVED").option("--subject <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(z,{status:t.status?t.status.toUpperCase():void 0,subjectId:t.subject,subjectType:t.subjectType,pagination:m(t)});s(t,e.pswListComplianceChecks.items,{headers:["ID","Title","Type","Status","Subject","Due"],rows:e.pswListComplianceChecks.items.map(n=>[g(n.id,12),n.title,n.type,n.status,g(n.subjectId,12),b(n.dueDate)])});}catch(e){o(e);}});}function rt(i){i.command("conflicts").description("ProServiceWorld conflict-of-interest checks").command("list").description("List conflict checks").option("--client <id>","Filter by client ID").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(B,{clientId:t.client,pagination:m(t)});s(t,e.pswListConflictChecks.items,{headers:["ID","Client","Matter","Status","Parties"],rows:e.pswListConflictChecks.items.map(n=>[g(n.id,12),g(n.clientId,12),n.matterId?g(n.matterId,12):"-",n.status,String(n.searchedParties.length)])});}catch(e){o(e);}});}function it(i){i.command("practice-areas").description("ProServiceWorld practice areas").command("list").description("List practice areas").option("--limit <n>","Page size",p,50).option("--offset <n>","Offset",p,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await a(K,{pagination:m(t)});s(t,e.pswListPracticeAreas.items,{headers:["ID","Name","Code","Active"],rows:e.pswListPracticeAreas.items.map(n=>[g(n.id,12),n.name,n.code??"-",n.isActive?"yes":"no"])});}catch(e){o(e);}});}function ot(i){i.command("health").description("ProServiceWorld service health check (public)").option("-f, --format <format>","Output format").action(async r=>{try{let t=await A(J);d(t.pswHealth),s(r,{health:t.pswHealth});}catch(t){o(t);}});}var It={id:"proserviceworld",version:"1.0.0",displayName:"ProServiceWorld",dependsOn:["auth","workspaces"],register(i,r){v(r);let t=i.command("proserviceworld").description("ProServiceWorld professional-services automation");Q(t),X(t),Z(t),tt(t),et(t),nt(t),rt(t),it(t),ot(t);}},dn=It;module.exports=dn;
@@ -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-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var P=`
1
+ import {a,b as b$1,i,r,h as h$1,k as k$1,q as q$1,d}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.js';var P=`
2
2
  query PswClient($id: ID!) {
3
3
  pswClient(id: $id) {
4
4
  id name type status industry contactName contactEmail contactPhone
@@ -163,31 +163,36 @@ import {a,b as b$1,h as h$1,p,g,i,o as o$1,d}from'../../chunk-W4JZR7RJ.js';impor
163
163
  $subjectType: String
164
164
  $pagination: PaginationInput
165
165
  ) {
166
- pswListComplianceChecks(
167
- status: $status
168
- subjectId: $subjectId
169
- subjectType: $subjectType
170
- pagination: $pagination
171
- ) {
172
- id type status title subjectId subjectType reviewerId dueDate
173
- resolvedAt details evidenceFileId createdAt updatedAt workspaceId
166
+ pswListComplianceChecks(status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {
167
+ items {
168
+ id type status title subjectId subjectType reviewerId dueDate resolvedAt details
169
+ evidenceFileId createdAt updatedAt workspaceId
170
+ }
171
+ pageInfo { cursor hasMore }
172
+ totalCount
174
173
  }
175
174
  }
176
175
  `,V=`
177
176
  query PswListConflictChecks($clientId: ID, $pagination: PaginationInput) {
178
177
  pswListConflictChecks(clientId: $clientId, pagination: $pagination) {
179
- id clientId matterId status searchedParties findings waiverReason
180
- clearedById resolvedAt createdAt updatedAt workspaceId
178
+ items {
179
+ id clientId matterId status searchedParties findings waiverReason clearedById
180
+ resolvedAt createdAt updatedAt workspaceId
181
+ }
182
+ pageInfo { cursor hasMore }
183
+ totalCount
181
184
  }
182
185
  }
183
186
  `,W=`
184
187
  query PswListPracticeAreas($pagination: PaginationInput) {
185
188
  pswListPracticeAreas(pagination: $pagination) {
186
- id name code description isActive createdAt updatedAt workspaceId
189
+ items { id name code description isActive createdAt updatedAt workspaceId }
190
+ pageInfo { cursor hasMore }
191
+ totalCount
187
192
  }
188
193
  }
189
194
  `,F=`
190
195
  query PswHealth {
191
196
  pswHealth
192
197
  }
193
- `;function q(r,i){try{return JSON.parse(i)}catch{throw new o(`--${r} must be valid JSON`)}}function c(r){let i=Number.parseInt(r,10);if(Number.isNaN(i))throw new o(`Expected an integer but got "${r}"`);return i}function I(r){let i=Number.parseFloat(r);if(Number.isNaN(i))throw new o(`Expected a number but got "${r}"`);return i}function C(r){return r.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function u(r){let i={};return r.limit!==void 0&&(i.limit=r.limit),r.offset!==void 0&&(i.offset=r.offset),r.cursor!==void 0&&(i.cursor=r.cursor),Object.keys(i).length?i:void 0}function z(r){let i$1=r.command("clients").description("ProServiceWorld clients");i$1.command("list").description("List clients").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(D,{status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});h$1(t,e.pswListClients.items,{headers:["ID","Name","Type","Status","Industry","Contact"],rows:e.pswListClients.items.map(n=>[p(n.id,12),n.name,n.type,n.status,n.industry??"-",n.contactName??"-"])});}catch(e){g(e);}}),i$1.command("get").description("Get a client by id").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(P,{id:t});if(!n.pswClient)throw new o(`Client ${t} not found`);h$1(e,n.pswClient);}catch(n){g(n);}}),i$1.command("create").description("Create a client").requiredOption("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.industry&&(e.industry=t.industry),t.contactName&&(e.contactName=t.contactName),t.contactEmail&&(e.contactEmail=t.contactEmail),t.contactPhone&&(e.contactPhone=t.contactPhone),t.address&&(e.address=t.address),t.notes&&(e.notes=t.notes),t.relationshipOwner&&(e.relationshipOwnerId=t.relationshipOwner),t.tags&&(e.tags=C(t.tags));let n=await b$1(h,{input:e});i(`Client created: ${n.pswCreateClient.name}`),h$1(t,n.pswCreateClient);}catch(e){g(e);}}),i$1.command("update").description("Update a client").argument("<id>","Client ID").option("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.industry!==void 0&&(n.industry=e.industry),e.contactName!==void 0&&(n.contactName=e.contactName),e.contactEmail!==void 0&&(n.contactEmail=e.contactEmail),e.contactPhone!==void 0&&(n.contactPhone=e.contactPhone),e.address!==void 0&&(n.address=e.address),e.notes!==void 0&&(n.notes=e.notes),e.relationshipOwner&&(n.relationshipOwnerId=e.relationshipOwner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(b,{id:t,input:n});i("Client updated"),h$1(e,w.pswUpdateClient);}catch(n){g(n);}}),i$1.command("archive").description("Archive a client").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(T,{id:t});i(n.pswArchiveClient?`Client ${t} archived`:`Client ${t} not archived`),h$1(e,{archived:n.pswArchiveClient});}catch(n){g(n);}});}function K(r){let i$1=r.command("engagements").description("ProServiceWorld engagements");i$1.command("list").description("List engagements").option("--client <id>","Filter by client ID").option("--status <s>","Engagement status").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(v,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});h$1(t,e.pswListEngagements.items,{headers:["ID","Name","Status","Fee","Amount","Currency"],rows:e.pswListEngagements.items.map(n=>[p(n.id,12),n.name,n.status,n.feeArrangement??"-",n.feeAmount!=null?String(n.feeAmount):"-",n.currency??"-"])});}catch(e){g(e);}}),i$1.command("get").description("Get an engagement by id").argument("<id>","Engagement ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(O,{id:t});if(!n.pswEngagement)throw new o(`Engagement ${t} not found`);h$1(e,n.pswEngagement);}catch(n){g(n);}}),i$1.command("create").description("Create an engagement").requiredOption("--client <id>","Client ID").requiredOption("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",I).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,name:t.name};t.description&&(e.description=t.description),t.feeArrangement&&(e.feeArrangement=t.feeArrangement.toUpperCase()),t.feeAmount!==void 0&&(e.feeAmount=t.feeAmount),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.responsiblePartner&&(e.responsiblePartnerId=t.responsiblePartner),t.tags&&(e.tags=C(t.tags));let n=await b$1(L,{input:e});i(`Engagement created: ${n.pswCreateEngagement.name}`),h$1(t,n.pswCreateEngagement);}catch(e){g(e);}}),i$1.command("update").description("Update an engagement").argument("<id>","Engagement ID").option("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",I).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.feeArrangement&&(n.feeArrangement=e.feeArrangement.toUpperCase()),e.feeAmount!==void 0&&(n.feeAmount=e.feeAmount),e.currency&&(n.currency=e.currency),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.responsiblePartner&&(n.responsiblePartnerId=e.responsiblePartner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(N,{id:t,input:n});i("Engagement updated"),h$1(e,w.pswUpdateEngagement);}catch(n){g(n);}}),i$1.command("transition").description("Advance an engagement through its delivery lifecycle").argument("<id>","Engagement ID").requiredOption("--status <s>","PROPOSAL|ACCEPTED|IN_PROGRESS|REVIEW|DELIVERED|INVOICED|CLOSED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(M,{id:t,status:e.status.toUpperCase()});i(`Engagement transitioned to ${n.pswTransitionEngagement.status}`),h$1(e,n.pswTransitionEngagement);}catch(n){g(n);}});}function B(r){let i$1=r.command("matters").description("ProServiceWorld matters");i$1.command("list").description("List matters").option("--client <id>","Filter by client ID").option("--engagement <id>","Filter by engagement ID").option("--status <s>","OPEN|ON_HOLD|CLOSED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(S,{clientId:t.client,engagementId:t.engagement,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});h$1(t,e.pswListMatters.items,{headers:["ID","Title","Reference","Status","Priority","Privileged"],rows:e.pswListMatters.items.map(n=>[p(n.id,12),n.title,n.reference??"-",n.status,n.priority,n.isPrivileged?"yes":"no"])});}catch(e){g(e);}}),i$1.command("get").description("Get a matter by id").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(R,{id:t});if(!n.pswMatter)throw new o(`Matter ${t} not found`);h$1(e,n.pswMatter);}catch(n){g(n);}}),i$1.command("create").description("Create a matter").requiredOption("--client <id>","Client ID").requiredOption("--title <t>","Matter title").option("--reference <r>","External reference").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged","Mark as privileged").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,title:t.title};t.reference&&(e.reference=t.reference),t.description&&(e.description=t.description),t.engagement&&(e.engagementId=t.engagement),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.leadPractitioner&&(e.leadPractitionerId=t.leadPractitioner),t.priority&&(e.priority=t.priority.toUpperCase()),t.privileged&&(e.isPrivileged=!0),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=C(t.tags));let n=await b$1($,{input:e});i(`Matter created: ${n.pswCreateMatter.title}`),h$1(t,n.pswCreateMatter);}catch(e){g(e);}}),i$1.command("update").description("Update a matter").argument("<id>","Matter ID").option("--title <t>","Matter title").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged <bool>","true|false",t=>t==="true").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.engagement&&(n.engagementId=e.engagement),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.leadPractitioner&&(n.leadPractitionerId=e.leadPractitioner),e.priority&&(n.priority=e.priority.toUpperCase()),e.privileged!==void 0&&(n.isPrivileged=e.privileged),e.dueDate&&(n.dueDate=e.dueDate),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(k,{id:t,input:n});i("Matter updated"),h$1(e,w.pswUpdateMatter);}catch(n){g(n);}}),i$1.command("close").description("Close a matter").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(_,{id:t});i(`Matter closed: ${n.pswCloseMatter.status}`),h$1(e,n.pswCloseMatter);}catch(n){g(n);}});}function J(r){let i$1=r.command("invoices").description("ProServiceWorld invoices");i$1.command("list").description("List invoices").option("--client <id>","Filter by client ID").option("--status <s>","DRAFT|SENT|PAID|OVERDUE|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(U,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});h$1(t,e.pswListInvoices.items,{headers:["ID","Number","Status","Total","Currency"],rows:e.pswListInvoices.items.map(n=>[p(n.id,12),n.number,n.status,n.total!=null?String(n.total):"-",n.currency??"-"])});}catch(e){g(e);}}),i$1.command("create").description("Create an invoice").requiredOption("--client <id>","Client ID").requiredOption("--number <n>","Invoice number").option("--engagement <id>","Engagement ID").option("--currency <c>","Currency code").option("--issue-date <iso>","Issue date (ISO)").option("--due-date <iso>","Due date (ISO)").option("--subtotal <n>","Subtotal",I).option("--tax-amount <n>","Tax amount",I).option("--total <n>","Total",I).option("--line-items <json>","Line items JSON").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,number:t.number};t.engagement&&(e.engagementId=t.engagement),t.currency&&(e.currency=t.currency),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=q("line-items",t.lineItems)),t.notes&&(e.notes=t.notes);let n=await b$1(G,{input:e});i(`Invoice created: ${n.pswCreateInvoice.number}`),h$1(t,n.pswCreateInvoice);}catch(e){g(e);}}),i$1.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(x,{id:t});i(`Invoice ${n.pswMarkInvoicePaid.number} marked ${n.pswMarkInvoicePaid.status}`),h$1(e,n.pswMarkInvoicePaid);}catch(n){g(n);}});}function Y(r){r.command("time-entries").description("ProServiceWorld time entries").command("log").description("Log a time entry").requiredOption("--date <iso>","Entry date (ISO)").requiredOption("--minutes <n>","Minutes worked",c).option("--matter <id>","Matter ID").option("--engagement <id>","Engagement ID").option("--rate <n>","Hourly rate",I).option("--narrative <s>","Narrative").option("--non-billable","Mark entry as non-billable").option("-f, --format <format>","Output format").action(async t=>{try{if(!t.matter&&!t.engagement)throw new o("Provide --matter or --engagement to log time against");let e={date:t.date,minutes:t.minutes,billable:!t.nonBillable};t.matter&&(e.matterId=t.matter),t.engagement&&(e.engagementId=t.engagement),t.rate!==void 0&&(e.rate=t.rate),t.narrative&&(e.narrative=t.narrative);let n=await b$1(H,{input:e});i(`Time entry logged: ${n.pswLogTimeEntry.minutes} minutes`),h$1(t,n.pswLogTimeEntry);}catch(e){g(e);}});}function X(r){r.command("compliance").description("ProServiceWorld compliance checks").command("list").description("List compliance checks").option("--status <s>","PENDING|IN_REVIEW|PASSED|FAILED|WAIVED").option("--subject <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(j,{status:t.status?t.status.toUpperCase():void 0,subjectId:t.subject,subjectType:t.subjectType,pagination:u(t)});h$1(t,e.pswListComplianceChecks,{headers:["ID","Title","Type","Status","Subject","Due"],rows:e.pswListComplianceChecks.map(n=>[p(n.id,12),n.title,n.type,n.status,p(n.subjectId,12),o$1(n.dueDate)])});}catch(e){g(e);}});}function Z(r){r.command("conflicts").description("ProServiceWorld conflict-of-interest checks").command("list").description("List conflict checks").option("--client <id>","Filter by client ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(V,{clientId:t.client,pagination:u(t)});h$1(t,e.pswListConflictChecks,{headers:["ID","Client","Matter","Status","Parties"],rows:e.pswListConflictChecks.map(n=>[p(n.id,12),p(n.clientId,12),n.matterId?p(n.matterId,12):"-",n.status,String(n.searchedParties.length)])});}catch(e){g(e);}});}function Q(r){r.command("practice-areas").description("ProServiceWorld practice areas").command("list").description("List practice areas").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(W,{pagination:u(t)});h$1(t,e.pswListPracticeAreas,{headers:["ID","Name","Code","Active"],rows:e.pswListPracticeAreas.map(n=>[p(n.id,12),n.name,n.code??"-",n.isActive?"yes":"no"])});}catch(e){g(e);}});}function tt(r){r.command("health").description("ProServiceWorld service health check (public)").option("-f, --format <format>","Output format").action(async i$1=>{try{let t=await d(F);i(t.pswHealth),h$1(i$1,{health:t.pswHealth});}catch(t){g(t);}});}var et={id:"proserviceworld",version:"1.0.0",displayName:"ProServiceWorld",dependsOn:["auth","workspaces"],register(r,i){a(i);let t=r.command("proserviceworld").description("ProServiceWorld professional-services automation");z(t),K(t),B(t),J(t),Y(t),X(t),Z(t),Q(t),tt(t);}},Ft=et;export{Ft as default};
198
+ `;function q(r,i){try{return JSON.parse(i)}catch{throw new o(`--${r} must be valid JSON`)}}function c(r){let i=Number.parseInt(r,10);if(Number.isNaN(i))throw new o(`Expected an integer but got "${r}"`);return i}function I(r){let i=Number.parseFloat(r);if(Number.isNaN(i))throw new o(`Expected a number but got "${r}"`);return i}function C(r){return r.split(",").map(i=>i.trim()).filter(i=>i.length>0)}function u(r){let i={};return r.limit!==void 0&&(i.limit=r.limit),r.offset!==void 0&&(i.offset=r.offset),r.cursor!==void 0&&(i.cursor=r.cursor),Object.keys(i).length?i:void 0}function z(r$1){let i$1=r$1.command("clients").description("ProServiceWorld clients");i$1.command("list").description("List clients").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(D,{status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});i(t,e.pswListClients.items,{headers:["ID","Name","Type","Status","Industry","Contact"],rows:e.pswListClients.items.map(n=>[r(n.id,12),n.name,n.type,n.status,n.industry??"-",n.contactName??"-"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get a client by id").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(P,{id:t});if(!n.pswClient)throw new o(`Client ${t} not found`);i(e,n.pswClient);}catch(n){h$1(n);}}),i$1.command("create").description("Create a client").requiredOption("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.industry&&(e.industry=t.industry),t.contactName&&(e.contactName=t.contactName),t.contactEmail&&(e.contactEmail=t.contactEmail),t.contactPhone&&(e.contactPhone=t.contactPhone),t.address&&(e.address=t.address),t.notes&&(e.notes=t.notes),t.relationshipOwner&&(e.relationshipOwnerId=t.relationshipOwner),t.tags&&(e.tags=C(t.tags));let n=await b$1(h,{input:e});k$1(`Client created: ${n.pswCreateClient.name}`),i(t,n.pswCreateClient);}catch(e){h$1(e);}}),i$1.command("update").description("Update a client").argument("<id>","Client ID").option("--name <name>","Client name").option("--type <t>","INDIVIDUAL|ORGANIZATION").option("--status <s>","PROSPECT|ACTIVE|INACTIVE|ARCHIVED").option("--industry <i>","Industry").option("--contact-name <n>","Primary contact name").option("--contact-email <e>","Primary contact email").option("--contact-phone <p>","Primary contact phone").option("--address <a>","Address").option("--notes <n>","Notes").option("--relationship-owner <id>","Relationship owner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.type&&(n.type=e.type.toUpperCase()),e.status&&(n.status=e.status.toUpperCase()),e.industry!==void 0&&(n.industry=e.industry),e.contactName!==void 0&&(n.contactName=e.contactName),e.contactEmail!==void 0&&(n.contactEmail=e.contactEmail),e.contactPhone!==void 0&&(n.contactPhone=e.contactPhone),e.address!==void 0&&(n.address=e.address),e.notes!==void 0&&(n.notes=e.notes),e.relationshipOwner&&(n.relationshipOwnerId=e.relationshipOwner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(b,{id:t,input:n});k$1("Client updated"),i(e,w.pswUpdateClient);}catch(n){h$1(n);}}),i$1.command("archive").description("Archive a client").argument("<id>","Client ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(T,{id:t});k$1(n.pswArchiveClient?`Client ${t} archived`:`Client ${t} not archived`),i(e,{archived:n.pswArchiveClient});}catch(n){h$1(n);}});}function K(r$1){let i$1=r$1.command("engagements").description("ProServiceWorld engagements");i$1.command("list").description("List engagements").option("--client <id>","Filter by client ID").option("--status <s>","Engagement status").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(v,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});i(t,e.pswListEngagements.items,{headers:["ID","Name","Status","Fee","Amount","Currency"],rows:e.pswListEngagements.items.map(n=>[r(n.id,12),n.name,n.status,n.feeArrangement??"-",n.feeAmount!=null?String(n.feeAmount):"-",n.currency??"-"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get an engagement by id").argument("<id>","Engagement ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(O,{id:t});if(!n.pswEngagement)throw new o(`Engagement ${t} not found`);i(e,n.pswEngagement);}catch(n){h$1(n);}}),i$1.command("create").description("Create an engagement").requiredOption("--client <id>","Client ID").requiredOption("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",I).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,name:t.name};t.description&&(e.description=t.description),t.feeArrangement&&(e.feeArrangement=t.feeArrangement.toUpperCase()),t.feeAmount!==void 0&&(e.feeAmount=t.feeAmount),t.currency&&(e.currency=t.currency),t.startDate&&(e.startDate=t.startDate),t.endDate&&(e.endDate=t.endDate),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.responsiblePartner&&(e.responsiblePartnerId=t.responsiblePartner),t.tags&&(e.tags=C(t.tags));let n=await b$1(L,{input:e});k$1(`Engagement created: ${n.pswCreateEngagement.name}`),i(t,n.pswCreateEngagement);}catch(e){h$1(e);}}),i$1.command("update").description("Update an engagement").argument("<id>","Engagement ID").option("--name <name>","Engagement name").option("--description <s>","Description").option("--fee-arrangement <f>","FIXED|HOURLY|RETAINER|VALUE_BASED").option("--fee-amount <n>","Fee amount",I).option("--currency <c>","Currency code").option("--start-date <iso>","Start date (ISO)").option("--end-date <iso>","End date (ISO)").option("--practice-area <id>","Practice area ID").option("--responsible-partner <id>","Responsible partner user ID").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.name&&(n.name=e.name),e.description!==void 0&&(n.description=e.description),e.feeArrangement&&(n.feeArrangement=e.feeArrangement.toUpperCase()),e.feeAmount!==void 0&&(n.feeAmount=e.feeAmount),e.currency&&(n.currency=e.currency),e.startDate&&(n.startDate=e.startDate),e.endDate&&(n.endDate=e.endDate),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.responsiblePartner&&(n.responsiblePartnerId=e.responsiblePartner),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(N,{id:t,input:n});k$1("Engagement updated"),i(e,w.pswUpdateEngagement);}catch(n){h$1(n);}}),i$1.command("transition").description("Advance an engagement through its delivery lifecycle").argument("<id>","Engagement ID").requiredOption("--status <s>","PROPOSAL|ACCEPTED|IN_PROGRESS|REVIEW|DELIVERED|INVOICED|CLOSED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(M,{id:t,status:e.status.toUpperCase()});k$1(`Engagement transitioned to ${n.pswTransitionEngagement.status}`),i(e,n.pswTransitionEngagement);}catch(n){h$1(n);}});}function B(r$1){let i$1=r$1.command("matters").description("ProServiceWorld matters");i$1.command("list").description("List matters").option("--client <id>","Filter by client ID").option("--engagement <id>","Filter by engagement ID").option("--status <s>","OPEN|ON_HOLD|CLOSED|ARCHIVED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(S,{clientId:t.client,engagementId:t.engagement,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});i(t,e.pswListMatters.items,{headers:["ID","Title","Reference","Status","Priority","Privileged"],rows:e.pswListMatters.items.map(n=>[r(n.id,12),n.title,n.reference??"-",n.status,n.priority,n.isPrivileged?"yes":"no"])});}catch(e){h$1(e);}}),i$1.command("get").description("Get a matter by id").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(R,{id:t});if(!n.pswMatter)throw new o(`Matter ${t} not found`);i(e,n.pswMatter);}catch(n){h$1(n);}}),i$1.command("create").description("Create a matter").requiredOption("--client <id>","Client ID").requiredOption("--title <t>","Matter title").option("--reference <r>","External reference").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged","Mark as privileged").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,title:t.title};t.reference&&(e.reference=t.reference),t.description&&(e.description=t.description),t.engagement&&(e.engagementId=t.engagement),t.practiceArea&&(e.practiceAreaId=t.practiceArea),t.leadPractitioner&&(e.leadPractitionerId=t.leadPractitioner),t.priority&&(e.priority=t.priority.toUpperCase()),t.privileged&&(e.isPrivileged=!0),t.dueDate&&(e.dueDate=t.dueDate),t.tags&&(e.tags=C(t.tags));let n=await b$1($,{input:e});k$1(`Matter created: ${n.pswCreateMatter.title}`),i(t,n.pswCreateMatter);}catch(e){h$1(e);}}),i$1.command("update").description("Update a matter").argument("<id>","Matter ID").option("--title <t>","Matter title").option("--description <s>","Description").option("--engagement <id>","Engagement ID").option("--practice-area <id>","Practice area ID").option("--lead-practitioner <id>","Lead practitioner user ID").option("--priority <p>","LOW|MEDIUM|HIGH|CRITICAL").option("--privileged <bool>","true|false",t=>t==="true").option("--due-date <iso>","Due date (ISO)").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n={};if(e.title&&(n.title=e.title),e.description!==void 0&&(n.description=e.description),e.engagement&&(n.engagementId=e.engagement),e.practiceArea&&(n.practiceAreaId=e.practiceArea),e.leadPractitioner&&(n.leadPractitionerId=e.leadPractitioner),e.priority&&(n.priority=e.priority.toUpperCase()),e.privileged!==void 0&&(n.isPrivileged=e.privileged),e.dueDate&&(n.dueDate=e.dueDate),e.tags&&(n.tags=C(e.tags)),!Object.keys(n).length)throw new o("No updates specified");let w=await b$1(k,{id:t,input:n});k$1("Matter updated"),i(e,w.pswUpdateMatter);}catch(n){h$1(n);}}),i$1.command("close").description("Close a matter").argument("<id>","Matter ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(_,{id:t});k$1(`Matter closed: ${n.pswCloseMatter.status}`),i(e,n.pswCloseMatter);}catch(n){h$1(n);}});}function J(r$1){let i$1=r$1.command("invoices").description("ProServiceWorld invoices");i$1.command("list").description("List invoices").option("--client <id>","Filter by client ID").option("--status <s>","DRAFT|SENT|PAID|OVERDUE|CANCELLED").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(U,{clientId:t.client,status:t.status?t.status.toUpperCase():void 0,pagination:u(t)});i(t,e.pswListInvoices.items,{headers:["ID","Number","Status","Total","Currency"],rows:e.pswListInvoices.items.map(n=>[r(n.id,12),n.number,n.status,n.total!=null?String(n.total):"-",n.currency??"-"])});}catch(e){h$1(e);}}),i$1.command("create").description("Create an invoice").requiredOption("--client <id>","Client ID").requiredOption("--number <n>","Invoice number").option("--engagement <id>","Engagement ID").option("--currency <c>","Currency code").option("--issue-date <iso>","Issue date (ISO)").option("--due-date <iso>","Due date (ISO)").option("--subtotal <n>","Subtotal",I).option("--tax-amount <n>","Tax amount",I).option("--total <n>","Total",I).option("--line-items <json>","Line items JSON").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={clientId:t.client,number:t.number};t.engagement&&(e.engagementId=t.engagement),t.currency&&(e.currency=t.currency),t.issueDate&&(e.issueDate=t.issueDate),t.dueDate&&(e.dueDate=t.dueDate),t.subtotal!==void 0&&(e.subtotal=t.subtotal),t.taxAmount!==void 0&&(e.taxAmount=t.taxAmount),t.total!==void 0&&(e.total=t.total),t.lineItems&&(e.lineItems=q("line-items",t.lineItems)),t.notes&&(e.notes=t.notes);let n=await b$1(G,{input:e});k$1(`Invoice created: ${n.pswCreateInvoice.number}`),i(t,n.pswCreateInvoice);}catch(e){h$1(e);}}),i$1.command("mark-paid").description("Mark an invoice as paid").argument("<id>","Invoice ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let n=await b$1(x,{id:t});k$1(`Invoice ${n.pswMarkInvoicePaid.number} marked ${n.pswMarkInvoicePaid.status}`),i(e,n.pswMarkInvoicePaid);}catch(n){h$1(n);}});}function Y(r){r.command("time-entries").description("ProServiceWorld time entries").command("log").description("Log a time entry").requiredOption("--date <iso>","Entry date (ISO)").requiredOption("--minutes <n>","Minutes worked",c).option("--matter <id>","Matter ID").option("--engagement <id>","Engagement ID").option("--rate <n>","Hourly rate",I).option("--narrative <s>","Narrative").option("--non-billable","Mark entry as non-billable").option("-f, --format <format>","Output format").action(async t=>{try{if(!t.matter&&!t.engagement)throw new o("Provide --matter or --engagement to log time against");let e={date:t.date,minutes:t.minutes,billable:!t.nonBillable};t.matter&&(e.matterId=t.matter),t.engagement&&(e.engagementId=t.engagement),t.rate!==void 0&&(e.rate=t.rate),t.narrative&&(e.narrative=t.narrative);let n=await b$1(H,{input:e});k$1(`Time entry logged: ${n.pswLogTimeEntry.minutes} minutes`),i(t,n.pswLogTimeEntry);}catch(e){h$1(e);}});}function X(r$1){r$1.command("compliance").description("ProServiceWorld compliance checks").command("list").description("List compliance checks").option("--status <s>","PENDING|IN_REVIEW|PASSED|FAILED|WAIVED").option("--subject <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(j,{status:t.status?t.status.toUpperCase():void 0,subjectId:t.subject,subjectType:t.subjectType,pagination:u(t)});i(t,e.pswListComplianceChecks.items,{headers:["ID","Title","Type","Status","Subject","Due"],rows:e.pswListComplianceChecks.items.map(n=>[r(n.id,12),n.title,n.type,n.status,r(n.subjectId,12),q$1(n.dueDate)])});}catch(e){h$1(e);}});}function Z(r$1){r$1.command("conflicts").description("ProServiceWorld conflict-of-interest checks").command("list").description("List conflict checks").option("--client <id>","Filter by client ID").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(V,{clientId:t.client,pagination:u(t)});i(t,e.pswListConflictChecks.items,{headers:["ID","Client","Matter","Status","Parties"],rows:e.pswListConflictChecks.items.map(n=>[r(n.id,12),r(n.clientId,12),n.matterId?r(n.matterId,12):"-",n.status,String(n.searchedParties.length)])});}catch(e){h$1(e);}});}function Q(r$1){r$1.command("practice-areas").description("ProServiceWorld practice areas").command("list").description("List practice areas").option("--limit <n>","Page size",c,50).option("--offset <n>","Offset",c,0).option("--cursor <c>","Pagination cursor").option("-f, --format <format>","Output format").action(async t=>{try{let e=await b$1(W,{pagination:u(t)});i(t,e.pswListPracticeAreas.items,{headers:["ID","Name","Code","Active"],rows:e.pswListPracticeAreas.items.map(n=>[r(n.id,12),n.name,n.code??"-",n.isActive?"yes":"no"])});}catch(e){h$1(e);}});}function tt(r){r.command("health").description("ProServiceWorld service health check (public)").option("-f, --format <format>","Output format").action(async i$1=>{try{let t=await d(F);k$1(t.pswHealth),i(i$1,{health:t.pswHealth});}catch(t){h$1(t);}});}var et={id:"proserviceworld",version:"1.0.0",displayName:"ProServiceWorld",dependsOn:["auth","workspaces"],register(r,i){a(i);let t=r.command("proserviceworld").description("ProServiceWorld professional-services automation");z(t),K(t),B(t),J(t),Y(t),X(t),Z(t),Q(t),tt(t);}},Ft=et;export{Ft as default};
@@ -1,4 +1,4 @@
1
- import {a,h as h$1,p,g,i,n,s,b,c}from'../../chunk-W4JZR7RJ.js';import {o}from'../../chunk-YIY5IDXQ.js';var h=`
1
+ import {a,i,r,h as h$1,k,p,u,b,c}from'../../chunk-O6UCQ5IT.js';import {o}from'../../chunk-YIY5IDXQ.js';var h=`
2
2
  query ListRoles($filter: RoleFilterInput, $pagination: PaginationInput, $scopeId: String!) {
3
3
  roles(filter: $filter, pagination: $pagination, scopeId: $scopeId) {
4
4
  id
@@ -73,4 +73,4 @@ import {a,h as h$1,p,g,i,n,s,b,c}from'../../chunk-W4JZR7RJ.js';import {o}from'..
73
73
  overrideType
74
74
  }
75
75
  }
76
- `;function d(c$1,n,a){return c$1==="workspace"?b(n,a):c(n,a)}function f(c){let n=s().auth.read();if(c==="workspace"){if(!n?.workspaceId)throw new o("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return n.workspaceId}if(!n?.organizationId)throw new o("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return n.organizationId}function v(c){let n$1=c.command("rbac").description("Role-based access control"),a=n$1.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 o=e.layer==="global"?"global":"workspace",t=e.scope??f(o),r={};e.includeSystem&&(r.includeSystem=!0);let i=await d(o,h,{filter:Object.keys(r).length?r:void 0,pagination:{limit:e.limit,offset:0},scopeId:t});h$1(e,i.roles,{headers:["ID","Name","Scope","Priority","System"],rows:i.roles.map(p$1=>[p(p$1.id,12),p$1.name,p(p$1.scopeId,12),String(p$1.priority),String(p$1.isSystem)])});}catch(o){g(o);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o$1)=>{try{let t=o$1.layer==="global"?"global":"workspace",r=await d(t,L,{id:e});if(!r.role)throw new o(`Role ${e} not found`);h$1(o$1,r.role);}catch(t){g(t);}}),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 o=e.layer==="global"?"global":"workspace",t=e.scope??f(o),r={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:t};o==="global"&&e.scopeType&&(r.scopeType=e.scopeType);let i$1=await d(o,C,{input:r});i(`Role created: ${i$1.createRole.name}`),h$1(e,i$1.createRole);}catch(o){g(o);}}),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,o$1)=>{try{let t=o$1.layer==="global"?"global":"workspace",r={};if(o$1.name&&(r.name=o$1.name),o$1.description!==void 0&&(r.description=o$1.description),o$1.priority!==void 0&&(r.priority=o$1.priority),o$1.parent&&(r.parentId=o$1.parent),!Object.keys(r).length)throw new o("No updates specified");let i$1=await d(t,P,{id:e,input:r});i("Role updated"),h$1(o$1,i$1.updateRole);}catch(t){g(t);}}),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,o)=>{try{let t=o.layer==="global"?"global":"workspace";await d(t,S,{id:e,reassignToRoleId:o.reassign}),i("Role deleted");}catch(t){g(t);}}),n$1.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 o=e.layer==="global"?"global":"workspace",t={};e.resourceType&&(t.resourceType=e.resourceType),e.action&&(t.action=e.action);let r=await d(o,O,{filter:Object.keys(t).length?t:void 0,pagination:{limit:e.limit,offset:0}});h$1(e,r.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:r.policyReferences.map(i=>[p(i.id,12),i.name,i.resourceType??"-",i.action??"-",String(i.isActive),String(i.priority??"-")])});}catch(o){g(o);}}),n$1.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,o,t,r)=>{try{let i=r.layer==="global"?"global":"workspace",p=r.scope??f(i),x={actorId:e,actorType:(r.actorType??"USER").toUpperCase(),action:o,resourceType:t,resourceId:r.resourceId,scopeId:p},m=await d(i,$,{input:x});h$1(r,m.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[n(m.checkPermission.allowed?"ACTIVE":"ERROR"),m.checkPermission.decisionPath,m.checkPermission.roleName??"-",m.checkPermission.roleLevel??"-",m.checkPermission.overrideType??"-"]]});}catch(i){g(i);}});}var _={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(c,n){a(n),v(c);}},q=_;export{q as default};
76
+ `;function d(c$1,n,a){return c$1==="workspace"?b(n,a):c(n,a)}function f(c){let n=u().auth.read();if(c==="workspace"){if(!n?.workspaceId)throw new o("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return n.workspaceId}if(!n?.organizationId)throw new o("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return n.organizationId}function v(c){let n=c.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 o=e.layer==="global"?"global":"workspace",t=e.scope??f(o),r$1={};e.includeSystem&&(r$1.includeSystem=!0);let i$1=await d(o,h,{filter:Object.keys(r$1).length?r$1:void 0,pagination:{limit:e.limit,offset:0},scopeId:t});i(e,i$1.roles,{headers:["ID","Name","Scope","Priority","System"],rows:i$1.roles.map(p=>[r(p.id,12),p.name,r(p.scopeId,12),String(p.priority),String(p.isSystem)])});}catch(o){h$1(o);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o$1)=>{try{let t=o$1.layer==="global"?"global":"workspace",r=await d(t,L,{id:e});if(!r.role)throw new o(`Role ${e} not found`);i(o$1,r.role);}catch(t){h$1(t);}}),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 o=e.layer==="global"?"global":"workspace",t=e.scope??f(o),r={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:t};o==="global"&&e.scopeType&&(r.scopeType=e.scopeType);let i$1=await d(o,C,{input:r});k(`Role created: ${i$1.createRole.name}`),i(e,i$1.createRole);}catch(o){h$1(o);}}),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,o$1)=>{try{let t=o$1.layer==="global"?"global":"workspace",r={};if(o$1.name&&(r.name=o$1.name),o$1.description!==void 0&&(r.description=o$1.description),o$1.priority!==void 0&&(r.priority=o$1.priority),o$1.parent&&(r.parentId=o$1.parent),!Object.keys(r).length)throw new o("No updates specified");let i$1=await d(t,P,{id:e,input:r});k("Role updated"),i(o$1,i$1.updateRole);}catch(t){h$1(t);}}),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,o)=>{try{let t=o.layer==="global"?"global":"workspace";await d(t,S,{id:e,reassignToRoleId:o.reassign}),k("Role deleted");}catch(t){h$1(t);}}),n.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 o=e.layer==="global"?"global":"workspace",t={};e.resourceType&&(t.resourceType=e.resourceType),e.action&&(t.action=e.action);let r$1=await d(o,O,{filter:Object.keys(t).length?t:void 0,pagination:{limit:e.limit,offset:0}});i(e,r$1.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:r$1.policyReferences.map(i=>[r(i.id,12),i.name,i.resourceType??"-",i.action??"-",String(i.isActive),String(i.priority??"-")])});}catch(o){h$1(o);}}),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,o,t,r)=>{try{let i$1=r.layer==="global"?"global":"workspace",p$1=r.scope??f(i$1),x={actorId:e,actorType:(r.actorType??"USER").toUpperCase(),action:o,resourceType:t,resourceId:r.resourceId,scopeId:p$1},m=await d(i$1,$,{input:x});i(r,m.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[p(m.checkPermission.allowed?"ACTIVE":"ERROR"),m.checkPermission.decisionPath,m.checkPermission.roleName??"-",m.checkPermission.roleLevel??"-",m.checkPermission.overrideType??"-"]]});}catch(i){h$1(i);}});}var _={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(c,n){a(n),v(c);}},q=_;export{q as default};